I have created a module with a few files that I update & delete via spfeature. Thing is if a page layout is in use I cannot delete it and it throws an error, even when inside a try{ }catch{} . How do I test what page layout(s) being used? -C#
-
What do you mean with "even when inside a try{}catch{} block"? The catch clause does not catch the exception??– SPArcheonMar 15, 2013 at 14:47
-
Try{ SPFile.Delete(); } catch{ } but since the file is the page layout still being refrenced it throws an error & the disable fails to disable the feature– user13186Mar 15, 2013 at 16:14
-
1Does the catch block re-throw the error? I am using a similar code (try deletion, fail and on the catch block log the error and add a notification for the user) inside a feature deactivation handler with no problem at all. Feature completes the deactivation - as long as in my handler I don't bubble up the error. Yes, the file will still be there after the feature deactivate, but since I notify the user that is just what I want.– SPArcheonMar 15, 2013 at 16:23
2 Answers
To test your pages list in the Feature deactivated event you should be able to query by page layout. The following will return any pages in the "Pages" list whose page layout contains "WebPartPage.aspx".
SPList spList = spWeb.Lists.TryGetList("Pages");
if (spList != null)
{
SPQuery qry = new SPQuery();
qry.Query =
@" <Where>
<Contains>
<FieldRef Name='PublishingPageLayout' />
<Value Type='URL'>WebPartPage.aspx</Value>
</Contains>
</Where>";
qry.ViewFields = @"<FieldRef Name='PublishingPageLayout' />";
SPListItemCollection listItems = spList.GetItems(qry);
}
You could do the check really easy right in the browser using the the out of the box web service listdata.svc.
Display all pages from the "Pages" list and their layouts
<yoursiteUrl>/_vti_bin/listdata.svc/Pages?$select=Name,PageLayout
Display only pages from the "Pages" list using BlankWebPartPage.aspx layout
<yoursiteUrl>/_vti_bin/listdata.svc/Pages?$select=Name,PageLayout&$filter=substringof('BlankWebPartPage.aspx',%20PageLayout)%20eq%20true
Note: If you use IE you'll want to see the raw XML not the "helpful" rss feed view. Go to Internet Options -> Content tab -> Feeds and Web Slices Settings -> Uncheck "Turn on feed reading view"
-
It needs to be checked as apart of the feature deactivation event reciever not manually Mar 15, 2013 at 16:18