Ashley
Blog - Robert Bogue [MVP]
Rob's Notebook
SharePoint Calendar
Thor Projects LLC - Welcome : Blog - Robert Bogue [MVP]
Tuesday, August 30, 2005

Debugging in the GAC

There are sometimes when your assembly almost has to be in the GAC and when you need to debug it.  This was difficult since if you registered a .NET assembly into the GAC the debugger wouldn't break on it.  This is because the .PDB file information didn't get loaded since it's not in the same directory as the DLL.  Here's how to work around that.

1) Install the Assembly in the GAC
2) Start-Run, %SYSTEMROOT%\Assembly\GAC
3) Navigate into the folder with name of the DLL that you want to debug
4) Navigate into the folder with the version number and public key that you want
5) Copy the .PDB file into this directory

Now you'll be able to run a debugger against code running in the GAC.


Categories: Professional | 2 Comments
 
 
 
Friday, August 26, 2005

Requirement: Collaboration

The next time I see a requirements document which says they want “collaboration” my response is going to be to ask...

“Why do you want to cooperate treasonably with a foreign power?”

Maybe that will jar people into asking what they mean by collaboration.  (Asking what they mean by collaboration doesn't seem to work in most cases.)


Categories: Personal | 0 Comments
 
Thursday, August 25, 2005

Anatomy of a Software Development Role: Development Manager

It is possible to believe that there is nothing left to be done. That all of the roles outlined thus far is all that is needed to make the process work. However, the role of the development manager is critical to the long-term success of the software development team. The role that the development manager plays - particularly when interacting with the project manager - is essential to a continuously improving process. (If you've not been following the series, you might want to read Cracking the Code: Breaking Down the Software Development Roles.)

Read more of the article at http://www.developer.com/java/ent/article.php/3529081

[Author's Note: I really enjoyed the mental exercise that writing this series brought.  It was a good way for me to clarify my thinking around the various roles in the software development process.  I hope that it can provide a framework for understanding how people fit into the process in your organization. The next series is on Coding standards and starts in just a few weeks.  I'm always happy to get input on what you think should or shouldn't be in coding standards.]


Categories: Articles, Professional | 0 Comments
 
Wednesday, August 24, 2005

SharePoint: Cannot complete this action. Please try again.

Another one of those lovely SharePoint error messages ... This one leaves me wondering what I do when it doesn't work the second time I try it.  (Or the hundredth since I'm getting it back from code running against the API.)

... I've got to get my library of least favorite SharePoint error messages up.

If anyone's interested this one came up when trying to get SPWeb from SPSite.OpenWeb with a GUID ... that is valid.

Rob


Categories: Professional | 0 Comments
 
Wednesday, August 24, 2005

The SharePoint IRunTimeFilter is a good idea but the implementation…

Mike Donovan's post got me interested in how IRuntimeFilter could be used to replicate SharePoint Portal Server audience/targeting feature in Windows SharePoint Services.  There are several situations I've run into where the SPS targeting is a compelling feature for Portal Server but the limitation of 10,000 areas was a problem.  (By way of reference, I also found Serge van den Oever's reverse engineering of the interface which was very good.)

 

In thinking about the interface it also seemed promising as a potential way to secure web parts.  In other words, with an IRuntimeFilter running you could potentially turn off web parts for certain groups of users.  This might be effective at preventing them from seeing our using web parts from the gallery that some users needed but weren't suitable for everyone.

 

However, the actual implementation of the interface appears to have a few challenges.  (I have a case open with MS PSS right now to verify some of these observations.  I'll update this blog entry or more likely add a new one when I get more information.)

 

1)      The filter is only called when the IsIncludedFilter property in the web part has a non-empty (non-null value.)  In other words, you don't get the opportunity to inspect every web part as it's loaded, you only get to inspect those web parts with the property set.  This makes it useful for user configuration but not very useful as a "traffic cop."

2)      The interface doesn’t specify any information about the web part itself.  It only returns to you a filter string that you presumably created with the user interface.  The challenge with this is that there is no way (I've found) to determine just which web part is trying to be displayed.  Again, maybe this isn't an issue for users configuring things for themselves, but it seems awfully limiting.  One reason is because when a web part is exported and re-imported, the IsIncludedFilter property stays with it.  That means that if you have site-specific data in the IsIncludedFilter property it becomes invalidated when it moves to the next site.  This is a real problem when trying to move web parts between sites or punch out a template site.  (The Microsoft provided ListViewWebPart andListFormWebPart both exhibit problems when you try to move them from one site to another due to this same fundamental issue of using site/area specific property values.  This is why you are not allowed to export and import ListViewWebParts via the user interface.)

3)      The ValidateIsIncludedFilter() method, which is called when the property is saved is called all the time.  There's no event which fires when the user adds the web part or changes the configuration.  This event fires every time the web part is saved.  This appears to be happening on every page load – which is a bad thing in and of itself that I don't really understand.  Why would we be saving a web part back to the database every time it's rendered?  It seems to me that this would be a huge performance problem.

4)      The IRuntimeFilter is only called in "personalization mode" The precise meaning of this eludes me – I can't find the definition in the documentation.  However, based on observation it appears that it is only called in the personal view of the site.  (This would be the view that few people actually see first, only those who have the permission to personalize the site and have done so default to a personal view of the site – almost everyone gets a shared view.)  The net effect of this is that it's going to require some more work to force people into a personal view by default when they view a WSS page.

5)      The IRuntimeFilter interface is only called for "global" web parts on a page.  That means if the user adds a web part to their page while in personal mode the IRuntimeFilter will never control whether it is displayed or not.

 

As a sidebar, it appears that SPS enters personalization mode or the "my page" view by default since their IRuntimeFilter is turned on.  I tried playing with this and observed that when I put a SharePoint Area into edit mode and then switched to personal view all of my menus disappeared.  All I could do was return to Shared mode which would allow me to edit what web parts were on the page, etc.  Based on these observations it looks like SPS is actually putting the area into a personal view every time the page is loaded but they also don't allow you to personalize the page.

 

So, I can probably replicate the SPS audiences using IRuntimeFilter if I can figure out how to force the WSS sites to default in personal view even for those without any personalization to the site.

 

However, without some way of inserting the web part storage key or some other value into the IsIncludedFilter property of a web part while it's being imported, I'm not sure how to make this interface any more useful than the SPS application of it.  I've not found a way to inject properties to every web part as it's added yet…

 

Is anyone else playing with this interface?


Categories: Professional | 0 Comments
 
 
Sunday, August 21, 2005

Key Things an IT Manager at a small or mid-sized organization should know

As some of you know, I write a weekly newsletter for Tech Republic -- Strategies that Scale.  That newsletter is targeted towards IT managers of small and mid-sized organizations.  The goal is to provide useful information that helps them grow their IT organization, and their organization as a whole.

I'm looking for your input for future topics.  It can be a topic that you see done wrong all the time and want someone to write about the correct (or a correct) way of doing it.  It can be something that you've seen someone do very successfully.  I can even be something that you struggle with or that you've learned how to do.  The doors are open, I'd love to hear what you have to say.

You can respond here via comment, or you can send me an email directly (rob[dot]bogue[at]thorprojects[dot]com)

 


Categories: Professional | 0 Comments
 
Sunday, August 21, 2005

No Searching SharePoint Portal Pages -- by default

Something I ran across the other day is that the default content index for Portal Content has an exclusion in it so that it won't search the actual pages of the Portal.  If you have content editor web parts, or other content that you want to make sure that SharePoint does index, you'll want to go into SharePoint and remove the exclusion for pages.  You can follow these steps to remove the exclusion

  1. Open the SharePoint Portal Server site
  2. Click on Site Settings
  3. Click Configure search and indexing
  4. Click Manage Content Indexes
  5. Hover over Portal Content, drop down the menu arrow that appears on the right, and select Edit.
  6. Click Manage rules to exclude and include content
  7. Find the entry in the list which is http://yourserver/*.aspx, hover over it, drop down the menu arrow that appears on the right, and select Delete.

The next time the portal content index is refreshed you'll start getting content from the web part pages as well.

 


Categories: Professional | 0 Comments
 
 Next >>