0

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#

3
  • What do you mean with "even when inside a try{}catch{} block"? The catch clause does not catch the exception??
    – SPArcheon
    Mar 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
    – user13186
    Mar 15, 2013 at 16:14
  • 1
    Does 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.
    – SPArcheon
    Mar 15, 2013 at 16:23

2 Answers 2

1

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); 
} 
0

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"

1
  • It needs to be checked as apart of the feature deactivation event reciever not manually
    – user13186
    Mar 15, 2013 at 16:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.