General discussion

  • Creator
    Topic
  • #2182140

    Not fit for print

    Locked

    by rlbogue ·

    blog root

All Comments

  • Author
    Replies
    • #3177725

      Not fit for print

      by rlbogue ·

      In reply to Not fit for print

      OK, I give up.  I keep getting asked if I have a blog.  I get asked at work, at community events, and even in personal interations.  So I give up.  This represents the first entry in my new blog.

      On a more positive note, as I’ve been thinking about what I would put on my blog, I’ve come up with some of the following ideas…

      • Stuff I want to remember and be able to search for (so I’m selfish)
      • Stuff that I can’t get a publisher to pay for
      • Personal updates that aren’t appropriate for articles

      I’ll probably also post links to articles as they come up … at least as I think about it just in case you want to see all I’m writing.

    • #3177723

      SharePoint Advisor Live! Day 1

      by rlbogue ·

      In reply to Not fit for print

      I’m out at SharePoint Advisor Live!.  It’s good to get to talk to the other speakers to learn about how they’re using SharePoint in their worlds and talking to the attendees to learn about their challenges.  A few of the highlights from the day…

      • Echo for SharePoint (http://www.winapptechnologies.com) – A winform based application to migrate lists and web part pages from one site to another.  Currently only works on the local server (meaning they’re using the SP API).  No command line yet — so it won’t fit into automated deployments.  It does, however, manage to get past some of the issues that the two migration utilities that I’m working on are still having.
      • ParallelSpace (http://www.parallelspace.com) – Content migration utilities and security assessment utilities for SharePoint.
      • Microsoft/Domino connection (http://www.msdomino.net) – Allows for Domino/Notes to be shown in SharePoint.  Not clear on how it all works yet, the demo wasn’t fully functional yesterday when I went by but it’s definitely interesting.

      There were some interesting conversations about off-line clients and rich clients for SharePoint.  Mostly the idea that Access might be a front end to SharePoint.  Specifically the thought of adding relationships to SharePoint list data was discussed.

    • #3177724

      Remain productive by honoring commitments

      by rlbogue ·

      In reply to Not fit for print

    • #3177720

      DataViewWebParts are Cool…

      by rlbogue ·

      In reply to Not fit for print

      I’ve always avoided front page like the plague.  In part due to the fact that I don’t want to unghost my pages but also in part because I just dislike the tool.  However, that’s changed…

      The ability to create data view web parts and more importantly to convert list view web parts into dataview web parts (with a simple right click I might add) is very cool.  Add the list view web part to your page, right click in front page to convert to a dataviewweb part and you’re done.

      Of course using front page will unghost the page you’re working with — however, you can always export the DWP file and use it other places.

      Another useful tool…

      Rob

    • #3177721

      Anatomy of a Software Development Role: Developer

      by rlbogue ·

      In reply to Not fit for print

      I’ve been doing a series at developer.com which describes each of the roles in the software development process — the latest article on the role of a developer has posted.

      http://www.developer.com/java/other/article.php/3511566

    • #3177722

      VCard Burster

      by rlbogue ·

      In reply to Not fit for print

      So, at Crowe we run Lotus Notes.  (I hate Lotus Notes.)  Sorry, it’s an automatic response.

      Anyway, I wanted to export my contacts to sync with my Exchange infrastructure here at the home office.  No problem.  Notes will export to vCards.  Ok, there is a problem.  Notes exports to one huge vCard file with multiple vCards.  Outlook only recognizes files with one vCard.  The net result is that you can only import the first record in the Notes vCard export.

      So I wrote a utility which bursts a single vCard file into multiple vCard files so you can double click the ones you want and add them to outlook.  It’s really quick and fairly slick.

      I’m working on getting a license created that I can use to distribute free stuff like this, but in the mean time send me an email if you need a copy of the utility (or the code).  I’ll send it to you if you email me.  The standard disclaimers apply… I wrote it for me, it may or may not work for you.

       

    • #3176701

      No Service

      by rlbogue ·

      In reply to Not fit for print

      [Note: I wrote this a year ago, mainly as therapy for the frustration. I thought it might be interesting for others to see.  Since the event of more than a year ago things have substantially improved and I like my service except for the occaisional quirk.  I’m just glad I don’t have to work through problems every day.  –rlb]

      No Service: Painful Portability

       

      The plane lands and turns onto the taxi way.  The flight attendants politely but firmly let you know that you should sit in your seat until the aircraft comes to a complete stop and the pilot turns off the fasten seatbelt sign.  Then she informs you that cellular phones can now be used.

       

      You turn on your phone to the startup tone.  You look down at the signal bar.  No signal.  You try to check your voice mail and receive a message of no service.  You look out the window and confirm you are in a large city.  Looking back down again you realize that this is more than just some added delay in getting the phone to wake up.

       

      The Saga Begins

      A situation quite similar happened to me recently.  I landed in Seattle, WA which is just about as far from my home in Indianapolis, IN as you can get without leaving the continental United States.  Although concerned, I felt comfortable that this was just a minor glitch that could be easily resolved.  I made it to the hotel, missing the opportunity to call my wife and let her know that I landed safely before she went to bed.

       

      I picked up the phone at the hotel to call Cingular, the wireless carrier I had switched to only three weeks before hand.  I was greeted with a prompt that told me that customer service was closed, but there was, luckily, an after hours support number.

       

      After a brief interaction, and a technical support person who couldn’t locate the problem I was told to turn the phone off until the morning and things would probably work themselves out.

       

      Broken from the Start

      Three weeks prior when trying to activate the service I learned to be somewhat skeptical as I went through a week and a half of trying to get things working.  I ordered the phone from TeleSales and activated service for two lines.  One for my wife and the other to support my needs.  I decided to port my telephone number from Sprint PCS to Cingular in no small part so I could see how bad portability really was.  Sometimes writers have to do things that they know are wrong so they can remind others not to do it – or so I’ve been told by my similarly masochistic friends.

       

      Things were broken from the start as my wife’s phone arrived on time two days after I ordered it but mine was nowhere to be found.  A phone call or two later I was told that the phone hadn’t shipped because they were waiting on the portability department to OK the phone’s shipment.  Over the course of the next few phone calls and countless hours wasted I realized that the process for shipping new service on a ported phone was completely insane since Telesales was waiting on portability.  Portability was waiting on me to have the device so they could activate it in the system.

       

      When two more days passed and I still hadn’t seen the device I called back in only to find out that TeleSales couldn’t track the phone.  However, they were able to finally confirm that the phone shipped – a day after it was supposed to.  By the time the phone arrived it was nearly a full week later.  The device was ordered on a Saturday and arrived the Friday following.  When I called in to activate the phone they couldn’t get the system to take it.  They explained that something was wrong but they’d put in a ticket which might take two business days to get an answer to.

       

      On a whim I called back on Monday and received an activation for the phone.  While on the phone I made a quick outbound call.  Success!  At least that’s what I thought until I went to call the phone back and setup my voicemail.  Neither one of them worked.

       

      Another call back and a few more wasted hours got me no where.  Over the next two days I logged literally hours on the phone trying to get someone who would resolve the problem.  The first day I was told that the phone wasn’t “fully” in the system and that I’d have to wait until Tuesday.  Tuesday came without voice mail or inbound calls.

       

      I finally found a supervisor willing to commit to resolving my issues.  A few hours later I had inbound calls.  A few more calls from me finally got my voice mailbox setup correctly since apparently the device wasn’t setup right before it was shipped and there were some other configuration issues with the phone.

       

      For the time after these problems and before my journey to Seattle all was well.  I was enjoying the extended coverage area and service.

       

      Disaster is in the Air

      When the next morning of my Seattle trip came I still had no service.  When I called back in I was told that they couldn’t see the device and would have to put a roaming ticket in and that those took two to three days to resolve.  I was also told that it was most likely an equipment problem and that the phone should be looked at.

       

      Over the next three days I wasted three or so hours trying to get them to identify a store that I could go into to get a resolution.  It seems that the multi-mode (GSM/TDMA) phones that I had weren’t popular in the area so none of the local stores sold them or could diagnose them.  The store which was less than a block from the convention center where I was going to be was useless because they didn’t have the ability to resolve the issue.

       

      I was offered the ability to order a new device from TeleSales – which couldn’t send devices any faster than two day air and I already had experience with them not shipping the same day.  Ultimately this meant that I’d be on my way home before a replacement device could get to me.

       

      The end result was four days in Seattle without the cellular coverage I was paying for. 

       

      What’s wrong with this picture?

      Perhaps the most frustrating part of the whole situation was the fact that there weren’t any quick solutions to the problems I was sharing.  Everything was a two or three day wait.  Every solution was presented with the caveat that it probably wouldn’t fix my problem.

       

      Each solution that I presented was met unceremoniously with a reason why it wouldn’t work.  They couldn’t reprogram the SIM card in my phone because I wasn’t in my home market.  They couldn’t get me a SIM card with a Seattle local number because I didn’t live in Seattle and Indiana and Seattle use different billing systems.

       

      It’s just too bad I can’t live without my cell phone.

    • #3176700

      How to create a technology replacement strategy

      by rlbogue ·

      In reply to Not fit for print

    • #3178363

      Anatomy of a Software Development Role: Quality Assurance

      by rlbogue ·

      In reply to Not fit for print

    • #3178364
    • #3178310

      Sniping SPSBackup Threads

      by rlbogue ·

      In reply to Not fit for print

      I’ve not yet had a chance to test … I was wondering if the SQL Sniping script — designed to kill blocking threads — could be used to kill off the leftovers from a bad SPSBackup session so that the next backup could run successfully.  The SQL sniping script can be found at http://www.integer.org … I’ll have to try it the next time SPSBackup decides to not close down correctly.

    • #3185438

      Sell the strategy before selling the tactics

      by rlbogue ·

      In reply to Not fit for print

    • #3182895

      Ramblings: Things I hate about debugging

      by rlbogue ·

      In reply to Not fit for print

      So one of the things that I truly despise about debugging is working for a few hours trying to make something work only to find out later that it isn’t that thing that’s broken at all… Case in point.  I was getting a Access denied type message while trying to write something to the registry.  I thought it was code access security — because that’s normally what it is.  It turned out to be that I forgot to ask for write access when I opened up the key… ARG!

      Now I’m off chasing some enumerator problem from a base class…

      • #3190203

        Ramblings: Things I hate about debugging

        by fritzler ·

        In reply to Ramblings: Things I hate about debugging

        A user calls  with a possible problem on report output.  I take a look at the code, and the rules of how the program is supposed to act is thoroughly UNdocumented.  So I track down the programmer who wrote that code and he doesn’t remember the rules. Okay. Half the time I don’t remember why I coded something the way I did from a week ago.  Anwyay, I go back to the user and ask them how they really expect the program to work…and they aren’t sure either!! So is there something to fix or not?  lol

    • #3182473

      Sometimes you just stick out…

      by rlbogue ·

      In reply to Not fit for print

      If you’ve been wondering what I’ve been up to, I’ve been in Alaska doing some work during the day and playing during the evenings.

      It’s been fun but it’s meant that some of my technical issues (like the one around enumeration class casting, are sitting on a back burner.)

    • #3169432

      Glaciers 101

      by rlbogue ·

      In reply to Not fit for print

      Since coming to Alaska I’ve learned a lot about Glaciers.  Yesterday’s excursion was the Phillips 26 Glacier Cruse.  It was very good, although I wish I would have seen some whales.

      Here’s what I did see!

      • #3183592

        Glaciers 101

        by beth blakely ·

        In reply to Glaciers 101

        Cool, Rob! Be sure to post a pic if you actually see a whale.

      • #3184940

        Glaciers 101

        by jaqui ·

        In reply to Glaciers 101

        come south old man, west coast vancouver island.
        there be whales!!
        north end vancouver island
        there be OZ!!!
        lower mainland ( Vancouver itself ) there be me.

    • #3184091

      A single Goliath or best of breed

      by rlbogue ·

      In reply to Not fit for print

      No single off-the-shelf system will exactly meet all of your organizational needs. The trick is finding the set of solutions that meet your organization’s needs and that work well with each system within that set of solutions.

       

    • #3184090

      Anatomy of a Software Development Role: Deployment

      by rlbogue ·

      In reply to Not fit for print

      The deployment role is one that is critically important to the initial impression of the software being delivered. A bad installation experience can sour just about anyone’s taste. Because of this the role of the deployment professional is increasing.

      http://www.developer.com/java/ent/article.php/3519186

    • #3188394

      Of Chickens and Eggs

      by rlbogue ·

      In reply to Not fit for print

      While working with a client yesterday we were discussing the idea of having email (or parts of your email) as a window in SharePoint.  They were discussing how the limited space made things difficult while simultaneously discussing how it was important to have a one stop experience for the portal.  Then the comment came up that one member of the group always started their day with email.

      A light bulb went off.  You can set an HTML (web) page as the default view for a folder in outlook.  Simply right click the folder, select properties, select the Home Page tab, enter your URL, Click the ‘Show home page by default for this folder’ checkbox and click OK.  Now whenever you click on the folder the web page appears.

      Now they can decide whether they want Outlook housing SharePoint or SharePoint housing email via Outlook Web Access.  While on that note.  Send me an email if you’ld like to beta some utilities that are like the ‘My Inbox’, ‘My Calendar’, and ‘My Tasks’ web parts in SPS.  I have written a set which don’t require the user name to be set in properties so they can be deployed on a shared view.  I’d like to get some testing done on them.

    • #3188062

      Hate and Submission — Anti-Virus Software

      by rlbogue ·

      In reply to Not fit for print

      I broke down today and bought Anti-Virus software for the primary computer that I use.  I’ve had anti-virus software on customer computers, my son’s computer, and my wife’s computer.  The reason I didn’t have it on the computer that I work on is because I think it’s an unnecessary evil.  If you’re suspicious and careful you should be able to avoid infection by a virus.  OK, so I hedged my bets and occaisionally ran Trend Micro’s House Call solution. Still, I didn’t feel like it was necessary software — and supporting an industry which has caused so many hours of problems with software that blocks things in unexpected ways has never been high on my list.

      However, I realize that in today’s environment, the only way for corporations to protect themselves is to ensure that the laptops connecting to their network have current anti-virus software and that the definitions are up to date.  The goal being, of course, to provide some measure of assurance that the computer isn’t infected.

      So, I’ve joined the masses in using Anti-Virus software.  Even if I don’t like the whole concept.

      -rlb

    • #3190583

      Submission — Anti-Virus Software

      by rlbogue ·

      In reply to Not fit for print

      I broke down today and bought Anti-Virus software for the primary computer that I use.? I’ve had anti-virus software on customer computers, my son’s computer, and my wife’s computer.? The reason I didn’t have it on the computer that I work on is because I think it’s an unnecessary evil.? If you’re suspicious and careful you should be able to avoid infection by a virus.? OK, so I hedged my bets and occaisionally ran Trend Micro’s House Call solution. Still, I didn’t feel like it was necessary software — and supporting an industry which has caused so many hours of problems with software that blocks things in unexpected ways has never been high on my list.

      However, I realize that in today’s environment, the only way for corporations to protect themselves is to ensure that the laptops connecting to their network have current anti-virus software and that the definitions are up to date.? The goal being, of course, to provide some measure of assurance that the computer isn’t infected.

      So, I’ve joined the masses in using Anti-Virus software.? Even if I don’t like the whole concept.

      -rlb

    • #3190541

      Every Parent’s Dream…

      by rlbogue ·

      In reply to Not fit for print

      I saw a sign that every parent has dreamed of…

      Maybe they weren’t talking about that kind of wake.

    • #3190011
    • #3190012

      Beta Opportunities

      by rlbogue ·

      In reply to Not fit for print

      I’ve got a series of web part packs and utilities of various sorts that I have on my radar to release in the next few months.  As I’m getting geared up for that, I’d like to see if anyone would be interested in doing some beta testing.  Here’s what’s on the plate short term…

      • SharePoint URL Management – If you let your users enter URLs on your SharePoint sites then you know that they can and do link EVERYWHERE.  The point of the URL management utility is to first, identify where users are linking to — in every URL field in every list in every site in a site collection.  The links are organized by server by URL and finally by where they are used from.  The second feature of the application is to do wholesale replacements of URLs and parts of URLs.  So you can change the server that a URL points to, the path of the page, or even everything about the URL including any querystring parameters provided.
      • Exchange Web Parts – SharePoint Portal Server offers some basic Exchange Outlook Web Access web parts. From my perspective they have two fundamental flaws.  First, they can’t be used in Windows SharePoint Services.  Second, they require that the user personalize the web part properties.  This web part pack won’t need the users to personalize the properties to be able to use it.  Thus it doesn’t require personalization at all.  The web parts figure out who the user is based on their login name.
      • Site Properties Pack – Site properties in SharePoint are very powerful.  They are a quick way to provide some “state“ information about the site which can be used to connect to other applications.  The site properties pack will contain a web part to visually display and modify site properties, a content editor web part which will take content and display it while doing property substitutions, and a list display web part that allows for display of a list with property substitutions in the URLs.  Together they are a toolkit to get you started with working with site properties for integration.

      There are more applications to come but these are the ones that I’m to the point of writing documentation for.

    • #3190013

      Quick Tip: Don’t forget Outlook’s ability to display a web page for a folder

      by rlbogue ·

      In reply to Not fit for print

      While working with a client recently we were discussing the issues with the Exchange web parts that are shipped as a part of SPS.  (This spawned the development on the new Exchange web parts, see my previous post.)

      However, we came to the conclusion that it might be too small to include some email items in SharePoint.  So I mentioned the idea of doing things the reverse way.  Use Outlook to host your SharePoint site.  It’s a feature that’s been around in Outlook for a while.  All you have to do is…

      1. Create a folder in Outlook.
      2. Right click, select properties.
      3. Click the home page tab.
      4. Enter the address of your SharePoint site in the address text box.
      5. Select the show home page by default for this folder checkbox
      6. Click the OK button.

      Now when you navigate to this folder in Outlook you’ll see your SharePoint site.  Not a bad deal when you’re looking to have a single dashboard to the organization and you live in email — as many of us do.

    • #3186229

      Getting the original display name for an internal name

      by rlbogue ·

      In reply to Not fit for print

      Bil Simser posted on a problem with CAML where he mentioned reverse engineering the internal field name to the original display name that created it.  I had to do just this thing for one of migration utilities.  Here’s the code (C#):

        // Fixup an internal name back to the regular way that it should be so that we can get the same
        // internal name back when we create a title.
        private static string FixInternalName(string internalName)
        {
         // Get the most common one out of the way as quickly as possible
         string f1 = internalName.Replace(“_x0020_”, ” “); 
         int pos;
         // while we have more processing to do
         while ((pos = f1.IndexOf(“_”)) >= 0)
         {
          int chrVal;
          if (pos + 6 > f1.Length)
          {
           chrVal = PartialEncoding(f1,pos);
          }
          else
          {
           chrVal = int.Parse(f1.Substring(pos+2, 4), System.Globalization.NumberStyles.HexNumber);
          }

           if (f1.Length > pos + 7)
          {
           // char isn’t at the end of the string
           f1 = f1.Substring(0, pos) + Convert.ToChar(chrVal) + f1.Substring(pos+7);
          }
          else
          {
           f1 = f1.Substring(0, pos) + Convert.ToChar(chrVal);
          }
         }
         return (f1);
        }

        private static char PartialEncoding(string fix, int pos)
        {
         pos += “_x”.Length;
         if (fix.Length > pos)
         {
          string nw = String.Empty;
          while(pos < fix.Length)
          {
           nw = nw + fix[pos];
           pos++;
          }
          while(nw.Length < 4)
          {
           nw = nw + ‘0’;
          }
          return (Convert.ToChar(int.Parse(nw, System.Globalization.NumberStyles.HexNumber)));
         }
         else
         {
          // Not even enough to start — return a space it will get encoded
          return ‘ ‘;
         }
        }

    • #3193541

      Four Things you’re missing in your backup strategy

      by rlbogue ·

      In reply to Not fit for print

      As an organization begins to assimilate more and more servers, a reliable backup strategy becomes more challenging. Instead of one tape drive that backs up the entire network, libraries become necessary. Instead of doing one backup job and schedule, you need several. Here are four fundamentals for developing your backup strategy.

      http://techrepublic.com.com/5100-9592-5797990.html

       

    • #3194708
    • #3182397

      Custom Configuration Sections in a .NET config file

      by rlbogue ·

      In reply to Not fit for print

      I’ve been working on a basic rules based web service for InfoPath forms.  The basic idea is to allow us to do “poor man’s integration.” to some back end systems now and then swap that out later without modifying the forms — since the forms will be adapted by several people and there may be more forms than we want to go back through. So a single web service that all InfoPath forms call on submission — by the way one they call in addition to whatever else they want to do — for instance, post themselves to a SharePoint site.

      Anyway, so I needed a rules section in the config file where each rule had some attributes.  The problem is that .NET isn’t setup to easily hand you back the XML from a section in the configuration file — actually it gets pretty upset about the section even being in the file.  The solution is a IConfigurationSectionHandler.  Here’s what it takes to implement…

      1) Modify the web.config file.

      a) Add a <configSections> tag.  Note this must be the first tag in the <configuration> node.  This looks something like…

      <configSections>
        <sectionGroup name=”customConfig”>
          <section name=”rules” type=”InfoPathRouting.Classes.XMLConfigurationSectionHandler, infopathrouting” />
        </sectionGroup>
      </configSections>

      In this case, I’m creating a new section called customConfig and adding a section in it called rules, which my class (InfoPathRouting.Classes.XMLConfigurationSectionHandler) in my DLL will handle.  (InfoPathRouting is the ASP.NET project name)

      b) Add the actual section in the file.  In this case I’d add something like:

      <customConfig>
      <rules>
        <!– Whatever I want in here —>
      </rules>

      2) Add the class to the project.  Here’s the XMLConfigurationSectionHandler that I wrote.  The only restriction is that it must support the IConfigurationSectionHandler interface.  That interface only defines one method, Create().

      using

      System;
      using System.Configuration;
      using System.Xml;
      namespace InfoPathRouting.Classes
      {
        public class XMLConfigurationSectionHandler : IConfigurationSectionHandler
        {
          public object Create(object parent, object configContext, XmlNode section)
          {
            return (section);
          }
        }
      }

      In this case I wanted the XMLNode back so I could do my own thing with the XML fragment, so that’s what I returned.

      3) Reference the configuration section in your code.  The following line of code fetches the XMLNode for my new rules section:

      XmlNode rules = (XmlNode) System.Configuration.ConfigurationSettings.GetConfig(“customConfig/rules”);

       

      That’s it.  I now have a repeatable way to store any kind of XML configuration I want in my app.config and web.config files.

       

    • #3053303
    • #3051503

      How Not to test for a null string in .NET

      by rlbogue ·

      In reply to Not fit for print

      Today I was forced to read some code for a developer that I loathe.  Just when I believe I’ve seen every stupid thing you can do with code I am surprised by a new structure that he repeats everywhere through his code.  Here’s what I saw today…

      string myString = (GetStringFromConfiguration(”keyvalue”) + “”).ToLower();

      At first I did a double take, it doesn’t make sense to add an empty string to a string … that is unless you’re trying to prevent the null reference exception from ToLower().  Adding null to any string results in that string.  Thus, you *CAN* work around null references by using this technique.  However, here is why you shouldn’t.

      When you do this you actually force the CLR to create an extra, unnecessary new string object.  It creates a temporary string object which it concatenates the result of the function and the empty string into.  Another string is created when the string is taken ToLower().  That one can’t be helped, but the intervening one — the one caused by the concatenation, can be eliminated.

      OK, sure, it’s a detail and it probably won’t matter much to most people but it will perform slower, require more memory, etc. The biggest thing for me is that it’s really odd from a readability/understandability perspective.  (Did I mention that there are no comments in this code?)

      Ideally, I’d create a GetStringFromConfiguration function overload that took a second parameter of what I wanted back if the entry wasn’t in the configuration file.  That way the code doesn’t concern itself with the details, it knows that it will always get back a valid string.  This is in fact what I do when I have to be concerned about getting back a null when I need it to be functionally equivelent of a default or an empty string.

      As a sidebar, it would have been nice to see a String.Empty instead of ““ … oh well, you can’t win them all.

       

       

    • #3052112

      A few other dumb things that you can do with .NET — but shouldn’t.

      by rlbogue ·

      In reply to Not fit for print

      In my previous post I highlighted a single bad idea that I had seen in some code.  I want to offer up a few other things that I saw and why you shouldn’t do them…

      • Tightly nested Try/Catch blocks — basically, put a try block, do one statement, add a try block in that block and repeat…  See the code…

                  static public void LogRequestResult(string url, string status)

                  {

                        try

                        {

                              FileStream objFileStream = null;

                              StreamWriter objStreamWriter = null;

       

                              try

                              {

                                    objFileStream = File.Open(cnstMyFilePath, FileMode.Append, FileAccess.Write, FileShare.Read);

                                    try

                                    {

                                          objStreamWriter = new StreamWriter(objFileStream);

                                          lock(objStreamWriter)

                                          {

                                                objStreamWriter.Write(Status + url);

                                          }

                                    }

                                    finally

                                    {

                                          if (objStreamWriter != null) objStreamWriter.Close();

                                    }

                              }

                              finally

                              {

                                    if (objFileStream != null) objFileStream.Close();

                              }

                        }

                        catch

                        {

                        }

                  }


      Ignoring the fact that we’re not actually doing any error checking… Isn’t the following much more straightforward easier to read, and less prone to errors?  The moral to the story, try/catch blocks are cool but don’t abuse them.

       


                  static public void LogRequestResult(string url, string status)

                  {

                        FileStream objFileStream = null;

                        StreamWriter objStreamWriter = null;

                        try

                        {

                              objFileStream = File.Open(cnstMyFilePath, FileMode.Append, FileAccess.Write, FileShare.Read);

                              objStreamWriter = new StreamWriter(objFileStream);

                              lock(objStreamWriter)

                              {

                                    objStreamWriter.Write(Status + url);

                              }

                        }

                        finally

                        {

                              if (objStreamWriter != null) objFileStream.Close();

                              if (objFileStream != null) objFileStream.Close();

                        }

                  }


      • Magic Numbers (or in this case letters), just stop — I can’t tell you how many times I’m looking through code and I come across an if statement that looks like “if myvariable == “A““  Why in the world would your variable is “A“.  What does “A“ mean?  In .NET we have enumerations and constants.  Why can’t we just them?  I have no idea what “A“ means — and neither will the author 2 months from now.  If you put quotes around the same text twice it should be a constant.  If you use a number for an if statement or as part of an assignment that isn’t a 0 or a 1, you should have a constant.  (Zero is a number to compare against, 1 is a number to fix a number of offset issues.)
      • Comments — Hey, there’s a concept.  And I don’t mean one that says, // the following line adds one to the number.  Thanks.  I can read code.  How about writing comments that tell me why you’re adding one to the number?  Oh, yea, those XML comment things that .NET supports.  Those are useful.  You can use them too, they’re not expensive.

      Do you have any pet peves about code that should go on this list?

       

    • #3052426

      How to use SharePoint as a Mail Merge Source

      by rlbogue ·

      In reply to Not fit for print

      I was looking for how to perform a mail merge using a SharePoint list as a source and found Wayne’s post asking the same question.  There wasn’t help there, however, amongst the comment was on from Yatin Purohit indicating that you could link to the SharePoint list as a table in Access and then use the Access table as a source for Word to use in a mail merge.  It’s a pretty useful technique — too bad there’s not an OLEDB driver for SharePoint lists. I suppose this will work for now.

    • #3051001

      Link Tracking Beta

      by rlbogue ·

      In reply to Not fit for print

      I finished a new web part kit over the weekend.  It is called Link Tracking, and allows you to see how frequently that users are actually using the links that are in the portal.  Most customers I’ve talked to are completely unaware of when the users are using the links on the portal, as a result it’s hard to fine-tune the number and type of links on the site.

      Link tracking fixes this by recording each link as it’s clicked so you can go back and review the number of people who have used the link.

      I’m looking for three beta participants with the commercial release being later this month.  If selected for the beta, I’ll give you a license to the final code when it comes out.

      Rob

    • #3052807
    • #3048292
    • #3049291

      Find a Person

      by rlbogue ·

      In reply to Not fit for print

      I was speaking with Todd Bleeker who is still very excited about the possibilities of the Content Editor web part. Then I went to a client who was having a typical problem — making it easy to find people in their organization.

      The net result was that I created a web part that leverages the Content Editor web part to use the REST format of the search page to find people. I’ve made the dwp available here for those who might be able to use it.  I’m starting to see why Todd likes this approach.  It’s good for some simple things that you want to get done without a lot of coding.

    • #3049220

      Display a Random Item from a SharePoint List: Beta Testing

      by rlbogue ·

      In reply to Not fit for print

      One of the annoying things for me has been trying to get a web part that would show a random item from a list.  I’ve wanted to feature projects, employees, questions/answer sets, etc. on the home page to keep it new without having to finely control what data was exposed on the home page.

      I’ve completed the coding for a Random Item web part which takes a random item from a list and displays it using the formatting that the user/developer provides.  It has the ability to support previous and next buttons as well as the ability to cache the results for a period of time so that the entire page isn’t in a constant state of flux.

      I’ve still got to finish the documentation and create a few example DWPs, but I’m looking for folks who are interested in beta testing the web part and letting me know what additional features it needs.

    • #3047418

      Why does SharePoint creates a new version of a document in a document library when you edit properties?

      by rlbogue ·

      In reply to Not fit for print

      I’m working on an article for IntranetJournal about the way that SharePoint actually uses meta data (fields) in a document library and as I was crawling through the details it occurred to me one of the reasons why SharePoint has to create a new version when you update the properties of the file.  Many people have wondered why this causes a new version to be created — including myself.  However, I believe that I’ve stumbled across the answer — Because it *IS* a new version in some cases.

      In the case of Office documents, the document itself gets updated to reflect the new properties.  You can see for yourself by checking File-Properties-File Properties on the file.

      It’s also storing the previous properties off if you needed to restore them, even if there is no way to see them.  (It’s not just recreating them from the properties in the document because it has the behavior of restoring the properties even for non-Office documents.)

       

    • #3047938
    • #3047806

      SharePoint Office Integration

      by rlbogue ·

      In reply to Not fit for print

      This is an old link, but one I seem to need from time-to-time.  It’s the MS document that explains (compares) what various versions of office can do with SharePoint.

    • #3067007

      REST for Search.aspx

      by rlbogue ·

      In reply to Not fit for print

      SharePoint’s support for REST (query string parameters) on the search.aspx (Portal Server Search/Search Results Page) is very powerful.  However, once you get past the basics of passing it a search string (k … short for keywords) the documentation gets a bit fuzzy.  Here’s one thing that I was able to do with search.aspx…

      First, a few parameters…

      Parameter Description
      k Keywords – General Search
      tp Type of document (I’ve found Person and Document very handy.)
      s Scope — Think Search Scopes from the search drop-down list
      pt Property — Any of the custom properties that SharePoint indexes. IFilters put these in.
      d Date — apparently required when you’re searching for properties

      So the next bit is how to encode the properties. Here are a few ASCII/Hex Codes you may need

      Code Punctuation
      %3a : (Colon)
      %2e . (Period)
      %23 # (Hash, Pound, etc.)
      %2c , (Comma)<.TD>

      So if you want to search for the word ‘spacey’ in any text in a document in a search scope nammed fuzzy you would have a URL like: http://server/search.aspx?tp=Document&s=fuzzy&k=spacey

      It gets a tad bit more complicated when you want to search only in a property not in the full text. First, you have to find the property you want in Manage Properties, and then you have to setup the search … When you add the property to the search you have to add a single character specifier indicating the type of the property before you start it’s name — mostly you’re dealing with Strings so ‘S’ is appropriate. Then you have to put commas after the property name the keyword Contains and another comma — all encoded of course. Next, once I search for a property I have to add a date specifier to the query. The title property is really urn:schemas.microsoft.com:fulltextquery.displaytitle. So if I wanted to find the same thing in only the title property I’d do this: http://server/search.aspx?tp=Document&s=fuzzy&pt=Surn%3aschemas%2emicrosoft%2ecom%3afulltextqueryinfo%3adisplaytitle%2cContains%2cSpacey&2cAnd%2c&d=All

      Clear as mud right? It’s not that bad, basically describing the property and url encoding all of the special characters makes it look ugly. If it weren’t encoded it would look like this..http://server/scope.aspx?tp=Document&s=fuzzy&pt=Surn:schemas.microsoft.com:fulltextqueryinfo:displaytitle,Contains,Spacey,And,&d=All still not pretty but certainly much more readable.

      I hope this helps when you want to be able to create links to property searches.

    • #3068257

      No Searching SharePoint Portal Pages — by default

      by rlbogue ·

      In reply to Not fit for print

      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.

       

    • #3068475

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

      by rlbogue ·

      In reply to Not fit for print

      As some of you know, I write a weekly newsletter for Tech RepublicStrategies 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)

       

    • #3067758
    • #3067982

      SharePoint: Cannot complete this action. Please try again.

      by rlbogue ·

      In reply to Not fit for print

      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

    • #3056270

      Anatomy of a Software Development Role: Development Manager

      by rlbogue ·

      In reply to Not fit for print

      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.]

    • #3055896

      Requirement: Collaboration

      by rlbogue ·

      In reply to Not fit for print

      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.)

    • #3046889

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3046890
    • #3046891
    • #3046888

      Debugging in the GAC

      by rlbogue ·

      In reply to Not fit for print

      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.

    • #3046753

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3047318

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3047230

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055461

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055410

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055301

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055652

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055581

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055183

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3055184
    • #3055059

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054951

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054911

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054250

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054251
    • #3054198

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054152

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054122

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054107

      SharePoint: An update on IRuntimeFilter

      by rlbogue ·

      In reply to Not fit for print

      A few weeks ago I posted on the IRuntimeFilter interface in SharePoint. Here are a few updates…

      1) I’ve validated that IRuntimeFilter’s CheckRuntimeRender() method is only called when the IsIncludedFilter property of a web part is non-null.

      2) By default, Windows SharePoint Services will put administrators and web designers into a shared page view rather than in a my page view.  The net effect is that the shared page isn’t a personalized view and therefore IRuntimeFilter’s CheckRuntimeRender() method isn’t called.  To fix this create a new site definition and add the following tag into the <HEAD> tag.  <META name=”WebPartPageDefaultViewPersonal”>  Then make sure you do an IISReset so it can take effect.  (You’ll have to create a new site to see this.)

      3) ValidateRuntimeFilter() is called everytime the web part is serialized — which is often.  So keep the code that you write in this method very simple.

      4) If you decide to do post backs in the chooser form that you create, you’ll need to add a tag to the <HEAD> tag.  That tag is <base target=”_self”>  If you don’t do this then the form will cause a new window to open.

      My next step is to fix some impersonation issues with roles (the ones that Michael Donovan mentioned to in his post.  From there, I’ll be writing a IRuntimeFilter chain to allow the Portal audiences IRuntimeFilter to run side-by-site with our own IRuntimeFilter.

    • #3054087

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3054038

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3053991

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065219

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065146

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065063

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064829

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064754

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064642

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064432

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064347

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064260

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3064057

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063952

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063878

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063744

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063727

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063655

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063613

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3063574

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065685

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065663

      The SharePoint IRunTimeFilter is a good idea but the implementation?

      by rlbogue ·

      In reply to Not fit for print

      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?

    • #3065633

      XML Namespaces and Bad Exception Propigation

      by rlbogue ·

      In reply to Not fit for print

      Two quick things …

      1) If you’re trying to use XPath on XML you get back from SharePoint… don’t forget you’re going to need the XmlNamespaceManager object to use with SelectSingleNode or SelectNodes to get back what you’re looking for.  I repeatedly forget that SharePoint uses XML Namespaces extensively… and that using SelectSingleNode and SelectNodes does require namespaces in the XPath.  (Today was lesson #3.)

      2) Bad error handling.  You may find it interesting to note that the WebPartPages web services’ GetWebPartProperties method doesn’t seem to throw soap exceptions.  I ran into my favorite “Cannot complete…” error again.  However, it didn’t show up immediately because rather than throwing a soap exception this particular method returns the error as a comment node — rather than throwing an error.  So you’ll have to look for comments one level down from the root.  (Sidebar: It doesn’t look like this web service even works against SharePoint Portal Server areas.  At least – I keep getting an error about XML namespaces — back as a comment.)

       

    • #3065634

      No PDC for me

      by rlbogue ·

      In reply to Not fit for print

      For those of you who have been asking … I’m not going to the PDC.  I had a decision to make — admittedly a tough one.  The MVP Summit is at the end of the month.  I don’t have enough slack in my schedule to do two events in one month.  So, as much as I wanted to hear about SharePoint V3 as soon as possible … I had to decide to go to the Redmond campus at the end of the month.  It gives me a lot more opportunities to talk with the program managers — in a slightly more intimate setting.

      So, keep the blog entries about the PDC coming, I’ll be reading them intently.

    • #3065515

      Folder Taxonomy, Path Limitations, and Meta Data

      by rlbogue ·

      In reply to Not fit for print

      I was searching out some things and ran across an old blog entry from Bil Simser talking about the limitations of using folders because of path length limitations.  Here are a few observations from a recent client experience.

      1) The path limitation is indeed 255 (or 256 characters).  It’s documented in some of the planning documents (and in a KB article as well if memory serves.)

      2) The idea of using meta data to categorize information instead of folders has at least two limitations …

      a) WebDAV doesn’t natively support the assignment of meta-data during a save operation.  Therefore saving with applications which are not fully SharePoint aware is a bad experience.  The documents end up in the “root” of the view since they have no data to categorize them.

      b) Retreiving files without context from a SharePoint document library can be very difficult without the property information.  Since the WebDAV File-Open dialog doesn’t understand the meta data it can be frustrating to find the right document to email to someone when the file name doesn’t contain all of the useful information.  One solution around this particular problem is to use the free Outlook Power Tool for SharePoint from Winapp Technology.  Of course, that doesn’t solve the problem when you’re trying to use a file from another application.

      In general… Use meta data if you need the ability to reorganize the data in multiple hierarchies.  Use folders to make it easy to use within non-SharePoint enabled applications.

      As a sidebar, the experience on SharePoint with WebDAV is much better in Windows XP vs. Windows 2000.  Every application I’ve tested has been able to save to SharePoint via WebDAV in Windows XP.  The same applications have trouble with Windows 2000’s support for WebDAV.  XP also allows files to be dragged from one WebDAV folder to another where Windows 2000 does not.

    • #3065516

      Preventing users from using the UI to manage web parts

      by rlbogue ·

      In reply to Not fit for print

      There has been a fair amount of talk lately about how any web part page in SharePoint — including many pages like list pages that people don’t think are web part pages — can have the web parts manipulated by simply adding parameters to the query string.  Those parameters cause the ToolPartPane to appear even if there was no administrative control on the page to cause it to appear.

      This is true of the existing pages, but you can create your own site definition that doesn’t allow users to use the user interface to modify the web part placement or even add new items to the web part zone.  The WebPartZone class (and consequently the WebPartZone tag) support three interesting attributes/properties…

      • AllowCustomization – Indicates whether customization is allowed or not.
      • AllowPersonalization – Indicates whether personalization is allowed or not
      • LockLayout – Indicates whether the layout of the zone is fixed — and can not be edited.

      Quick testing shows that AllowCustomization must be set to true and LockLayout must be set to false for SharePoint to even show the web part zone in design mode.  Further investigation has shown that using the web services calls to modify web parts in the web part zone still seems to work — and editing the page in front page including web part placement still seems to work as well.  In other words, it’s possible to prevent users from modifying web parts in special zones, like navigation, while retaining the ability to control web parts in these special zones via code.

       

    • #3065395
    • #3059102

      Useless SharePoint Error Messages

      by rlbogue ·

      In reply to Not fit for print

      I have been promising for a while to get some of my favorite error messages up … here are a few.  I couldn’t find my all time favorite — Catestrophic error.

    • #3054392
    • #3054393

      Doing the impossible: Maurice Prather clarifies AppDomain Usage

      by rlbogue ·

      In reply to Not fit for print

      Maurice Prather’s original post on AppDomains to get around some issues with impersonation and the object model was great.  It was an approach that works to allow most applications to do what they need within the SharePoint world — even if SharePoint doesn’t allow the user to directly perform the action.  His update fills in some small holes in the original article — including one or two that I must admit I fell into. Maurice was kind enough to help track down the issue (the second call to impersonate that I wasn’t doing but he was)  and get things straightened out.  My problem was the one exposed by Mike Donovan on IRuntimefilter getting roles for a user.He worked around it with a web service call, but that’s not an option in my environment since performance will definitely be an issue.

      I can also say that a SharePoint architect that I placed with another client has used the AppDomain technique to get by a wide variety of issues.  So in short, if you need to do impersonation, this is the way to do it…

       

       

       

    • #3061210
    • #3069791

      SharePoint and XPath

      by rlbogue ·

      In reply to Not fit for print

      I blogged earlier about using the XmlNamespaceManager to get back nodes from SharePoint XML fragments.  I found a better way (with the help of some BizTalk MVPs that I got to hang out with recently).  Instead of doing /wp:Fields/wp:Field or whatever nonsense that you need to do to get the XmlNamespaceManager to work use the local-name() function so … /*[local-name() = ‘Fields’]/*[local-name()=’Field’]

      I’m sure someone will tell me why that isn’t very performant … but I don’t care it works, it’s clear to read, and I don’t have to go through hoops to get the XmlNamespaceManager hooked up.

       

    • #3069792

      Is Everything in SharePoint a CAB file?

      by rlbogue ·

      In reply to Not fit for print

      I’ve known for quite a while that SMIGRATE backups (FPB)s were simply renamed CAB files.  Today I had a collegue show me that STP files are just renamed cab files too.  When you create a template — either for a list or a site the resulting STP file is just a renamed cab file with a manifest.xml file.  I’m not sure what I’m going to do with this new found knowlege but it is definitely cool.  (It might make it possible to apply a template to a different site definition for instance.)

       

    • #3069790

      Out of the darkness

      by rlbogue ·

      In reply to Not fit for print

      If anyone has noticed that the blog activity has decreased, they’re right… It’s not because I’m abandoning the concept, It’s really just a concurrance of a few things …

      1) I stopped doing the TechRepublic Stategies that Scale newsletter.  That was four postings a month (one a week.)  I really enjoyed writing the content for the newsletter but it wasn’t aligned to the things I was doing on a day-to-day basis so I had to let it go.

      2) I’m transitioning between series at Developer.com.  Whenever I transition between series it disrupts the writing schedule.  We should be back on track this month but it means that I didn’t have the two posts per month I normally have announcing those articles.

      3) I’ve been busy trying to figure out the eCommerce portion of the software development factory that I’m doing.  You’ve seen some announcements for betas…  I’ve got one issue to take care of in one of the products but otherwise the feedback has been good.  The net effect of which is I need to figure out how to start selling them.  I’ve taken a few wrong turns (http://www.windowsmarketplacelabs.com) and the delay has caused me to decide that I want to build the new site on ASP.NET 2.0 which has turned out to be a giant gravity well which my time is falling into.

      4) .NET 2.0 is really cool.  I’ve been playing with generics and how they can take typical problems and make them easier.  The obvious answer is collections.  However, I’m also very interested in taking the factory pattern and making it strongly typed and generic…  Unfortunately, I’ve decided that I’m starting from scratch so that means new database access code, new configuration management code, new collections code, and the new factory code … That’s meaning that it’s consuming a lot of time.

      5) I can’t stop developing products.  It’s sort of like an addiction.  I see more needs than I can fill … I wrote a tool to manage web parts on any web part page in SharePoint (here’s a hint, almost everything is a web part page — including list pages).  It will allow you to add, delete, extract, and enumerate web parts.  (It’s done if anyone wants to play with it.)  I’m finishing a Url Administrator that allows you to change SharePoint List Fields which are of type URL.  The idea is that users sometimes use URLs in the portal that you wish they hadn’t — or you need to change.  This tool will go through the entire portal and organize all of the links for you.  It’s about 50% done.  I also have a tool which will go through and trim the versions in document libraries — more than a few clients have accidentally turned on versions in their document libraries and now aren’t sure how to get the versions trimmed.  That’s about 40% done…

      6) I’ve been sleeping.  I try not to but occaisionally I’ve just got to.  My favorite catch phrase is “Sleep is optional.”  I’m being reeducated that it isn’t.

      By the way, I’m looking for a mentee, protégé, coachee, who would be willing to work for a little bit of money and some good experience.  I need some help clearing some of my development tasks since I just can’t seem to get them all done.  If you’re interested drop me a line.

    • #3068857

      Link: SharePoint as a time tracking tool.

      by rlbogue ·

      In reply to Not fit for print

      If you read this blog at all you know that I rarely link to other content directly, however, I thought this was an interesting idea…

      http://www.devx.com/OfficeProDev/Article/29471

      Easy Time & Billing with SharePoint, Outlook, & Excel (and VSTO too!)
      These popular office system applications reduce the pain of recording and reporting your time, with very little code required.

      by Ty Anderson

    • #3053313

      Version Trimming

      by rlbogue ·

      In reply to Not fit for print

      SharePoint’s ability to keep multiple versions of a document is a great benefit — but it can also gobble up space like Cookie Monster can eat cookies.  Several clients have had issues, particularly when trying to get a migration right, where there are too many versions of a document in their database chewing up space.

      Other SharePoint users face the long term maintenance nightmare of trying to control the maximum number of versions of a document when they no longer have control of their users.

      Because of this, I’ve developed a command line tool (which can be easily scheduled) which will go in and “version trim” a document library. You tell it the maximum number of versions that you want to allow for a document in a SharePoint site and it will go delete all of the versions in excess of the number you specify.

      The tool is web service based which means it can be run from any machine — it doesn’t have to be run from the server.

      I’m finishing up some Alpha level testing this week but will be looking for beta testers early next week.  Anyone interested?

    • #3072440
    • #3071056

      Picking up the SharePoint Services Navigation Controls

      by rlbogue ·

      In reply to Not fit for print

      When you get into modifying site definitions you’ll run into a few interesting challenges.  Not the least of which are all of the different versions of a page that you’ll have to update in order to make the whole site to fit together.  One of the interesting aspects is the list pages.  Each list has it’s own set of pages.

      On those list pages are some web controls that control view navigation and another one that controls the related links — both of them are on the left side of the page.  If you want to get to one master page without modifications these web controls present a problem.  (In other words, I want to manage one aspx page and be able to copy that into each of the files in each of the lists.)  Those pesky web controls make that not possible.

      However, there is a solution.  You can encapsulate the ViewNavigation and RelatedLinks classes in the Microsoft.SharePoint assembly into web parts and use them as web parts.  In that way, you can change the left column to a site navigation web part zone and then insert web parts for ViewNavigation and RelatedLinks on the pages that happen to be list pages.  Then you can insert your own navigation above or below these standard web controls — and you can swap them out later without having to deal with the “thou shall not modify a site definition after it has been created rule.”  (I may have paraphrased that a bit.)

      In general it looks like the WebControls in the Microsoft.SharePoint.WebControls namespace will encapsulate well into web parts so you can reuse the built in web controls — even if you want to move to a web part basic design.

      As a sidebar, the Microsoft.SharePoint.Portal.WebControls seem to all derive from WebPart so you won’t even have to encapsulate them.  All that’s necessary there is to create a DWP file.

      The common administrative pages are still a challenge — but it’s getting easier bit by bit to create a cohesive site definition.

      By the way, here’s the entire file I used to encapsulate the RelatedTasks web control…

      using System;
      using System.ComponentModel;
      using System.Web.UI;
      using System.Web.UI.WebControls;
      using System.Xml.Serialization;
      using Microsoft.SharePoint;
      using Microsoft.SharePoint.WebControls;
      using Microsoft.SharePoint.Utilities;
      using Microsoft.SharePoint.WebPartPages;

      namespace SPBuiltInControls
      {
       /// <summary>
       /// Shell for Related Tasks web Control
       /// </summary>
       [ToolboxData(“<{0}:RelatedTasks runat=server></{0}:RelatedTasks>”),
        XmlRoot(Namespace=”SPBuiltInControls”)]
       public class RelatedTasks : Microsoft.SharePoint.WebPartPages.WebPart
       {
        protected override void CreateChildControls()
        {
         base.CreateChildControls ();
         Microsoft.SharePoint.WebControls.RelatedTasks related = new Microsoft.SharePoint.WebControls.RelatedTasks();
         Controls.Add(related);
        }
       }
      }

      … I got lazy and didn’t even bother removing the extra using statements…

    • #3043577

      Article: A Sensible Framework for SharePoint Intranet Navigation

      by rlbogue ·

      In reply to Not fit for print

      It’s never the first thing that I get asked on an engagement. It’s never the burning question in the minds of my customer as they seek out a consultant to help them with SharePoint. However, sooner or later it eventually comes to the topic of navigation. Although the fundamental concepts behind a sensible navigation framework are simple, they are not well understood by developers or designers. This article is designed for both audiences as they seek to make SharePoint usable.

      http://www.intranetjournal.com/articles/200510/ij_10_24_05a.html

    • #3043576

      Unghosting — themes are not your friend

      by rlbogue ·

      In reply to Not fit for print

      One of the things that I was reminded of today was that anytime you apply a theme to a SharePoint site the site gets unghosted.  I can’t wait until this isn’t an issue…

    • #3045670

      Article: Concrete Code for a Quick Configuration

      by rlbogue ·

      In reply to Not fit for print

      In my last article, ” Caught Up in Code, or Quick Configuration”, I proposed that you build more configuration based software solutions and less software that is governed by the relatively rigid rules of code alone. That article focused on the concept of configuration-based development. In this article the focus is on using the patterns for implementing a configuration-based solution.

      http://www.developer.com/tech/article.php/3558711

    • #3114396

      Code Snipit Management Tools — Why?

      by rlbogue ·

      In reply to Not fit for print

      Perhaps it’s because it’s late while I’m writing this … perhaps I’ve missed some big revolution in software development but I don’t understand…

      Why do we need code snipit tools?  Shouldn’t we have classes and methods (even if they’re static) rather than fancy tools to do the same copy-paste routine we’ve been telling developers not to do for 30 years?

      Why can’t we all make an effort to put our code in reusable “chunks”?

    • #3114397

      A few quick how-to documents

      by rlbogue ·

      In reply to Not fit for print

      I needed to do some simple how-to documents for some developers I’m working with so I thought I would share with everyone these step-by-step guides for doing some SharePoint (and .NET) fundamentals

      I hope they’re helpful.

    • #3114132

      CorasWorks: Growing with the deployment

      by rlbogue ·

      In reply to Not fit for print

      I typically don’t make a big deal out of the software I use on a daily basis because I figure that people have their own unique needs and we all get bludgeoned nearly to death by constant bombardment with new tools, techniques, and processes that are going to save the world.

       

      However, I’ve been spending a fair amount of time with CorasWorks lately and there were a few observations I wanted to make about the product suite that I don’t think is being well portrayed in the market.  To be clear, I’ve already shared the essence of this post with them in a candid conversation at CorasWorks University last week.

       

      What I’ve found with SharePoint is that it’s really about getting together a set of very flexible and very fundamental tools and building creative things with them.  So much has been made of the content editor web part – and what it does is so simple … it emits HTML code.  How sophisticated do you have to be to write a web part that emits the HTML that is provided to it.

       

      Some of my clients view CorasWorks in a similar way … how hard is it to roll up a few lists?  Frankly, not that hard.  However, that’s focusing on the tactical problem without taking a step back.  Rolling up a few lists is trivially simple.  Creating a framework for managing that rolled up data, providing a complete set of views, providing support, etc. is where it gets hard.

       

      The navigational components that are provided with CorasWork’s suite are fundamental and perhaps even some what trivial – however, they are – for the most part – a good set of tools that do provide great flexibility and most of the fundamentals that you need.

       

      In fact, the biggest complaint I have about the navigational components is that the current released version doesn’t support relative paths.  This is eating me alive at my current client as we try desperately not to bind in any environment specific configuration into out site definitions and other files.  Although it’s an up-hill challenge, I’m hoping that they will add relative path support to their Special Site Navigation component.  (I’d love to hear your comments if you’re struggling with the same issue.)

       

      Their other navigation tools, Workplace View Advanced, and the SPS cousin are more sophisticated but are limited to the two dimensional movement through a site or area hierarchy.  It’s useful for site-to-site navigation but doesn’t help when you need to link applications within a portal together.

       

      I mentioned that they are fundamental building blocks.  What I have been most impressed about as I’m installing CorasWorks into my third large scale implementation is it’s ability to grow with the environment.  Through the use of some undocumented properties (that I’ll likely blog about soon) it’s possible to gain very fine-level control of how things appear.  This means that tools that may originally fill a specific niche around roll ups may grow up into a set of tools that continue to drive the core of the portal for years to come.

       

      So if you’re researching CorasWorks and wonder if it will get a few users or many users – think along the side of many users.  When you learn all of the advanced tricks it’s really amazing what you can do with the tool – including very customized menus and spectacular roll ups.  I’ll start posting on how to do a few of these things in the coming weeks.  For now, just know that there are plenty of undocumented or under-documented features just waiting to be unleashed.  Know that these features aren’t being discussed much in the market — they’re seen as an entry level tool which is useful to get started, however, the amount of “runway” that you have with CorasWorks is pretty substantial.

    • #3116127

      SharePoint Web Part Administrator (SPWPADM)

      by rlbogue ·

      In reply to Not fit for print

      STSADM in addition to being a swiss army knife of useful little functions is also one of the most frequently used tools in SharePoint deployments.  Being the gatekeeper to easy web part deployment has it’s advantages.  However, there are limitations that it has and features that it hasn’t implemented.  That’s where one of my latest projects comes in.

      First, STSADM is very dependent upon access to the SharePoint content database.  If you don’t have enough access the tool doesn’t work.  This can be worked around, however, in many environments it represents a barrier to easily using STSADM.

      Second, although STSADM allows you to add and remove web parts as trusted assemblies on the server — and deploy default property sets (read as “DWP files“) it does not allow you to add or remove web parts from a web part page from the command line.

      However, I’ve been working on a tool the “SharePoint Web Part Administrator” (SPWPADM) that solves both of these two limitations.  First, it is entirely based on the web service interface to SharePoint.  You can run it from your desk, from the server, or anywhere that you can access the SharePoint built-in web services.  Second, it’s exclusive function is to manage web parts on web part pages.

      It allows you to enumerate the web parts on a page, add new web parts to a page, delete web parts from a page, export web parts from a page, and even to delete closed web parts on a page.  Of all of those, perhaps only the last function needs any explanation…

      When people “delete” a web part from SharePoint they’re often times just closing it — suppressing the display.  The code is actually still running it’s just that people don’t see the results on the page.  That’s really not all that great if you’re doing extensive computations to come up with content that will never be displayed.  However, the only way to delete a web part is to enter design mode to delete it.  The result is most people close web parts without realizing the impact on their server.

      The SPWPADM tool will hunt down these closed web parts and actually delete them for you so they’re no longer running.

      So, there are two questions you might ask… 1) “Why did you write the tool?” — The primary reason is because I’m working on an article for DevX.com on how to replace the edit control (ListFormWebPart) for a list.  To do that you have to add a new web part to the list pages and remove the existing web part.  It’s possible to do but certainly kludgy.  So I thought the tool would be a nice thing to offer folks as a trial with the article.  It’s turned into slightly more than that as I realized other purposes for it, but at heart it’s designed to facilitate management of a web part page from the command line.

      2) “So what is it useful for?” — Thus far I’ve used it for two things… First, deleting closed web parts.  You would be amazed at how many of them there are in a typical SharePoint implementation.  Second, helping to configure site definitions while building/testing them.  When I build a site definition I typically have a page that is composed entirely of web part zones.  I don’t have a header, I don’t have a footer, nor menus, nor other parts of the page, those functions are represented by web part zones and by web parts.  (Yes, I know this is slightly wasteful from a configuration storage perspective — it does, however, make staying supported while making changes much easier.)  So I typically make 20 copies of my default page so I can drop in other content as needed.  That means adding half a dozen web parts to each page (header, footer, search, global navigation, site navigation, etc.)  So I make a batch file that calls the add web part command for each web part.  I nest this in a batch file in one that calls it once for each page.  It takes a while but eventually the controls are all placed on every page.

      So why am I bringing this up?  Well, two reasons, I’m ready to let a few people try it out (send me an email and I’ll send you a copy of it along with a license.)  Second, I got someone asking about how to lock web parts in place for 50 or so sales guys on a discussion list I watch.  It occurred to me it’s possible to put this in a script that runs every night and deletes and then readds the web parts — the net effect of which is forcing them to be on a page since changes, or removal will be removed each day.  Not pretty but an idea that would be easy and effective.

      So if you’re interested, drop me a line and I’ll get you a beta/trial copy.

    • #3137701

      SCHEMA.XML — Continuation Character?

      by rlbogue ·

      In reply to Not fit for print

      At the client I’m at we’re doing some customization of the SCHEMA.XML files for the list templates.  Basically, we’re adding some web parts into the pages since our header, footer, and navigation is driven from web parts.  I was over with one of the developers and noticed he was looking at the SCHEMA.XML as a text file.  When I asked why he showed me, VS.2003 wasn’t able to show a XML view.

      So I fired up my copy of Stylus Studio (which tells me why something isn’t valid XML in addition to just blowing up.)… I found that there were a few lines in the schema.xml which look like they were “continued.”  They had an exclamation point and a carriage return at the 990th position on a line.  I’ve checked through the other SCHEMA.XML files and can’t find the character … so I don’t know how it got there, but if you run into a schema.xml that won’t load, perhaps some utility has decided to add a line continuation character…

       

    • #3135782

      SPSiteDefUpd – SharePoint Site Definition Update

      by rlbogue ·

      In reply to Not fit for print

      I’ve mentioned through the last few posts that I’m working on another custom site definition and that I’m wandering through SCHEMA.XML definitions.  Well, one of the things that I decided to do since making changes to Schema definition file is so monotonous is to automate the addition or removal of web parts in all of the appropriate schema.xml files within a site definition.

      So I have yet another tool… SPSiteDefUpd — it updates site definitions to add, remove, or enumerate web parts in the various schema.xml files for the list definitions under a site definition.  It has a few limitations …

      • Right now it only processes the List defintions, it won’t automatically update your ONET.XML file to — that would be handy if you’re adding something like a global header or footer.  (but modifing the ONET is substantially quicker than hitting all of the schema.xml files.
      • It does removal by title so if you have two web parts with the same name .. it will remove one of them but which one it will remove is a mystery.  (Actually, it’s not, it will remove the first one listed in the Schema.xml file.)
      • It won’t touch the ListForm or ListView web parts — this is in no small part due to the fact that they don’t actually show up in the web parts section.

      OK, now that you know what it won’t do, here’s what it does do:

      • Processes every file for the list definition.  This includes both views and forms.
      • Processes every list definition — you tell it where the site definition is and it will, if you want, go through and do replacements for every list definition — or for only one if you prefer.
      • Adds new web parts — it reads the web part zone and web part order to put in the AllUsersWebPart attributes.
      • Adds the WebParts node to the XML if it doesn’t exist.
      • Enumerates all web parts on every page in every list definition or any subset that you prefer.
      • Removes web parts from the site definition by title.
      • Consolidates write operations if multiple sections of the file are changed to improve performance.

      I think it will be very handy as I work on new site definitions and want to do a quick add of my global header, footer, and navigation.  It will be trivial to get these pushed through all of the pages now.  It will also be good since I will be able to allow clients to create their own new site definitions based on a site definition that I leave with them.

      If anyone else is interested in trying the tool out let me know via feedback or comment, I’ll be looking for a few beta testers by the end of the week. (That will give me time to write the documentation and do a bit more testing.)

       

    • #3135783

      SharePoint: Created By, Created (Date), Modified By, and Modified (Date)

      by rlbogue ·

      In reply to Not fit for print

      One of the frustrating things about SharePoint 2003 is that the developer documentation is still a bit weak.  The way that we see the impact of this is that well meaning folks end up accidentally saying that something is or isn’t supported.  I’m quite guilty of it myself — although thankfully I’ve not written down any of these errors that I know of yet.

      Bil Simser was noodling on the idea of updating the created and modified fields in a list and mentioned that they’re read only. (ListFormWebPart and Tzuanmi SharePoint Designer).  The interesting thing is that I’ve updated these fields in a list.  I did it for some technology POC code I was generating around copying list data from one list to another.  I didn’t even pay attention to the read only field and I got the results I wanted.  I copied the Created By, Created (date), Modified By, and Modified (date) fields.

      This wouldn’t be so interesting except Adam Macaulay from CorasWorks and I had a similar discussion on the fields not two weeks ago.  Their Data Migrator tool (a great tool by the way) didn’t preserve Created/Modified dates.  So, I forwarded him along my POC code so hopefully he’ll be able to figure out why they initially had problems with getting the Created/Modified dates to copy from one list to another.

      I wonder how many other things about SharePoint that we collectively have wrong.

    • #3135779

      An update on those pesky fields

      by rlbogue ·

      In reply to Not fit for print

      Through some email conversations I’ve got a bit more detail on those pesky created and  modified fields.  You can set them when you’re adding a new record — and the values hold.  However, it doesn’t appear that you can set them on an update…  I love wandering around the depths of uncharted (undocumented) SharePoint.

    • #3135780

      Creating a file on WSS with the same created/modified date as a file on the file system.

      by rlbogue ·

      In reply to Not fit for print

      Apparently, I hit a sore spot for the community with my discussion about created and modified fields.  The code that follows is a very rough hack at how you can get a file into WSS while setting the created and modified dates.  I didn’t bother making the code lookup the users’ ID for the site from the name on the file — but that could be done with another half a dozen lines of code or so.  So here’s a command line utility to upload a file to WSS with the same created/modified dates as the original file…  Remember this is a hack… it’s definitely not designed to be used for anything more than realizing how it can be done…

       

      using System;
      using System.IO;
      using Microsoft.SharePoint;

      namespace TESTCREATED
      {
       /// <summary>
       /// Summary description for Class1.
       /// </summary>
       class Class1
       {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
         if (args.Length < 3)
         {
          Console.WriteLine(“TESTCREATED siteUrl ListName FilePath FileName”);
         }
         string paramSite = args[0];
         string paramList = args[1];
         string paramPath = args[2];
         string paramName = args[3];

         SPSite spSite = new SPSite(paramSite);
         SPWeb spWeb = spSite.OpenWeb();

         SPListCollection spLists = spWeb.Lists;
         spLists.IncludeRootFolder = true;
         SPList spList = spLists[paramList];

         SPFolder rf = spList.RootFolder;

         FileInfo fi = new FileInfo(paramPath);
         FileStream fs = File.OpenRead(paramPath);
         byte[] bytes = new byte[fs.Length];
         fs.Read(bytes, 0, (int) fs.Length);
         SPUser createdBy = spWeb.Users[0];
         SPUser modifiedBy = spWeb.Users[0];
         SPFile file = rf.Files.Add(paramName, bytes, createdBy, modifiedBy, fi.CreationTimeUtc, fi.LastWriteTimeUtc);

        }
       }
      }

    • #3135781

      Creating a new set of list items from one list into another

      by rlbogue ·

      In reply to Not fit for print

      Here’s the other bit of code having to do with the pesky created/modified dates.  This is just a function and not a whole program.  It deletes all of the items in a destination list and then copies all of the items from the source list.  The interesting bit is that the created/modified fields hold up to this mechanism.  You can create a new list item that maintains the created/modified dates of the original item.  As with the previous code — this is not intended for direct use.  It’s designed to show you how you might copy the created/modified fields from one list to another.

        /// <summary>
        /// Copy list data from one list to another
        /// </summary>
        /// <param name=”spListRef”>The source of the list data</param>
        /// <param name=”spListTarget”>The target (destination) of the list data</param>
        public static void CopyListData(SPList spListRef, SPList spListTarget)
        {
         if (spListRef.BaseType == SPBaseType.DocumentLibrary)
         {
          CopyDocumentData(spListRef, spListTarget);
          return;
         }
         SPListItem spListItemTarget;

         // Delete all Items
         while (spListTarget.Items.Count > 0)
         {
          spListTarget.Items.Delete(0);
         }

         foreach(SPListItem spListItemRef in spListRef.Items)
         {
          spListItemTarget = spListTarget.Items.Add();
          foreach(SPField spFieldRef in spListItemRef.Fields)
          {
           if (spFieldRef.Type != SPFieldType.Attachments &&
            spFieldRef.Type != SPFieldType.Calculated &&
            spFieldRef.Type != SPFieldType.Computed &&
            spFieldRef.Type != SPFieldType.Counter &&
            spFieldRef.Type != SPFieldType.CrossProjectLink &&
            spFieldRef.Type != SPFieldType.Error &&
            spFieldRef.Type != SPFieldType.File &&
            spFieldRef.Type != SPFieldType.Invalid &&
            spFieldRef.InternalName != “owshiddenversion” &&
            spFieldRef.InternalName != “InstanceID” &&
            spFieldRef.InternalName != “Order” &&
            spFieldRef.InternalName != “GUID”
            )
           {
            spListItemTarget[spFieldRef.InternalName] = spListItemRef[spFieldRef.InternalName];
           }
          }

          foreach(string attachmentUrl in spListItemRef.Attachments)
          {
           string fullUrl = string.Format(“Lists/{0}/Attachments/{1}/{2}”, spListRef.Title, spListItemRef.ID,
                                       attachmentUrl);
           SPFile srcAttach = spListRef.ParentWeb.GetFile(fullUrl);
           spListItemTarget.Attachments.Add(attachmentUrl, srcAttach.OpenBinary());
          }
          spListItemTarget.Update();
         }
        }

    • #3120522

      CAML can take a long walk across the desert…

      by rlbogue ·

      In reply to Not fit for print

      Back in March I attended a MS Book Publishers Summit in Redmond.  I had the pleasure to sit down with Mike Fitzmaurice.  What came out of his blog entry “CAML is Here to Stay“.  I was the mysterious “guy” mentioned in the post.

       

      Fitz’s post was reassuring – sort of .  It told me that there would be some support for CAML and that there was hope for all of us struggling with the poor (ok, missing) documentation on CAML and how it works.  I was encouraged because I knew how much of SharePoint requires CAML and how not knowing the rules for CAML hampers your ability to do anything in SharePoint – from queries to site definitions you’ll find so much CAML you’ll swear you’re in a desert.  (Sorry, I had to get that one in.)

       

      However, despite Fitz’s claims we still struggle to find good documentation on CAML.  Every new bit of information on the topic seems to lead to more that remains undocumented.

       

      The reason for this post is to make public one of the recent interactions that I had with the product support group – and the response I got.  I think it illustrates the problems that I have with CAML – the challenges that I think all of us face.

       

      I’ve got a set of utilities that allow you to migrate configuration data (web part placement, lists, etc.) from one site to another.  (The utilities are not unlike the Echo utility from WinAppTechnology.) They rely upon the SharePoint object model to function because frankly they have to – not everything is exposed through the web services (Please make everything available via web services.) or the FrontPage RPCs (Please kill these off.)  However, the problem with this is that it limits their ability to be used to a single configuration database.  In other words, I can’t push configuration from development to staging.  I’ve got a work around in creating a backup of a site in development, restoring it in staging, and using that as my template for changes.

       

      This is difficult to do and requires manual intervention.  The possibility for errors is fairly large.  This approach doesn’t fly very well when you have a tightly controlled production environment – which most customers have.  It ends up being a big issue.

       

      So my current client and I found out that the template file (user site template – STP) is really a renamed cab file with a manifest.xml file in it.  Manifest.Xml is CAML.  So the thinking was that this would have what was necessary. To replicate the site.  If the template can create a site surely it has all of the data about the site and should therefore be possible to use as a starting point to make updates.

       

      Having this XML based serialization of the site means that we can pack up the file and use it as a template on another server.  This means that we could have a very clean implementation for deploying from environment to environment.  We started down the process of implementing this mechanism believing that we were well within guidelines.  We weren’t touching the database – we were using a file that is in a supported format.  Everything should be fine.

       

      Well, that’s a good idea, but unfortunately, the word back from the development team is that they don’t want to support people using the manifest.xml file in an STP.  At least they don’t want to support the areas of that file which are not documented CAML.  They have a binary serialization of web parts in the file which they’re not planning on sharing the details to.  The net effect is that it’s not possible to get web parts from an STP files Manifest.xml

       

      That leaves me with very few options.  Officially, I can’t use the data in a solution so I’d have to come up with my own mechanism for serializing this data – integrating that into the manifest.xml file and shipping that around.  Of course, if I modify the schema to ship the web parts around I’m no longer moving CAML so there’s no telling if I’ll be able to use that data anyplace except in my application.

       

      I’ve not yet figured out how to resolve the issue – however, I’m looking for input here.  Am I the only one that thinks that if Microsoft says they’re going to support CAML that they should support it every time they write it out?  Am I the only one who sees that this kind of “We’re supporting it” and then when we go to actually use it we get “That’s not supported” is making life really difficult?

       

      Thoughts?

    • #3131372

      Two more “How To” documents for SharePoint

      by rlbogue ·

      In reply to Not fit for print

    • #3131373

      CAML:List @ServerTemplate

      by rlbogue ·

      In reply to Not fit for print

      If you’re trying to work backwards from the CAML element?to the SPList object…? The ServerTemplate attribute corresponds to the .BaseTemplate property.? It’s a SPListTemplateType enumeration…? The enumeration values are…

      SPListTemplateType.Announcements = 104
      SPListTemplateType.Contacts = 105
      SPListTemplateType.CustomGrid = 120
      SPListTemplateType.DataSources = 110
      SPListTemplateType.DiscussionBoard = 108
      SPListTemplateType.DocumentLibrary = 101
      SPListTemplateType.Events = 106
      SPListTemplateType.GenericList = 100
      SPListTemplateType.InvalidType = -1
      SPListTemplateType.IssueTracking = 1100
      SPListTemplateType.Links = 103
      SPListTemplateType.ListTemplateCatalog = 114
      SPListTemplateType.PictureLibrary = 109
      SPListTemplateType.Survey = 102
      SPListTemplateType.Tasks = 107
      SPListTemplateType.WebPartCatalog = 113
      SPListTemplateType.WebTemplateCatalog = 111
      SPListTemplateType.XMLForm = 115

      ?

    • #3131070

      Web Services Extensions (WSE) 2.0 and SharePoint

      by rlbogue ·

      In reply to Not fit for print

      One of my clients recently needed to have WSE installed on the same server as SharePoint.  Their policy caused some issues with SharePoint web services.  After a support call we came up with this solution to running WSE and SharePoint in the same virtual server…

      1)       Create a blank policyCache.config file – or remove the nodes underneath /policyDocument/mappings and /policyDocument/policies from your existing policyCache.config file.

      2)       Add to the /policyDocument/mappings node the following nodes:

       

      <defaultEndpoint>

                  <defaultOperation>

                              <request policy=”” />

                              <response policy=”” />

                              <fault policy=”” />

      </defaultOperation>

      </defaultEndpoint>

       

      3)       Save the file into the C:\Program files\Common Files\Microsoft Shared\Web Server Extensions\60\ISAPI directory as policyCache.config

      4)       Perform an IISRESET.

       

      That should make WSE and SharePoint get along much better.

    • #3113947

      Article: Master Advanced List Editing in SharePoint

      by rlbogue ·

      In reply to Not fit for print

      SharePoint’s built-in tools are good at providing a basic interface for adding and editing data, however, there are times when the included editing features aren’t enough. There are applications where the SharePoint list will work, except for one small detail. For instance, you may need to ensure that one of the fields in your list matches a back-end data source. This might be accomplished by creating a drop-down that is populated from a back-end system, or perhaps it’s some custom validation that ensures that the data that the user enters is in the back-end system.

      http://www.devx.com/webdev/Article/30026/

    • #3113946

      Two more How to documents

      by rlbogue ·

      In reply to Not fit for print

    • #3122673

      A Beginner’s Guide to Successful Technical Publishing eBook available for free for a limited time

      by rlbogue ·

      In reply to Not fit for print

      Back in 2001, I wrote an eBook, A Beginner’s Guide to Successful Technical Publishing, which was available briefly on MightyWords.com.  They closed a few months after I put the book together so the sales were not that great.  I’ve had the material in my archive and recently ran across it again.  Since I think it might be valuable to the community and I have limited interest in selling eBooks to make money these days, I’m making it available as a PDF for free.  You can download it from http://www.thorprojects.com/files/successfulpub.pdf.

      I’d appreciate your feedback on the book — particularly from those who’ve written an article, a book, or other content.

    • #3122621

      Another How To — How to Approach Performance Monitoring in Windows

      by rlbogue ·

      In reply to Not fit for print

      It’s amazing what you’ll find when you start to clean up things …  I’ve posted another How To.  This one titled “How to approach performance monitoring in Windows” walks you through how to tackle a performance monitoring challenge in Windows.

    • #3122622

      And Another … How to backup Windows SharePoint Services

      by rlbogue ·

      In reply to Not fit for print

    • #3197768

      Top 4 Things Project Managers Do To Destroy Software Quality

      by rlbogue ·

      In reply to Not fit for print

      In many cases, the manager’s drive to get a software development project delivered on time and on budget will be at odds with the development team’s desire to create a quality product. Although the project management techniques outline in this download are at least well meaning and perhaps even time honored techniques, they do have the potential for disaster. This document explains how the techniques can be abused to the point where the overall quality of the software being developed will be compromised.

      http://techrepublic.com.com/5138-10878-5991783.html

    • #3196354

      Blog Spammers

      by rlbogue ·

      In reply to Not fit for print

      Well, blog spammers have finally found my blog.  The net result of which is that I’ve puposefully broken comments for the time being.  This will just accelerate my move to Community Server… 

    • #3080969

      The sound of a million crickets longing to be free

      by rlbogue ·

      In reply to Not fit for print

      If you’ve been wondering why my blog has been so quiet over the last 45 days or so, the answer is a bit complex. (but you can continue listening to the crickets churping in the absence of content here.)  I need to take a break from my reading to give my brain a rest… so now’s as good a time as any to explain the pieces of the puzzle that have lead to the relatively low number of posts.

       

      First, and foremost, I’ve entered into a “phase” of reinvestment.  That means many things but the short answer is I’m learning new things and relearning old things that I’ve forgotten – or I’m at risk of forgetting.

       

      One of the pieces of this puzzle is the relatively large amount of software that Microsoft’s dropped at my door.  I hadn’t really had much of a chance to work with .NET 2.0 or SQL Server 2005 while they were in beta – a side effect of a busy life.  So I’m in the process of getting up to speed on them.

       

      Just in case you’re wondering – for me getting up to speed means doing things that are a bit beyond the envelope.  I’ve been playing with configuration classes (to support non-file based configuration sources), factory classes, and generics.  I’ve not gotten done yet, however, this will be the foundation of the new web site that I’m building.  (Don’t ask when it will be done, I don’t know yet.)  I’ve also been playing around with master pages and web parts … I’m trying to mesh those into a foundation layer that allows me to control what’s on the page from a database.  … and don’t even get me started about the HTTP handler to allow Google to walk around the foundation without getting aggravated by query strings.

       

      Couple that with “Office 12” and Commerce Server Betas.  Office 12 contains SharePoint which is one of the things driving a great deal of my work these days.  Commerce Server is near and dear to my heart for many reasons not the least of which are that it’s at the core of the new web site I’m putting together and I’m a Commerce Server MVP.

       

      Because I’m preparing to embark on a relatively large software development project, I’m reminding myself how to do things right.  That means rereading Steve McConnell’s Rapid Development book, Fred Brook’s The Mythical Man-Month, and a few other Software Development Practice books.  I’ve read them all before, but I felt like having read them about 10 years ago made it time to reread them.  (I highly recommend both of the above books – both are “dated” but they illuminate some core concepts and problems that don’t seem to change.)

       

      I’m also reading Karl Wiegers’ Software Requirements, Second Edition.  I’ve had a few projects recently that somehow managed to skip the requirements phase of development (in whatever lifecycle model you want to call the projects.)  So I thought reading it would remind me of what a project with requirements is like.  The book is solid, though somewhat repetitive.  It’s much like a buffet where you take what you want – though I miss the carefully coordinated entrée and sides.  My personal task for the end of the reading process is to try to distill the information into a one page cheat sheet I can laminate to remind me of the core concepts.  I find that requirements is the one area where continuous reminders is helpful for me.

       

      When I get done there I get a chance to read some books on Agile development … I’m looking forward to getting a firmer foundation for what Agile is supposed to be – presuming that the two books on the topic that I have can do that.

       

      The second factor for the lack of posts is that I’m doing some infrastructure cleanup tasks.  I run my own network infrastructure – I suppose that my MCSE and my former MVP aware for Windows Server-Networking will die hard.  There have been nagging little problems with the infrastructure for a while – errors that weren’t causing any real problems but were still getting thrown to the logs.  Well, in an effort to get my Pocket Pc Phone edition working with direct server synchronization, I had to clean up more than a few of those errors.  (By the way, My QTek 9100 Windows Mobile 5 [Pocket PC Phone Edition] rocks.  The over-the-air sync to Exchange is amazing.)

       

      The third factor is that I’m building an arcade style kiosk for my son.  It will house his PC.  It will be like the old “Pac-Man” arcade games but slightly wider to accommodate the keyboard, mouse, and joystick.  It will have a real coin door which will eventually allow you to turn on and off the PC as well as an overhead light.  The coin door itself has been installed, I just haven’t finished the electrical for the switches.  Because my son is only 4 (as of January 5th) I’ve also built a seat arrangement that slides in and adjusts up and down so we can get the seat setup at a reasonable height for him. 

       

      The net effect of this project is that it’s taking a ton of my time.  I’ve begun referring to it as the albatross around my neck.  However, I saw the light at the end of the tunnel today as all of the major components have been assembled – I just need to get it in the house and hooked up and I’m going to take a break from the project for a while.

       

      The fourth factor is that my writing schedule has been slowed WAY down.  Basically, I’ve temporarily discontinued my regular writing.  I expect that I’ll start writing about software development issues again very soon – however, in the mean time that means that even the regular posts linking to my articles have been missing.

       

      The fifth factor is that I’ve been working a ton of hours at the church.  I took on leadership of the technical ministry for worship services which means I’m responsible for coordinating sound, lighting, and media.  Of course, I’m trying to get everything documented and get a better fundamental understanding of each part so that I can feel effective…  This in the middle of the Christmas production and my other duties taking care of the IT needs have been overwhelming.

       

      So that’s it… add in the usual family commitments for Christmas and New Years, a few days of illness, and you end up with some pretty sparse blog postings.  However, I am seeing the light at the end of the tunnel on most of these things, so hopefully I’ll have more to blog about real soon.

    • #3095621

      Load Balancing and Clusters

      by rlbogue ·

      In reply to Not fit for print

      I’m in the middle of reading Balancing Agility and Discipline and I keep getting distracted by this thought… hopefully I can get it out of my head…

      I was speaking yesterday with a hosting company that hosts web sites for organizations. They have a niche where they serve largely mid-market organizations.  We were discussing their movement into load balanced web servers and database clusters.  One of the comments the CTO made was that they had never had a need to move to a load balanced environment to handle the traffic on their web sites.  They do have one very large web site so his statement makes sense based on the fact they’re seeing solid volume.

      However, what struck me is that volume and capacity rarely drive the decision to move to load balanced front end web servers and a clustered database.  Nearly universally this decision is made for reliability.

      This was made clear to me by one of my enterprise clients. ( and I do mean enterprise, their consumer brands are something I can virtually guarentee you have in your home if you’re in the US.)  We were talking about the two server load balanced web servers we put together and he mentioned that they’re running like champs.  They host nearly 50 sites.  I don’t know the number of total hits per day but it’s not a trivial number.

      So why are they on a load balanced web farm?  Uptime.  Most of it is reliability with a small percentage of the decision coming from the ability to deploy new versions of the web site and roll back if necessary.  Sure someone likes to think that it’s performance but it isn’t.

      Today’s hardware can handle a lot of web hits.  Particularly with a well written application — so if you’re thinking about whether you need load balancing — and back end clustering of your database — evaluate the decision from the perspective of reliability — not performance.

       

       

    • #3096413

      On Balancing Agility and Discipline: A Guide for the Perplexed

      by rlbogue ·

      In reply to Not fit for print

      I mentioned briefly in my last post that I was reading Balancing Agility and Discipline: A Guide for the Perplexed.  I managed to navigate my way through the end of the book and wanted to record my initial thoughts about the book and about my growing perspective on Agile software development in general.

      On the book…

      The fundamental question that the book answers is how do you take the best of Agile development and integrate it into your current software development methodologies.  It neatly disguises this question under the auspicies of exploring the places where each method “belongs.” — their home ground.  It does what appears to be a very thorough job of reviewing the strengths and weaknesses of both traditional (plan-based) development and agile development.

      My current thinking about Agile development (and software development in general) is this…

      1) Agile software development makes the same statement that traditional development does — better programmers make better projects.  I was struck with how much emphasis good software development –whether traditional or agile — places on good developers.  (It would be more accurate to say good participants.)

      2) Agile software development is like Voodoo — at least in the movie Dogma’s definition “Do you know about voodoo? No constitution of faith, more an arrangement of superstitions.”  In other words, it’s a collection of techniques — some shared between different agile variants, some shared with more traditional plan-based development, and some shared with project management practices.  The percentage of people following a specific technique is very low.

      3) Agile is akin to “Management by Wondering Around” one of the practices made popular by In Search of Excellence.  It focuses on people actually talking to each other.  Given the number of large scale projects I’ve worked on where that doesn’t happen — I’m all for people talking to each other. 😉  In a more serious way, the focus is on individual and personalized conversations with people.  Answering their specific needs and coaching them into effective behaviors — one by one.

      4) The arguments that are being used by both sides of the isle represent a fundamental lack of understanding.  It reminded me of a recent set of posts on the Dilbert Blog about Inteligent Design vs. Evolution.  [Warning: The preceding link may consume a huge amount of time as you try to figure out which of the arguments are the dumbest.]

      5) We’re all missing the point … We start good development by getting good people involved.  We get good people involved by DEVELOPING / CREATING / BUILDING good people.  If we’re not all willing to go out of our way to help other people become other developers — every day whether it makes sense to the particular project or not — then we may be doomed to struggle with poor software developers forever.

      The good news is, however, I’m more agile than I thought.

    • #3080424

      Agile Development through Lunch

      by rlbogue ·

      In reply to Not fit for print

      As I’ve mentioned in previous posts, I’ve been doing a ton of personal reengineering, trying to get caught up on my personal and leadership practices for software development practices.

      One of the things that struck me through my reading is that there are Agile techiques that I’ve been using for a while.  One of those is trying to gather the team for lunch.  Why?  Well, we all have to eat… and it gives us a chance to have more time to interact.  We rarely spend the whole lunch talking about the project, we talk about jumping out of planes, how crazy I think it is to jump out of a WORKING plane, gadgets, etc.  However, we often slip into project conversations for a few minutes to ask a random question, or clarify something.  It’s part of the randomness of the human condition.

      I never gave it much thought, it was just something I did to make sure that the team was staying connected.  It turns out that one of the foundations for agile development is improved, frequent communication.  Alistair Cockburn recommends being close to each other in the office.  While that wasn’t always possible it was generally possible to gather the team up to go to lunch together.

      … hmmm, Come to think about it I frequently used IM to “gather the troops”… I wonder if that’s a supporting technology for agile development 😉

    • #3080425

      Are you really saving money through off-shoring?

      by rlbogue ·

      In reply to Not fit for print

      Let me first start out with two process notes…

      1) It’s hard to get an article like this published on the Internet because of the substantial amount of web traffic which is coming from off shore.  That’s why this is a blog post.
      2) I have the GREATEST respect for many folks who happen to be outside the US.  This isn’t an attack on the idea in general — it’s an open conversation (albeit one sided) about some of the ways that outsourcing costs more and no one can see it.

       

      First, as I’m preparing to push for my new commerce web site (softwarewishingwell.com) I’m seriously looking for being as efficient as possible.  That means the review of techniques and thinking that I’ve been doing, but it also means looking at how to acquire the construction resources I need.  (I’ll be doing most of what represents requirements and design myself — in whatever form it takes.)  I’ve found a few different options for getting the construction done — and they look like they’ll be a great way to keep my costs down.  However, I’ve also seen first hand how off-shoring can fail to work.  Here are a few warning signs that I think many organizations miss…

      1) The off-shore resources aren’t following coding standards (or you don’t have coding standards).  This just means tons of rework with no hope of any escape.
      2) The off-shore team doesn’t receive any training of any kind.  You don’t coach them on how to develop software better.  You figure that they’re contractors and you shouldn’t waste your time on training people who aren’t on your staff.  The fallacy with this idea is that you don’t realize how much cost you’ll incur between the time you identifiy they need the training and the end of YOUR project.
      3) You’re noticing a high defect rate.  Of course, you’ld have to actually track defect rates and associate them to the code that caused them (which many organizations fail to do).  If you did you might notice that a disproportionate number of your defects are coming from off-shore.
      4) You’re having to define things in such detail that you feel like you’re spending more time specifying the code than it would take to write it (and you’re not getting what you asked for.)  If you can write it faster than it takes you to write the specification… then you might want to just write the code.

      Most people ignore the warning signs above because they don’t measure the right things, they’re oblivious, or they simply don’t want to hear it.

      Remember that finding a defect late in the process can cost 100 times as much as fixing it quickly.  The fewer repeatable defects you’re fixing the more likely you are to find the important defects that might slip through.

      A final note, both traditional plan-based development and agile development work better with better developers.  Agile is particularly sensitive to having good developers.  If you’re not helping your developers become better, you’re shooting yourself in the foot.

       

      • #3079187

        Are you really saving money through off-shoring?

        by michael.crocker ·

        In reply to Are you really saving money through off-shoring?

        One of the drivers to off-shore was the promise of ?easy?
        savings.  After all, the spreadsheet
        crowd claimed, it was just an extension of using contractors.  Those that were around in the 80s heard the
        same arguments and saw the reckless fast paced move to get manufacturing
        off-shore.  Just like then, companies
        that had been doing it earlier and had established sites off-shore, saw a
        benefit.  Those that jumped on the band
        wagon without doing the due diligence ran into problems.  Being sucked into only this quarter and having
        an ego investment into the decision, the argument was that even with the
        rework, additional cost and added time spent in communications and travel, it
        was still cheaper.  A number of venture
        capitalist even insisted that off-shoring be part of the business plan to get
        funding.  Those people that did the math
        were able to see that the additional cost would eat up any savings in a few
        years.

        Off-shoring works well for some things, but not
        everything.  As you pointed out, one
        critical element is the qualifications of the team working on the project.  When off-shoring started, there was a surplus
        of qualified talent.  As more companies
        pushed work off-shore, then we see both the cost for qualified talent going up
        and some off-shore companies using less qualified people.  This is not a new or off-shore only
        problem.  We have seen this being done by
        big name consulting companies locally.  To
        make virtual and remote teams work, requires even better management.  Unfortunately, most companies did not train
        the technical leads and first line managers on how to do this.  Because this was seen as a way to save money,
        adding additional resources to QA and fix defects was not part of the plan (it
        could also detract from the executive bonus). 

        Just as in the case of manufacturing, no matter how many
        companies go under due to an off-shore company not delivering, stealing their design
        and selling it, or just taking the money and then disappearing, it will
        continue.  Looking long term, what is
        even more frightening is that taking out the entry level positions means that the
        design and architecture jobs will disappear too. 

    • #3078271

      Preparing for SharePoint Advisor Live! Las Vegas April 9th-12th

      by rlbogue ·

      In reply to Not fit for print

      I’m just sitting down to get some work done on my presentations for SharePoint Advisor Live! in Las Vegas April 9th-12th and thought I should share with everyone the three sessions I’ll be doing…

      • Get your SharePoint Project Started Right : SharePoint projects are often lost in enthusiasm and don’t have the requirements gathering they need to succeed. Learn how to get the requirements you need to have a successful project. Find out about techniques for clarifying terminology and for getting the most out of prototyping. Learn real world tips for recovering from bad requirements. Whether your project has already started and is off track or you’re just getting started and are already concerned, this session will help you be successful. You’ll take home a worksheet that will let you make sure you get all the important requirements for your SharePoint project.
      • Use SharePoint Portal Server Search to Find All of the Information in your Organization : Locked away in the files on your file servers, in your ERP systems, and in your custom written applications is the collective knowledge of the organization. Microsoft SharePoint Portal Server (SPS) can peer into these repositories to collect all of that knowledge and make it accessible to you. Learn how to enable SPS to search all the information in the organization. Learn the details of how SharePoint search works and how to configure it. Learn how to create advanced search criteria in SPS. If you’re struggling with search, then you need to come here to learn how to get control of it.
      • SharePoint Backup and Restore : Critical information goes into SharePoint each day. Recovering that information in the event of a “disaster” is essential. Learn how to back up the information so you can recover it. Learn about the out-of-the-box backup solutions as well as the third party options for backing up your SharePoint data. After you have fundamental backup options, you’ll also learn to create a backup strategy that allows you the most recovery options. You can’t afford to loose your data so you can’t afford to miss this session on the ways to recover from a “disaster.” Take home a solid understanding of the backup options and their benefits and weaknesses.

      I’m looking forward to seeing everyone there!

    • #3078896

      An odd little quirk about not installing VB the first time through

      by rlbogue ·

      In reply to Not fit for print

      One of the things I’m doing right now is evaluating DotNetNuke 4.02 … So I install it in my VPC and It doesn’t show up.  I think about it and realize that I didn’t install Visual Basic when I installed Visual Studio 2005.  Of course, I couldn’t think of any reason why I’d need it.

      Sidebar: I’d love to use WSS V3 for this but the site has to be up much sooner than I’ll be able to get a “go live“ license.  I’m investigating several alternatives with an eye to being able to make the change later.

      I go back in and install it and then go back to try to find the templates for .NET nuke (starter kits more appropriately).  I still can’t see them.  I learn about the VSI format (think SharePoint CAB deployment packages using ZIP instead of CAB) and the .vscontent files.  Cool stuff… After several reinstallations it is still not showing up.

      I take a step back and realize that the only web templates I have showing up are C# web templates.  Doh.  Something must be wrong with the installation.  It thinks that I don’t want to do VB … since DotNetNuke is VB… I can’t see it.

      I’m trying a repair now … if that doesn’t work I get to uninstall and reinstall VS.2005 to be able to evaluate DotNetNuke.

      [Update: It’s an odd interface quirk… I had to select one of the VS templates to enable the language selection lower in the dialog … I love stuff like this.]

    • #3079636

      Agile & Interative Development: A Managers Guide

      by rlbogue ·

      In reply to Not fit for print

      The latest book to succomb to my ravenous appetite for software development is Agile and Iterative Development: A Managers Guide.

      More than any of the other books this book convinced me how astray we’ve all been lead astray by waterfall based development.  While most of my consulting career has been spent adapting waterfall to meet client needs and the needs of the consulting organization, it’s interesting to realize that the fundamental approach to development was wrong.

      I particularly liked this books coverage of details.  It talks about how iterative development got started and how current agile practices are linked to iterative development.  It also has great coverage of scrup, xp, up, and evo methodogies — and how they work together well and places where they don’t work together well.

      All in all, this is a great guide for people who are open to better understanding what they do well and don’t do well in their software development.

    • #3077323

      Recognition vs. Recall

      by rlbogue ·

      In reply to Not fit for print

      Where did I put that again?

      One of the things that’s been fairly constant in my life over the last few weeks — that rediscovery stuff is hard, particularly when you try to do it too quickly.  It’s caused me to recognize that there’s information I’ve seen before but I couldn’t recall it on command, nor can I even remember where I saw it again.

      It reminded me of some of the instructional design research I did several years ago while I was doing a lot of development editing for books.  I ran across Bloom’s Taxonomy of Educational Objectives, while I can’t say that I agree with every bit of the classification or the revision of the work.  However, it’s interesting because it causes you to think about how we teach and learn in a different way than we most folks think about it.

      What caused me to think about it was the difference between recognition and recall.  These are at the bottom most levels of the taxonomy.  The most basic level is recognition.  That means that if someone asked you what it was you couldn’t tell them but if they say it to you — you will recognize that you heard it before.  Taking from my daily life…  My wife asks me to pickup paper plates from the grocery store.  I walk into the store and can’t remember what it was that my wife asked me for.  (I lacked recall.)  However, my friend, who co-manages the store walks up to me and starts offering ideas on what it might be: bread, milk, cheese, etc.  When he hits paper plates I immediately recognize that it what I’m there for.

      The trick, for me, is to figure out how to get more of the stuff I read and take in into the recall category and less in the recognition category.  I could be struggling for higher levels, levels that allow me to do things with the information but for now, I’d be happy to hit recall all the time.

      Excuse me while I go look for my car keys…

      If you’re interested in learning more about how we educate ourselves and others, it’s an interesting read.

    • #3097978

      … How Little Things Can Make a Big Difference (The Tipping Point)

      by rlbogue ·

      In reply to Not fit for print

      If you’ve been reading this blog then you know that I’ve been doing a lot of reading of my own lately, mainly associated with some professional development in the area of reconnecting to basic software development fundamentals that I’m already aware of and some new things as I try to find some new ideas in the various forms of the agile development movement that I can use or try.

       

      The latest book is radically different.  It’s one that was casually mentioned to me by a colleague, Jeff Juday, who was recently awarded Microsoft MVP status.  He mentioned how he thought the program related to the book he had just read, The Tipping Point.

       

      This piqued my interest initially because I’m always curious about how the market works and Jeff promised the book would have some insight.  (He was right.)  Having written (or written part of) 16 books, I know how random sales can be from one title to another.  In fact, when my friends and colleagues approach me about writing a book and ask me if their idea is a good idea, I usually respond with I have no idea.  The market seems to work in mysterious ways.

       

      The Tipping Point is a book about epidemics.  Not so much the negative things as we associate with the word epidemics but rather about things that have a radical growth cycle.

       

      At some point in the book, I wanted to share a passage with everyone I knew.  Some of my mentors, the pastoral staff at the church I attend, my mother, several of my friends, and some of the folks I know at the MVP program at Microsoft.  The truth is that when I finish this blog post many of them will be receiving a link via email to check it out – excluding those I know read my blog regularly and so they’ll see it anyway.

       

      I found the book enthralling as I examined some of the market reactions I had seen.  The birth of the Internet (really the adolescence of the Internet), the growth of cellular phones (which the book discusses), and I even thought about it in terms of SharePoint Portal Server.  (For the record, I would have written this blog post even without a SharePoint tie-in.)

       

      I remember working with the 2001 version of SharePoint Portal Server.  When I’d talk with my peers most of them would be asking me – “Share What?”  There weren’t many people that knew what it was.  Today, when I talk about SharePoint to people I meet – even outside of the industry – I get a surprisingly high awareness rate.  Most don’t know what it does exactly but they know that people think it’s something to watch.  (As a sidebar, most people who do SharePoint work don’t know exactly what it does.)

       

      The interesting thing is looking at this pattern – and others – and evaluating why SharePoint is such a pervasive word in the IT industry and in the minds of small business owners.  It certainly can’t be attributed to the stellar marketing that Microsoft has done for the product.  (Sorry guys.)

       

      Quietly you’ll get some of the marketing folks in the information worker group to admit that there’s a lot of confusion about SharePoint and few places to find good answers.  I’ve had clients pay for us to develop documents that they can use to internally explain the solution – because it’s simply too hard to do without clear documents on what it does and doesn’t do.

       

      SharePoint isn’t successful because of a greater number of people running Microsoft Office.  SharePoint’s popularity can’t be explained by a renewed interest in IT.  It’s an absolute mystery to me as to why it’s become so popular.  (Here’s a challenge – tell me via email why you think it is so popular.  I’d love to hear your perspective.)

       

      The Tipping Point didn’t explain why SharePoint has become so popular but it did give me the clues to look for to identify what happened.  I don’t have the answers but I do at least know some of the questions to ask.  In that way, I think it will be invaluable in the way it allows me to see things more clearly.

       

      The analogy that I’ve come up with to explain it is that it’s like someone with imperfect vision – like myself – putting on glasses for the first time.  It doesn’t make me see or allow me to see for the first time but it does bring more clarity to what I’ve been seeing all along.  The unfortunate thing is that it has also exposed me to how much I still don’t see.

       

      There are some psychological tenants that most people subscribe to – including me.  That I know believe are false.  I’m questioning how much about the way people behave is about their character and how much is about their circumstances.  (In an interesting turn of events, the environment swapping movie Trading Places was on TV last night.)

       

      If you’re the least bit curious about how trends get started and would like to get a little bit better picture of them I highly recommend reading The Tipping Point.

    • #3099046
    • #3098913

      Fundamentals of Performance Testing

      by rlbogue ·

      In reply to Not fit for print

      I’m in the process of writing an article for TechRepublic.com on the declining importance of performance testing.  Without getting into the articles primary arguments, I came to a realization that I felt compelled to share.

      Most IT professionals have no idea how to approach performance testing.

      I mean that both from the sense of they couldn’t do the testing if the needed to and also from the perspective that they don’t truly understand how it works.  The article for TechRepublic.com is, as most of my articles are, born out of experience.  I’ve noticed that way too many organizations get hung up on performance.  They avoid items which have been identified as non-performant but which make the development process much easier and therefore it costs less.

      So in the interest of educating folks, here is a high level summary of what you should know about performance testing, the details will be in the article …

      • Performance Testing – Performance testing is really a set of related evaluations of the system including: responsiveness, throughput, and scalability.
      • Responsiveness – Responsiveness is how quickly the system can complete an individual transaction.  As the throughput of the application goes up responsiveness typically goes down.
      • Throughput – Throughput is the rate at which transactions can be completed.  Typically maximum throughput is the number that organizations are trying to find.
      • Scalability – Scalability is the amount to which various changes to the environment can impact the maximum throughput and to a lesser extent improve responsiveness.  Different changes can result in radically different effects on throughput expecially when the scalability is directly related to a bottleneck.
      • Bottleneck – A bottleneck is a performance constraint in the system which prevents the throughput from increasing.  Typical candidates for bottlenecks are processor performance, available memory, disk performance, and network performance.

      I hope this helps.

    • #3258465

      Book Review: Software that Sells: A Practical Guide to Developing and Marketing Your Software Project

      by rlbogue ·

      In reply to Not fit for print

      Do you know why you don’t see a lot of negative reviews of anything in magazines?  The answer is simple.  Why print something that is negative when you can just as easily print something positive.  Well, the beauty of a blog is that I can post something negative if the item deserves it.  This is one of those cases.

      I just finished reading Software That Sells: A Practical Guide to Developing and Marketing Your Software Project.  Actually, there were several sections that I couldn’t force myself to read.

      The information contained in the book is trivial, obvious, and sufficiently non-specific so as to be non-actionable.  In other words, this is stuff that nearly everyone knows.  You could buy someone in your area a drink at the local tavern or pub and get a more coherent delivery of useful information.

      While I do realize that there are some folks who are very early in their careers who might be able to find value in the broad coverage of topics, most people will find the coverage too trivial.  What is worse, in my opinion, is that the author doesn’t provide the reader good references to go find more information.  There are chapters on marketing and sales, but no references to other books that cover these topics in detail.

      So, if you’re trying to figure out how to start a Micro-ISV (small software product company) you may want to keep looking for a good book.  (Micro-ISV by Bob Walsh is on my reading list still.  I’ll let everyone know what I think of it.)

    • #3258466

      Rant: Book Development Editors are a dieing breed

      by rlbogue ·

      In reply to Not fit for print

      I used to do a lot of development editing for books.  It was fun work.  You were able to see the impact on the books you were working with.  You could see author’s writing getting better as they started to get used to your comments.  They would quit taking short cuts.  They would begin to view the material from the reader’s point of view.

      The job of the development editor in the book process is to “develop” the material.  In other words, the development editor is supposed to make the material better.  Development editors don’t do this by adjusting the placement of the commas or the number of capatilized letters (that’s the copy editor’s role.)  Instead, the development editor looked at the tone, overall flow, depth, and other broader issues.  They focused the author’s attention on these issues so that they could be improved upon.

      What I’ve realized from the reading that I’ve been doing lately is that the development editors aren’t doing this today.  It’s likely because they’re too busy with other projects but still the abscense of this assistance for the author is painfully missing from many technical books today.

      The book industry is right to be scared of the Internet and the way that we consume information these days, however, they’re not doing themselves any favors by shortcutting the development process in favor of books that are quicker to market.

      I read a lot of blogs, articles, and shorter content on the Internet.  However, when I really need to have a thorough understanding of a topic, or I need to make sure that the information is right, I go to a book.  I use them as authoritative voices — however, this is challenging for me when the books have no more thought or organization to them than a typical one of my blog posts.

      I wonder if the technical book publishing community will totally collapse before they learn what made Wrox what it was. Ok, before they went bankrupt.  The point is, however, that the brand of Wrox was powerful.  Having the opportunity to work with them (as a technical editor), I can tell you that they crafted their books.  The development editor was very involved.  They had the material run through two technical editors.  Everything was designed to get a quality product — at the center of that effort was the development editor who was managing all of the support that they were providing to the author.

      Of course, the days where you could expect that a book won’t wander — that it will follow a clear, intelligible outline are long gone … Some days, I wish I could go back.

    • #3257538
    • #3108604

      Good Quality Assurance Information

      by rlbogue ·

      In reply to Not fit for print

      I’m preparing for a presentation to the Indianapolis Quality Assurance Assocation on February 16th titled “The Impact of Coding Standards and Reviews on Quality.”  I stumbled across a link that is titled Quality Assurance, but is really a collection of really good development ideas, some of which are quality ideas, but many are ideas for better development.  You can find the link here.

      Good ideas like defensive programming, exception management, and others are woven throughout this document — it’s an interesting read.

    • #3108605

      Book Review: The Rational Unified Process Made Easy: A Practioner’s guide to the RUP

      by rlbogue ·

      In reply to Not fit for print

      It’s very in vogue to describe your software development process as RUP.  Describing the current methodology as agile (XP, Crystal, Scrum, etc.) evokes too many questions, but describing the methodology as Rational Unified Process, more frequently RUP, leads to fewer questions but puts you ahead of those who are still running a waterfall process.  However, in many cases RUP isn’t really the methodology being used, it’s simply renaming some of the processes and artifacts that were done for waterfall with new names.

      The beauty of the book The Rational Unified Process made Easy: A Practitioner’s Guide to the RUP is that focuses not on enumerating the artifacts that one might use with RUP but rather focuses on the core concepts, fundamental precepts, and spirit of RUP.  In this way it intentionally steers the reader away from the natural tendency to try to implement every artifact, to create the highest ceremony process possible.  It provides a balanced view on how to utilize RUP to run effective, successful software development projects.

      It also contains a role-by-role review of RUP.  This provides a view of the process from each role’s perspective.  The benefit of this is to condense the amount of training that must be done to get everyone working on the same page.  While they can not be considered a direct replacement for training, the chapters are a good start to helping the team member understand what RUP is all about.

      Even in a world enamored with agile, RUP still has it’s place.  It’s proven for larger projects, and provides a path to an iterative model — essential to every form of agile development.  If you’re trying to get to agile RUP is a good stopping point along the way — and the book The Rational Unified Process Made Easy is a good way to understand how to do RUP.

    • #3133266

      The Tivo Out of Box Experience is REALLY bad

      by rlbogue ·

      In reply to Not fit for print

      It is amazing to me just how bad of an out-of-the-box experience that you can have with Tivo.  For all of the good things that the product does, it’s like there’s a completely different company managing their out-of-box experience.

      I wanted to summarize for folks the situation that I ran into recently when I purchased a Tivo unit with DVD recorder for the church I attend.  I purchased it to record and store content from a specialized satellite subscription that the church purchased.

      To start, you must use the phone line for initial connectivity and there is still no network connection on the unit I purchased.  You can add a USB-based network card, however, it’s a separate accessory that you have to buy.  Not a big deal in the grand scheme of things, however, it can make logistics difficult as it did for me.  To get the unit started you must complete the setup calls (not setup call as seems to be the common parlance.)

      So I plugged the unit into a line that I thought was an analog phone line — it turned out to be a digital phone line — and the modem burned out… when the replacement unit arrived I plugged it into the line for the fax machine (which I new was analog).  It completed it’s first call and then asked me to setup the A/V sources.  I go back to try to tell it that I want to specify my sources, since specialized satellite wasn’t one of my options.  It forces me to make the 10 minute setup call again because I transitioned back before the call to change the sources.  I get to the same screen and eventually turn the unit off and take it back to the room where the satellite is connected.  When I plug it back in it forces me to go back through the setup again — including the phone call … which I can’t make because the phone is in another room.  (Are we beginning to see the insanity?)

      So I decide I’ll bring it home where I have phone and video together and then move it back to the church.  That’s great.  I start the process all over and get through the first call and the setup relatively quickly.  (I was doing other things at the same time.)  Then it goes to make a second call.  After the third failed attempt I replaced the relatively long phone cord with a short cord.  It’s still not working.  Each attempt takes five minutes or more because it doesn’t restart the download and in fact it does a cleanup activity prior to starting.  Needless to say it’s a painful experience.  I have Vonage for one of my phone lines, the one I was using.  So I eventually tried the other line and it worked … and at the end it says that the unit will be working for between four and eight hours and I shouldn’t unplug the system until it’s done.  It doesn’t indicate how I will know if the unit is done, nor does it indicate if there’s a safe way to power down the system that won’t cause any issue.

      What irks me most about this whole situation is that less than a dollar could have put a flow chart of setup activities in the box.  Something that would have shown me the steps I’d need a phone line for, the overall process, and how to deal with common issues — however, that level of thought wasn’t put into the out of box experience — in a company that spends so much time working on user interfaces, ascetics, and other “user touch“ aspects.  It’s unfathomable that they wouldn’t put more thought into the out of box experience.

      I’m now sitting with a Tivo unit on my desk that needs to go back to the church.  I’ve invested hours getting the unit to work for something that frankly should have just powered on, started up and let me use it as a glorified VCR without any of the issues I ran into. 

      By contrast, I’ve had a replay TV unit for three years now.  The out of the box experience was easy. I had the option of using either a phone or the network.  As I remember it, there was a basic set of instructions for what was going to happen and what I needed to do.  It was an extremely installation…

      Now I need to see if I can figure out how to get the unit to tape from the satellite feed back at the church or if I’m not done dealing with the setup process. At least I can connect it to the network, if I can figure that out…

    • #3135094
    • #3077771

      Lunacy has a name: OOP Is Much Better in Theory Than in Practice

      by rlbogue ·

      In reply to Not fit for print

      I was doing more digging in the area of software development improvement and stumbled across the article “OOP Is Much Better in Theory Than in Practice” by accident.  (It was referred to by a Design Patterns/GoF anniversary article I was reading.) 

      While I believe that Richard Mansfield has a few solid points (like few people understand OO, it’s more intellectually challenging than procedural code (my words), etc.)  However, I fundamentally disagree that OO is not the right way for every mainstream business application to be written.  I understand that real-time systems, operating systems, and a variety of other specialized applications shouldn’t use OO as their fundamental design foundation, but in just about every other case, the benefits seem to far out weigh the down sides.

      This is just a reminder to me that we have a long way to go to get everyone to understand not only the how of OO but the why as well.

    • #3254339
    • #3254340

      Article: The best developers are built not bought

      by rlbogue ·

      In reply to Not fit for print

      In reading about agile development, I’ve been struck by the fact that both traditional software development techniques and agile methods rely upon highly skilled developers to ensure success. It’s no wonder that there’s a focus on the best developers given that it’s generally accepted that the level of performance for developers with similar experience can differ by a factor of ten or more. A great deal of development is still done in what is called “hero mode” development, where a developer or a small group of developers essentially will the software into existence through their dedication and tenacity.

      So while the evidence is overwhelming that you need good developers, the question remains, where do you get them?

      http://techrepublic.com.com/5100-3513_11-6038687.html

    • #3254109
    • #3091504

      Presentation: The Impact of Coding Standards and Reviews on Quality

      by rlbogue ·

      In reply to Not fit for print

    • #3091448

      Beta: Active Directory Redirect Web Part

      by rlbogue ·

      In reply to Not fit for print

      I just completed a web part that will redirect a user to the URL located in their Web Page property of their active directory account.  (wWWHomePage)  This is useful for directing users to their personal home site on SharePoint.  You can create a site called home, drop the web part on the site and then when users hit the page they are sent to their home.

      Send me an email if you want to beta test it.

    • #3091340

      DLLCache Folder

      by rlbogue ·

      In reply to Not fit for print

      I’ve run into the DLLCACHE folder twice in the span of three weeks so I thought I’d post a link so that people can find out where they can find out more about it, and particularly more about containing it’s size.

      http://www.techspot.com/tweaks/wfp/print.shtml

      DLLCache is designed to protect you but it has on occaision chosen to take up nearly every available byte of free hard drive space.

      Rob

    • #3090796

      GROK – A Definition

      by rlbogue ·

      In reply to Not fit for print

      While giving a recent presentation (I did two this week), I mentioned the word GROK and I mentioned I didn’t know where it came from only that it seems to be “hip”.  (A word which is no longer “hip” itself.)  My working definition was that it was to completely understand, to take into one’s self.

      One of the gentlement in the audience was kind enough to mention that it came from a Robert Heinlein book, Stranger in a Strange Land. A quick search and I came up with this.  It’s a much more complete definition than the one I was using.

      Was I the only one on the planet who didn’t know where GROK came from?

    • #3090719

      Retrospective – Media

      by rlbogue ·

      In reply to Not fit for print

      Recently I decided to take a photo for a presentation about information overload.  I’ve submitted it to IStockPhoto.com when (and if) it’s accepted it will be in my profile.

      The interesting part was looking back at the media I’ve used over the years since a lot of it made it into the photo…

      • 5.25“ Floppy disks (Commodore 64, PCs, etc.) [Didn’t make the photo]
      • QIC Tape (Of a dozen or so capacities — remember Jumbo?) [Didn’t make the Photo]
      • 3.5“ Floppy disks
      • 4 MM tapes (2GB, 4GB, 8GB, 12GB, 20GB, etc)
      • ZIP Drive
      • Jaz Drive
      • 8MM tapes (5GB, 7GB, etc.)
      • CD-ROM/CD-RW
      • DVD/DVD-+R
      • Magneto-Optical (1GB, called MO)

      I also enjoyed cleaning up wondering why I was even bothering to keep the ZIP disks since I carry a 1GB miniSD card with me in my phone at all times and generally have 512MB of USB thumb drives too.  The MO is cool to have around since it’s rare, but there’s positively no reason I can think of to use the ZIP drive in today’s market.

      The only reason I kept the floppies was because occaisionally I have to flash a motherboard BIOS.  How about you what are you holding on to?

    • #3132742

      Book Review: Micro-ISV

      by rlbogue ·

      In reply to Not fit for print

      When I blogged about Software that Sells: A Practical Guide to Developing and Marketing Your Software Project I commented that there wasn’t much information that was in the book that I didn’t already know.  The guide was really very light on details.  Micro-ISV: From Vision to Reality is a very different story.  I found all kinds of things in the book that were interesting.

      I rarely “dog ear” a book these days.  I make it a point to have a pad of paper and pen with me when I’m reading a book.  That’s mostly so I can record my thoughts.  Sometimes I’ll stop reading and start frantically scribbling notes.  Anyway, it’s lead to a lot of books that don’t get “dog eared.”  I even have tape flags that I use to mark what page I’m on — thus no “dog earing.”

      However, I haven’t even made it through all of the pages I “dog eared” in Micro-ISV.  There seemed to be a new web site or product that I didn’t know about on every page.  Admittedly Micro-ISV will have a relatively short shelf-life in terms of it’s value because web sites change and companiese go out of business.  However, for now, it’s a great reference for those who are struggling to get a product company going.

      The other interesting thing about the book is that it has a great number of interviews in it.  Real people with real problems not unlike your own talking about them.  All in all, a good read.  (I suppose it doesn’t hurt that the author is a former reporter.)

    • #3132743

      Getting Jr. Developers to Review Sr. Developers Code

      by rlbogue ·

      In reply to Not fit for print

      Ben Fulton was at a recent presentation I gave on the Impact of Coding Standards and Code Reviews on Quality while reviewing some of my referrers I came across a link to his blog.  (Yes, I do occaisionally go into my referrers, mainly to thank people for the link — thanks Ben.)

      The one question that he raised on his blog that I didn’t fully understand during the presentation was “How do you get a Jr. Developer to review a Sr. Developer’s code?”  Here are a few of my thoughts on this…

      1) It’s a lot about personality and relationship.  If you make the developer understand that it’s not about experience or position and is just about working together as a team it gets easier.  I find that it starts to become natural after the culture shifts towards people doing reviews as a habit.  Trying to make the Jr review the Sr developers work as the first thing is a bad idea.

      2) It doesn’t have to be a formal code review to have value.  I can’t say that the majority of times that I hand code over to a Jr developer that they do a full code review.  However, I do make it clear that it’s their name that’s checking it into source control so they’re responsible for it.  If I make a mistake they will be held to fixing it by their peers.  It’s a part of the team commitment.  So they may not send me back a complete set of comments, however, my hope is that they at least read the code.

      3) If you can’t get comments at least get a read.  Code reviews seem to work based on a whole bunch of factors.  Simply reading each other’s code makes everyone better.  It helps you understand what the other members of the team are working on and exposes potential descrepancies between your interpretation or undertanding and theirs.  This is a good thing.

      At any rate.  Good luck with getting code reviews to work in your organization.

       

    • #3132740

      Book Review: Professional .NET 2.0 Generics

      by rlbogue ·

      In reply to Not fit for print

      I was trying to post a comment today to check out a book — a book that I had read and thought I had blogged about but apparently I blogged about it in a dream.  (Yea, I know sick)

      The book is Professional .NET 2.0 Generics while I can certainly tear apart some of the mechanics of the book, overall it’s a thorough coverage of the topic both from a breadth and from a depth perspective.  I remember learning more about how the CLR works and the impact of a compile time vs. run-time type generation than I thought possible.

      If you’ve got more than a passing interest in generics you should check it out.  You never know, you may just become the generics expert at your organization.

    • #3132741

      Ever run into Bidi?

      by rlbogue ·

      In reply to Not fit for print

      One of the interesting acronyms that I have run into in SharePoint is Bidi.  I never really knew what it was  and frankly I put into the category of “I hope I don’t have to know.”  I mean really, there are so many things you HAVE to know in SharePoint to get anything done, can’t I get by without knowing what BiDi is?

      I found out the answer is no, I don’t have to know what Bidi is … until I go to multi-lingual sites.  I stumbled across it in a blog post for IE.

    • #3102961

      Presentation: Tips and Tricks For Recovering a Rogue IT Project

      by rlbogue ·

      In reply to Not fit for print

      Tonight I gave a presentation to the TechPoint IT Professional Peer Group titled “Tips and Tricks for Recovering a Rogue IT Project”  It was a great open discussion with 25 IT professionals about project management and the traps we all fall into.  I’ve attached the presentation so that everyone can get a copy if they would like it.

    • #3103360

      Jupiter Media SharePoint articles

      by rlbogue ·

      In reply to Not fit for print

      I do a fair amount of writing for Jupiter Media.  They have a large number of sites which cover a complete range of technical topics.  One of the sites, Intranet Journal, has an index page to the SharePoint content that they have.  I reference it all the time to people because it’s a great way to see several people’s thoughts on SharePoint in one spot.  The url is http://www.intranetjournal.com/sharepoint.  It’s simple and something I can remember.

      From there folks can find my articles and the articles of other folks who’ve written on SharePoint at any of the Jupiter Media sites.

      … now I have one less random thought I have to hold in my head.

    • #3102272

      Book Review: Peopleware, 2ed

      by rlbogue ·

      In reply to Not fit for print

      I have to say that I was a bit embarrassed to tell people I was reading Peopleware: Produtive Projects and Teams.  It wasn’t because the material wasn’t good — it definitely is.  It’s not because I felt squeamish about the title — I didn’t.  However, I did feel like I should have somehow managed to have read it before now.  With the original edition written in 1987 and the 2nd edition written in 1999 — I should have read it before now.  Alas, I hadn’t.

      Peopleware is, as the title suggests, about people.  It’s about how people and software development fit together.  It’s not another methodology, it’s not a set of programming tips.  It is, however, some interesting insight on how people work, don’t work, and work together.  It has hints of Dilbert in that it talks about the things that managers can do to effectively eliminate productivity within a group.

       

      I collected a few quotes that I believe highlight the value of the book:

       

      • “The major problems of our work are not so much technological as sociological in nature” (p4)
      • “The statistics about reading are particularly discouraging.  The average software developer, for example, doesn’t own a single book on the subject of his or her work, and hasn’t ever read one.” (p12) [Ouch]
      • “People under time pressure don’t work better; they just work faster.” (p18)
      • “Speaking of software, that industry has accustomed its clients to accept in-house developed application programs with an average defect density of one to three defects per hundred lines of code.” (p21)
      • “People just don’t work effectively when they’re locked into a no-win situation” (p28)
      • “The manager’s function is not to make people work, but to make it possible for people to work” (p34)
      • “People can keep track of only so many human interactions” (p137) [This is particularly interesting if you account for the maximum practical size of a group of people (see The Tipping Point) and the fact that most Agile methodologies work best with smaller groups.]

       

      The book read, to me, as the background information one needs to understand why agile methodologies work.  It’s sort of like reading a book about the internal combustion engine when you drive a car to work every day.  You don’t have to know how the car runs, but when you break down on the side of the road it comes in really handy.

       

      If you’ve not managed to make it through this classic work and you work with others as a manager or as a team member — you should.

    • #3102132

      Thoughts on Optimisim and Pessimism

      by rlbogue ·

      In reply to Not fit for print

      Thomas Edison was once asked about his failures in creating the light bulb and his response is often quoted as “We now know a thousand ways not to build a light bulb.”  That’s a dedication to staying positive that few (if any) of us could muster these days.  It’s a passion for creating the light bulb that would not be discouraged.

       

      Through some of the reading I’ve been doing lately, I’ve been consumed with thoughts about how you perceive the world around you will drive how the world around you becomes.  This probably isn’t true in the literal sense (however, I wouldn’t discount it.)  What is true, however, is that we have two types of people: The optimist, always believing that there is more than their really is – but happy in that thought, and the pessimist, always believing that there is less than there really is – and miserable or fearful in that thought.

       

      The classic is to place a glass with water equal its total capacity and ask if it’s half empty or half full.  The optimist is supposed to answer that the glass is half full while the pessimist answers that it is half empty.  A few severe pessimists, and I know some, would tell me that the glass may only be half empty now but due to evaporation, perhaps a crack in the glass, unidentified forces, etc., they’re sure that the glass will eventually become empty.  (It’s about that time that I reach over and drink it to prove their point.  It’s a fun thing to do.)

       

      So there’s nothing new here.  You already have heard these things.  But what you may not instinctively realize is that optimism is its own reward.  Sure, I have to accept disappointment.  I’ve set the bar higher. I’ve decided to expect that things will go well, that life is ultimately good.  In return, I get to delude myself into a happy state.

       

      And, of course, the “storms” will come, as they always do to try to convince me that the world is an ugly place.  And at those moments, I’m frustrated, disappointed, and worse.  However, that happens so rarely, that I get most of my days filled with happiness.

       

      The mother of one of my friends is a pessimist, the kind that believes in evaporation, she recently shared with her daughter – “See, I was right.” It was in reference to some pessimistic “The sky is falling” prediction.  The answer back was the classic answer from an optimist: “So what, if you always predict something bad will happen – eventually you’ll be right about one of them.”  In other words, the optimist doesn’t have to assume that everything will always go right, they can be realistic about bad things happening, and they just believe that it’s a small proportion of every day life.

       

      Fairly recently we were at a zoo and had our son’s wagon stolen.  We were able to recover it in relatively short order, however, its impact on our son’s small mind was fascinating to watch.  It had never occurred to him that someone would steal.  Why would you take something that wasn’t yours?  This plus trying to figure out both mommy and daddy’s reactions was putting his poor little mind into overdrive.  The end result was we got the wagon back.  He still vividly remembers the incident (perhaps too vividly.)  He has changed his behavior.  He still takes his wagon to the zoo; however, we keep a closer eye on it.  He didn’t give up.  He didn’t refuse to enjoy the zoo just because a bad thing happened – he simply is more aware of the possibility of a bad thing happening and tries to plan for it as best he can.

       

      So my parting thought, a quotable, is simply this:

       

      “Failure is only not trying because there is no hope of success.  Persistence guarantees eventual success through hope.”

       

      Be an optimist, what do you have to loose?

    • #3273033
    • #3088405
    • #3148145
    • #3148146

      What is Architecture?

      by rlbogue ·

      In reply to Not fit for print

      Arno Nel asked the question on his blog “What is Architecture?” This is my response…

       

      I have a whole series on the various roles in software development on Developer.com, the software architect one is at http://www.developer.com/mgmt/article.php/3504496.

       

      However, my thoughts on your statements are …

       

      1)      On Architecture is 50% business, 50% tech — I’d say that architecture is one part art (elegance, simplicity), one part facilitated visioning (getting a common idea of what is going on), and one part conversion (converting requirements into design).  While it’s true that business and technology are both required, I’d say that the important aspects are not well respected with this point of view.  Knowing how to facilitate people coming together, knowing how to convert requirements into design, and knowing how to maintain simplicity in the face of complexity are a much more important perspective.

      2)      On The Architected doesn’t decide w[h]ether or not to use DataGrids – I don’t know that I can agree to this statement in every case.  It depends upon what the solution is and what is necessary.  She may decide that DataGrids are critical to some reusability that is desired and could specify them.  However, in most cases, you’re right. In most cases shouldn’t be any reason why an architect would specify the use of DataGrids or not.  Think of it this way, a traditional building architect doesn’t generally specify the supplier for a bolt – only how strong it must be.

      3)      On The architect doesn[‘]t care about coding standards – I heartily disagree here.  He doesn’t care WHAT is in the coding standards but he does that they exist.  In the same way that a building architect doesn’t care what kind of light fixtures are used in the building but does care that they all match (consistency) or coordinate (complimentary).

      4)      On The architect doesn[‘]t care about reading UML – Here to I heartily disagree.  I don’t disagree that the architect won’t read all the UML, however, I believe the architect should do “drive bys” of what is being constructed.  That includes reviews of the UML and any other supporting documentation being used to construct the actual solution.  If the point is that they don’t care whether it’s UML or something else – I disagree again.  The architect’s time is overcommitted.  If the architect understands UML then UML should be used to facilitate communication (reduce the cost) and to make communications more effective.

      5)      On The architect doesn[‘]t care about Agile/RUP/MSF etc. – Again, I disagree.  The architect needs to understand the process being used to know how to insert themselves into the process in a way that is both timely and respectful of the process.  Choosing an approach that they are familiar with is important.  Also, they may decide that to achieve the objectives one may work better than another.  For instance, an agile approach will work better with poorly understood requirements.  RUP will work better with risky components to the project, etc.

      6)      On The Architect translates IT to Business – While I agree that the statement is true I believe it misses the fundamental truth that an architect guides a conversion process from raw data into a solution.  Also, I’d argue that the statement even in it’s form here should be reversed.  They help to translate the business problems into IT solutions (not IT into business.)

       

      I think an interesting question is how does a solutions architect differ from a building architect?

    • #3148147

      Article: Not just a buzz word, virtualization technology can improve your app development

      by rlbogue ·

      In reply to Not fit for print

      It used to be that we talked about DLL hell. This was a place where everyone who was evil enough to try to run too many applications on their computer ended up. One day you would install a new application and you would be instantly transported into DLL hell. You would try replacing one DLL after another. You would move DLLs to individual application directories. In the end you would end up feeling as if you were just shuffling the DLLs, trading one problem for another.

      While we’ve made some progress from the days when DLL hell was inflicted on most developers at some time or another, we have not fundamentally resolved all of the issues that are caused by trying to take one machine and get it to serve multiple masters. A more current day challenge might be trying to run multiple versions of Windows on one hard drive, or Linux and Windows side by side on multiple partitions. No matter where we are in the technology lifecycle, we’ve seen how we can try to get one system to do too many things and have had to live with the challenges. This is where virtualization technology comes to the rescue.

      No longer do you have to mix two applications that don’t get along together just because you only have one PC on which to work. Virtualization technologies allow you to run multiple, independent operating systems which have the ability to be isolated completely from other processes running on your PC.

      http://techrepublic.com.com/5100-3513_11-6066857.html?tag=sc

    • #3148148

      Article: .NET Offers a “First Chance” to Squelch Performance-killing Hidden Exceptions

      by rlbogue ·

      In reply to Not fit for print

      Processing exceptions in any language is expensive. The process of capturing an exception and rolling it into a package that can be processed by code requires a stack walk—basically looking back through the history of what has happened—and that requires a lot of processing time to complete. In .NET software development we sometimes talk about boxing and unboxing of variables and how that can consume a great deal of time in a program—and it can. However, the amount of time necessary to process an exception dwarfs the time necessary to box and unbox a variable. (If you want to know more about boxing and unboxing you can read about it in the article “Boxing and Unboxing of Value Types in C#on CodeGuru.)

      Despite the fact that exceptions are expensive to process they are positively a great thing for debugging applications and making software more reliable. The challenge is when exceptions are used incorrectly; specifically, when they are used to respond to normal conditions instead of exceptional conditions. Generally when this happens the layers of software above the layer generating the exception start “eating” the exception—because nothing is wrong (more on eating exceptions in a moment)—and manually return to normal program flow. This, however, leads to subtle performance issues that are difficult to find. Running a profiler on the code can show where performance is being impacted, however, there’s a quicker and simpler way to find performance problems like these—or rule out exceptions as a potential cause of performance issues.

      Using first chance exceptions in the debugger is a way to ferret out these hidden exceptions that your application is generating so that you can go back and prevent them from happening in the first place. The more exceptions you prevent, the faster your application will run. First chance exceptions are exposed via Visual Studio and can be leveraged in any language that compiles to the CLR.

    • #3148149

      Stupid ASP.NET Tricks (Don’t try these at home)

      by rlbogue ·

      In reply to Not fit for print

      I’ve been struggling with ASP.NET lately and wanted to offer up two things not to do …

      1) Try to dynamically load another instance of the same user control from within a user control — ASP.NET gets very confused and starts loosing track of your controls in inexplicable ways.  All of the sudden the label in the partially defined class will unexpectedly be null.  (By the way, I was trying to draw “sublines“ in a shopping cart — things like free accessories I wanted to stay with the parent line.)

      2) Load dynamic controls in a repeater — For some reason still unknown to me, if you dynamically add controls to a repeater (such as user controls into table rows) the post back values never come back … and the controls aren’t represented in the control tree.  I could just be missing something but I’ve decided it’s a bad idea…

    • #3148150

      Book Review: Web Hacker Boot Camp

      by rlbogue ·

      In reply to Not fit for print

      “What evil things lurk inside the hearts and minds of men… “

       

      When I was still in high school – many moons ago – I remember a programming competition. We were supposed to create a program that calculated the length of a line in a triangle (or some such trivial problem). To test your application once you said it was done, the judges would often enter a negative number for the length of a line. On a whim we had put a trap in for that particular condition while building the program. It was this test that helped us complete the challenge.

       

      Putting testing into our code today for bad values seems commonplace. We test for values out of range and have validation controls and all sorts of things that lead us toward developing more robust solutions. However, despite all of our advances in the areas of validating user input, we as an industry still struggle with security issues in our applications.

       

      While the news may be focused on the next new exploit of Windows – because that has mass appeal –  we are still finding that our applications have their own flaws in them that can be exploited just as easily as someone exploiting a flaw in Windows. Actually, much of the time the mistakes in our applications are much more trivial to reveal.

       

      Web Hacker Boot Camp is a journey through the mind of a hacker. It reveals how hackers do their job and what their techniques are. It stops short of telling you precisely what to do to make your application secure, but it certainly provides you with the information you need to think about to make the application secure.

       

      There’s good content in this book if you’re interested in how to fortify your application against attack. The only downside is that you’ll have to look past some editing and layout issues to get the information out of the book.

       

      If you want to discover how you could lose control of your web servers because of flaws in your application code, Web Hacker Boot Camp is definitely a book to get.

    • #3148151

      Article: When Less Is More: User Interface Reusability, Part 1

      by rlbogue ·

      In reply to Not fit for print

      With increasing pressure on software development teams to deliver more, better, faster, it is no wonder that finding ways to capitalize on reusability are more important today than ever before. We all need to do more with less and reuse is the panacea of doing more with less. Once the initial investment has been made, little or no effort must be consumed to use the work again.

      While software development as an industry has focused on reuse through structured programming, object oriented programming, service oriented architecture, and several other techniques little thought or effort has been applied to the process of finding opportunities for reuse in the user interface. More often than not each application’s interface is seen as completely independent, having no need to be reused for any reason.

      However, organizations of all sizes are finding needs to develop and reuse small components of applications in an effort to minimize costs, increase reliability, and allow for rapid changes to the platforms their technology lives on. This is why there is a need to create reusable user interface components. In this article, the first of two parts, we’ll explore why user interface reusability is important, how it’s been overlooked, and challenge you to develop a strategy for dealing with the need to make user interfaces reusable to reduce costs.

      http://www.intranetjournal.com/articles/200605/ij_05_05_06a.html

    • #3148152
    • #3148144

      SharePoint Gets Search Analytics

      by rlbogue ·

      In reply to Not fit for print

      Microsoft’s SharePoint Portal Server 2003 was sold into a large number of organizations based solely on the strength of the search tool. Organizations hungered for a way to find the data they had generated.

      Structured data such as invoices, products, and shipments may have been easy to find in the applications designed for that data, but the growing mountain of documents seemed to make the unstructured information that you were looking for perpetually out of reach.

      Search in SharePoint made significant progress in its ability to connect users with the unstructured information that they were seeking. But the effectiveness of searches depended upon the skill of the searcher and the alignment of the terms that the searcher used to the terms in the documents. The world of search analytics was still very foreign to most organizations. Thankfully, the next version of SharePoint Search with its focus on relevancy will also include reports that allow you to see the effectiveness of the searches users are executing.

      Microsoft Office SharePoint Server 2007 is a part of the Office System and is set to debut sometime in late 2006 or early 2007. Microsoft Office SharePoint Server 2007 includes numerous enhancements designed to improve search relevance, Internet usage, content management scenarios, and many other features which were shared this week at the SharePoint Conference in Bellevue, Wash., this week.

      In this article you’ll learn about the basics of search analytics, what you can do today to improve your search results, and what to expect in Microsoft Office SharePoint Server 2007.

      http://www.intranetjournal.com/articles/200605/ij_05_18_06a.html

       

    • #3146811

      WebCast: Creating Reusable User Interfaces

      by rlbogue ·

      In reply to Not fit for print

      In case you missed it, I did a web cast yesterday on reusable user interfaces.  It’s now available as an on-demand web cast at the following URL:

      http://www.jupiterwebcasts.com/_archives/2006/webcast_05-22-06/index.html

       

    • #3156094

      File and Directory Rename tool

      by rlbogue ·

      In reply to Not fit for print

      I’ve been migrating most of a clients files (but not all) to Windows SharePoint Services 2003 to give them version control and better access.  One of the things that I had forgotten about was that SharePoint has a much larger list of characters it doesn’t like in file and directory (folder) names.  You can look at the KB905231 for details.

      I wrote a quick command line utility which will process an entire directory structure and make whatever replacements you would like in the file and directory names.  It’s useful for fixing files before they go into SharePoint but since the replacements are configuration based you could easily use it for corporate name changes or anything else where you need to do a quick set of replacements on files.  If you want to try the tool send me an email and I’ll get you a copy for evaluation.

    • #3157972
    • #3165254

      Advisor Summit on SharePoint, August 27th-31st, Phoenix

      by rlbogue ·

      In reply to Not fit for print

      I’ll be speaking at Advisor Summit on SharePoint August 27th-31st in Phoenix, AZ.  The sessions will be:

      • Get your SharePoint Project Started Right – SharePoint projects can be so exciting that they skip over the requirements gathering needed to succeed. In this session you’ll learn how to get what you need to have a successful project. You’ll learn techniques for clarifying terminology and for getting the most out of prototyping. You’ll get real world tips for recovering from bad requirements. Whether your project is already off track, or you’re just getting started and are concerned, this session will help you succeed. You’ll take away a worksheet to help make sure you get all the important requirements for your SharePoint project. (SMS201)
      • Use SharePoint Portal Server Search – Locked away on your file servers, in your ERP systems, and in your custom applications is the collective knowledge of your organization. Microsoft SharePoint Portal Server (SPS) can peer into these repositories to collect all of the knowledge and make it accessible. In this session you’ll learn how to enable SPS to search all the information in the organization. You’ll learn the details of how SharePoint search works and how to configure it. You’ll see how to create advanced search criteria in SPS. If you’re struggling with search, come and learn how to get control of it. (SMS204)
      • SharePoint Backup and Restore – Critical information goes into SharePoint each day. Recovering that information in the event of a disaster is essential. In this session you’ll learn how to back up the information so you can recover it. You’ll learn about internal and third-party backup solutions. You’ll also learn to create a backup strategy that provides the most recovery options. If you can’t afford to loose your data you can’t afford to miss this session. You’ll take away a solid understanding of your backup options, benefits and weaknesses. (SMS309)

      I hope to see you there!

    • #3144144
    • #3141478
    • #3145953

      Article: Work Web Part Magic Inside of ASP.NET

      by rlbogue ·

      In reply to Not fit for print

      Microsoft released SharePoint to the market back in 2000/2001 and, in doing so, began a shift in perception about how Web applications are built. The change was slow at first and has yet to take over the way we build applications completely; however, the change has started.
      Rather than the old way of building page after page of copied content, this change moves toward a development model for Websites that focuses on reusable, connectable, and user-configurable components that are assembled quickly in different ways to create the solutions that business users need. In the Sharepoint world, these reusable components are called Web parts.

      Now, ASP.NET 2.0 has integrated Web parts and the core concepts behind it: the idea that you build applications from components and not as page after page of similar functionality. This core approach to software development has the potential to accelerate your business by allowing users to assemble their own software solutions—solutions that normally they would not be able to create on their own.

      In this article you’ll learn the core concepts behind an ASP.NET 2.0 Web part, how this structure relates to (and is better than) Windows SharePoint Services 2.0 (and Microsoft Office SharePoint Portal Server 2003), and how to build your own Web part page.

      http://www.devx.com/asp/Article/31696/

    • #3145954

      Presentations at ITEC 2006

      by rlbogue ·

      In reply to Not fit for print

      A few days ago I delivered three presentations at the Indianapolis ITEC event.  The first presentation was an introduction to Windows SharePoint Services. The other two presentations, listed below, were on wireless networks and mobility.  I’ve uploaded those two presentations to make them available to you here.

      Admittedly the best part of the presentations was the interactive conversation that we had during the presentations, however, at keast the slide decks may be of some value in helping you understand the basics.

    • #3141815
Viewing 187 reply threads