Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

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#

share|improve this question
    
What do you mean with "even when inside a try{}catch{} block"? The catch clause does not catch the exception?? –  SPArchaeologist Mar 15 '13 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 '13 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. –  SPArchaeologist Mar 15 '13 at 16:23

2 Answers 2

up vote 1 down vote accepted

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); 
} 
share|improve this answer

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"

share|improve this answer
    
It needs to be checked as apart of the feature deactivation event reciever not manually –  user13186 Mar 15 '13 at 16:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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