March 2007 - Posts

How to programmatically add a field to all views in a SharePoint list

Today I had a need to add a new field to multiple lists each with multiple views and to group by the new column in each of the views.  There were about 6 lists and 12 or so views on each list and doing this through the interface, although possible, would have been tedious, error prone and very boring (especially for the client since he was doing it).  So I decided to automate the process.  I added the field to each of the lists manually, although I could have automated that too :).  I then wrote a simple console application that accepts a few parameters, namely the new fields internal name, the site collection URL, the web path, the list or library name, the position of the field, whether or not to group by that field, and whether or not to collapse the groups (if grouped).

Here is the main function.  I have a few helper functions that gather input but this is the meat an potatoes.

 

static void Main(string[] args)
{
  // if all input is valid then proceed
  if (true == GatherInput())
  {
    // get a reference to the site collection
    using (SPSite site = new SPSite(siteUrl))
    {
      // get a reference to the site
      using (SPWeb web = site.OpenWeb(webPath))
      {
        // get a reference to the list or library
        SPList list = web.Lists[listLibName];

        // iterate though all the views in a list
        for (int i = 0; i <= list.Views.Count - 1; i++)
        {
          // get a reference to a view
          SPView view = list.Views[i];

          // only do this for visible views and ignore the useless explorer view :)
          if (view.Hidden == false && !(view.Title == "Explorer View"))
          {
            // retrieve the names of all of the fields used in the view
            StringCollection viewFields = view.ViewFields.ToStringCollection();

            // remove all of the fields from the view
            view.ViewFields.DeleteAll();

            // create the new field to insert
            SPField newField = new SPField(list.Fields, newFieldName);

            // add each of the fields back into the view
            // while adding the new field at the desired location
            for (int k = 0; k < viewFields.Count; k++)
            {
              SPField field = new SPField(list.Fields, viewFields[k]);

              if (k == Convert.ToInt32(fieldOrdinal))
              {
                view.ViewFields.Add(newField);
              }
              view.ViewFields.Add(field);
            }

            if (true == groupByField)
            {
              // group by the new column, collapsing the group if necessary
              string query = string.Empty;
              query += "<GroupBy Collapse=\""
              if (true == collapseGroup)
              {
                query += "TRUE"
              }
              else
              {
                query += "FALSE"
              }
              query += "\">"
              query += "<FieldRef Name=\"" + newField.InternalName + "\" />"
              query += "</GroupBy>"
              view.Query += query;
            }

            // update the view
            view.Update();
          }
        }
      } 
      site.RootWeb.Dispose(); //this was opened implicitly when we referenced SPSite and needs to be disposed.
    }
  }
}

Where in the world is the RSS Viewer Web Part

I needed to put an RSS Viewer web part on a page but could not find it.  I opened the feature folder and did a search for rssviewer to see if anything came back.

I am a minimalist when it comes to SharePoint and would rather not activate features that are not being used.  This web part becomes available when you activate the Office SharePoint Server Standard Site Collection features Site Collection feature (I needed it available for all sites).  This feature actually activates a lot of features, too many too mention, but if you need the RSS viewer web part you need to activate this feature or its Site Feature counterpart (for a single site only), the Office SharePoint Server Standard Site features feature.

These features are not activated by default, which is very pleasing to me. :)

Now if I could just get it to work through a proxy server!  Ideas welcome!

[EDIT] - Well I actually looked a little harder and found this post by Adam Hems.

[EDIT] - That post would probably work if the proxy server did not require authentication (mine does); that said, ideas welcome!

 

RSS Viewer

SharePoint 2003 - SharePoint 2007 Migration Tool Recommendation

I started on a project here in Greenville, SC this week.  The project has 2 primary goals.  Goal #1 is to migrate the existing WSS v2 content to the new Office SharePoint Server 2007 platform.  Goal #2 is to create a site for the internal legal team to use that has a few requirements, most of which are provided by SharePoint 2007 out of the box.  I have not dived into the implementation of goal #2 yet but am well into goal #1.

In the process of planning the migration I have had the opportunity to research and compare a bunch of 3rd party tools, as well as give some of the "upgrade" paths some thought.  Personally, I am not a big fan of the "upgrade" paths for this particular project.  An in-place upgrade is out of the question since my client only has a single server and if this process were to fail we would have to rebuild from backups.  A side by side migration is possible, but I simply do not trust the concept.  I have not tried it yet but again, I have that "gut" feeling if you know what I mean.  After looking at these, and a few other options, and discussing the clients needs, it became apparent to me that all the client really cared about was the actual content.

So my search began for a tool that could move all of our content and leave the look and feel alone.

Enter Metalogix and their List And Library Migration Manager for SharePoint tool.  I contacted them, discussed our needs and explained that I would like to evaluate their product.  It seemed, in my mind anyway, that it did exactly what I wanted, move content only.  I was promptly provided with an evaluation license key and started my evaluation.

This tool does exactly what it says it does.  It moves lists and libraries, including all the meta data columns, to and from both 2003 and 2007.  It has batch capability so that you can "queue" up a number of lists and libraries, and execute the migration all at once.  It logs any errors, warnings or issues it finds.  The tool allows you to view and edit the individual items in the lists and libraries as well as the properties of the lists and libraries themselves.  The tool also has the capability to retain the ModifiedBy and CreatedBy users (assuming both servers are in the same domain), as well as the Created and LastModified dates, with the installation of an additional service on the target machine (that they supply).

Perhaps the BEST and most enticing feature in my opinion is that the tool uses ONLY the SUPPORTED API's supplied by each of the products (of course, I could not prove this since I do not have access to the source code, but that is what they advertise).  It uses a combination of both the web service and RPC calls to perform its work.  What that means is you DO NOT have to install this tool on any of your SharePoint servers (the service to maintain the Created and LastModified dates does need to be installed on the target machine however), it can be installed on your laptop or workstation and work remotely, so long as you have access to the SharePoint servers involved in the migration.  Actually, the best feature is probably the fact that they are a Canadian company. :)

To top it all off I gotta say that the people I spoke with at Metalogix were exceptionally friendly and very helpful.  They are also very receptive to new feature ideas and if any bugs or issues arise to immediately call them.  Apparently there is quite a large demand for their product and they are releasing updates quite regularly that include additional features and functionality as well as the occasional bug fix I am sure.  Every product has bugs!  If I had to complain about something, it would be performance.  It is not as fast as I would like, but given that it has to moved each and every document and/or item remotely from one server to another, I don't expect it to be done with 2GB of content in 5 minutes.  I have been informed that they are trying to improve this in future releases.

So if you need to move content (lists and libraries) and don't care about look and feel, this tool is for you and in my opinion is worth every penny given the amount of time and money you and more importantly, your client, will save.

Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions RTM

Finally, the extensions are RTM.  You can get them here.

Get them while they are hot!

 

Overview

This release of the Visual Studio 2005 Extensions for Windows SharePoint Services contains the following tools to aid developers in building SharePoint applications:

Visual Studio 2005 Project Templates

  • Web Part
  • Team Site Definition
  • Blank Site Definition
  • List Definition

Visual Studio 2005 Item Templates (items that can be added into an existing project)
  • Web Part
  • Custom Field
  • List Definition (with optional Event Receiver)
  • Content Type (with optional Event Receiver)
  • Module

SharePoint Solution Generator
  • This stand-alone program generates a Site Definition project from an existing SharePoint site. The program enables developers to use the browser and Microsoft Office SharePoint Designer to customize the content of their sites before creating code by using Visual Studio.
The Tragically Hip - Atlanta - March 13th, 2007

Tonight Jody and I went out for a very rare and hard to come by date night.  The occasion you may ask was to see The Tragically Hip concert at the Roxy theatre.  We are both HUGE Hip fans and go see them each and every time they come to Atlanta, which is pretty much every other year or so.  The best part about the shows in Atlanta are the venues.  For those who don't know, the Roxy is not very big, I'm guessing that there were less than 1000 people there, plus half of the Atlanta Thrashers hockey team (I wonder why that is).  We got there just in time to completely miss the opening act, since we weren't interested, plus Lily (our daughter) was being stubborn with respect to going to bed tonight.  We were paying for our beer at the bar as the concert started.  It wasn't very long, lasting only about 2 hours.

It really is neat seeing so many Canadians all in one place.  Flags were waving and it was quite a sight, since to me, this band really reminds me of my roots.  I of course made the traditional phone calls to many people while I was there, holding up the phone and letting people listen.

On our way out, we walked by the sound guy and my eye caught his set list and I pointed it out to Jody.  She asked me if I wanted it and I said sure, so she went and asked him for it with a big smile on her face, and of course, since no one can really say no to her smile, she got it.

Here it is if anyone is interested!

Now off to bed to try and get some sleep!  I still have to work in the morning.

 

SharePoint 2007 - Master Page Picker

Ever wonder how to change the master page on a site or better yet, on a site collection and all of its subsites?  If you do it with SPDesigner they will each get stuffed into the content database (Yuk!).  Well I have certainly given it some thought and thankfully, Renaud Comte has as well and wrote a Feature that will do it for us.  It eliminates the need to customize (a la SPDesigner) by programmatically pointing your site(s) to a file system master page.

It's published on codeplex so be sure to check it out.

Office SharePoint Server 2007 - Forms Based Authentication (FBA) w/MySites Walk-through - Part 2

As promised, here is part 2 of my series on hooking up Forms based authentication on a SharePoint 2007 site AND integrating your web application with MySites and the Personalization features of Office SharePoint Server 2007.

I am going to assume that you have read and gone through all of the steps in part 1 of the series.  The steps below ARE dependent on part 1 and I will be making some references to it.  If you have not gone through part 1, I encourage you to read this entire post before trying to implement the solution.  There are quite a few caveats and very UNINTUITIVE steps.  Since none of this is documented (to my knowledge), I have to say that since it is undocumented, it may be unsupported as well.  What I can say for certain, that in my 2 or 3 support calls to Microsoft regarding this issue, I had given up on them helping me.  Essentially I was told on more than one occasion that "it's not supposed to work" or "it does not work".  Of course after those answers, I had to prove to myself that either it does work or support was right.  They do after all claim that this is "pluggable" authentication, and other than the obvious features, like Office integration, or SharePoint Designer integration, I expected all of the functionality to work.  The following is the fruit of my labor.  As a side note, this effort, although it may seem simple after you go thru the steps, took me about 5 weeks of nights and weekends trying to get the sequence of steps and the steps themselves defined.

One major disappointing caveat is MySite search.  Search works fine against the FBA site to which we have a "mirror" intranet version, like we do in our example, but unfortunately we do not have a Windows authentication version of each and every MySite.  I guess we could, technically, but really, that's not going to happen.  I have heard however, through a very reliable source that Microsoft is working VERY VERY hard on getting the SharePoint search crawler to be able to penetrate forms based authentication sites and just maybe, might have a solution in Q2.  I am optimistic about this and can't wait, then we really have a fully searchable FBA solution.

So here goes...

Assumptions

Like any good assumer, I am going to list all of my assumptions here.  If you think that anything is missing, please do let me know and I will update this list.

  • You have created and configured a Shared Services Provider (SSP) and can link to its setting page using either of the following two methods.
    • Click on the Share Services Provider's link in the left navigation in Central Administration.


    • Click on the Create or configure this farm's shared services link in the Office SharePoint Server Shared Services section of the Application Management tab in Central Administration, then select Edit Properties from the dropdown menu that appears when you hover over its name.




  • The SSP Administrative Site URL and the MySite Location URL are each on their own web applications.

     

    It is possible and sometimes desirable for some to locate their MySite site collections within the same Web Application of the site to which they are associated.  What I mean by this is that there are two very different ways in which to setup MySites and they are as follows.  Let's pretend for the sake of conversation, that our site is www.microsoft.com.

    Method #1 - The site www.microsoft.com is its own Web Application.  In turn, www.microsoft.com/mysite is where the MySites site collection is located.  The main benefit to this design is that since we are using FBA as our authentication method, the same cookie will work for both sites and we will not have to log into our MySite independently of logging into the main site.  The main drawback is that MySites will now be created in the same content database(s) that the www.microsoft.com Web Application is using.  This may be an issue when it comes to scaling and capacity planning.  Chris Johnson has outlined the steps needed to produce this scenario here.

    Method #2 - The site www.microsoft.com is its own Web Application.  In turn, my.microsoft.com is where your MySites site collection is located.  The main benefit to this is that MySites are stored in a separate Web Application and can be managed independently.  The main drawback is that since we are using FBA as out authentication method, we will have to log into our MySite separately, the cookie will not be shared.

    Microsoft's best practice dictates that you use Method #2, so that is what I have done in my walkthrough.
  • As indicated above, for the purpose of this post, my SSP Administrative Site URL is http://ossdev:23456/ssp/admin.
  • As indicated above, for the purpose of this post, my MySite Location URL is http://ossdev:23457.
  • You will NOT access the URL in the previous bullet until instructed to do so.  This has the potential to create problems, so please resist the urge.
  • You will NOT click on the MySite link until instructed to do so.  This also has the potential to create problems, so please resist the urge.

Update the Shared Service Provider Administrative Site's web.config File

The web.config file of the Shared Service Provider needs to be updated with the same information you placed into the web.config of your FBA web application.

Determine File Path to web.config.

  1. Open Internet Information Services (IIS) Manager.
  2. Expand Web Sites and select the Shared Service Provider's website, in my case, SharePoint_SSP_Default1 - 23456.  Yours will most likely be different so be sure you select the right site.
  3. Right click on the above website and select Properties.
  4. Select the Home Directory tab.
  5. In the Local path textbox take note of the entire string.  This is the folder on the file system that contains the web.config for the http://ossdev:23456/ssp/admin web application.  We will be updating this file next.
  6. Open Windows Explorer and browse to the folder noted in step 5.
  7. Make a backup copy of the web.config file.

Add Connection String

  1. Add the following connection string snippet immediately above the <system.web> tag.  Be sure to replace the bolded text with the appropriate values from your environment.

    <connectionStrings>
      <add name="AspNetDbFBADemoConnectionString" connectionString="Data Source=OSSDEV;Initial Catalog=AspNetDb_FBADemo;Integrated Security=True" />
    </connectionStrings>

Add Providers

  1. Add the following membership provider and role manager elements immediately inside the <system.web> element.  Again, be sure to replace the bolded text with the appropriate values from your environment.

    <!-- membership provider -->
    <membership defaultProvider="FBADemoMember">
      <providers>
        <add
          connectionStringName="AspNetDbFBADemoConnectionString"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          applicationName="/"
          requiresUniqueEmail="false"
          passwordFormat="Hashed"
          maxInvalidPasswordAttempts="5"
          minRequiredPasswordLength="1"
          minRequiredNonalphanumericCharacters="0"
          passwordAttemptWindow="10"
          passwordStrengthRegularExpression=""
          name="FBADemoMember"
          type="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </membership>

    <!-- role provider -->
    <roleManager enabled="true" defaultProvider="FBADemoRole">
      <providers>
        <add
          connectionStringName="AspNetDbFBADemoConnectionString"
          applicationName="/"
          name="FBADemoRole"
          type="System.Web.Security.SqlRoleProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>
  2. Save and close the web.config file.
  3. Perform an IISReset and verify that you can still access the SSP.

Update the MySite Host Web Application's web.config File.

The web.config file of the MySite Host Web Application needs to be updated with the same information you placed into the web.config of your FBA web application.

Determine File Path to web.config.

  1. Open Internet Information Services (IIS) Manager.
  2. Expand Web Sites and select the MySite Host website, in my case, SharePoint_MySite_Default1 - 23457.  Yours will most likely be different so be sure you select the right site.
  3. Right click on the above website and select Properties.
  4. Select the Home Directory tab.
  5. In the Local path textbox take note of the entire string.  This is the folder on the file system that contains the web.config for the http://ossdev:23457 web application.  We will be updating this file next.
  6. Open Windows Explorer and browse to the folder noted in step 5.
  7. Make a backup copy of the web.config file.

Add Connection String

  1. Add the following connection string snippet immediately above the <system.web> tag.  Be sure to replace the bolded text with the appropriate values from your environment.

    <connectionStrings>
      <add name="AspNetDbFBADemoConnectionString" connectionString="Data Source=OSSDEV;Initial Catalog=AspNetDb_FBADemo;Integrated Security=True" />
    </connectionStrings>

Add Providers

  1. Add the following membership provider and role manager elements immediately inside the <system.web> element.  Again, be sure to replace the bolded text with the appropriate values from your environment.

    <!-- membership provider -->
    <membership defaultProvider="FBADemoMember">
      <providers>
        <add
          connectionStringName="AspNetDbFBADemoConnectionString"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="false"
          applicationName="/"
          requiresUniqueEmail="false"
          passwordFormat="Hashed"
          maxInvalidPasswordAttempts="5"
          minRequiredPasswordLength="1"
          minRequiredNonalphanumericCharacters="0"
          passwordAttemptWindow="10"
          passwordStrengthRegularExpression=""
          name="FBADemoMember"
          type="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </membership>

    <!-- role provider -->
    <roleManager enabled="true" defaultProvider="FBADemoRole">
      <providers>
        <add
          connectionStringName="AspNetDbFBADemoConnectionString"
          applicationName="/"
          name="FBADemoRole"
          type="System.Web.Security.SqlRoleProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>
  2. Save and close the web.config file.
  3. Perform an IISReset and close all your browser windows, but DO NOT try and access this URL yet.

Assign FBA Admin User Personalization services permissions.

Remember in part 1, we created a handful of FBA users.  One of those users (spadmin) was created to be used as an administrator for our FBA site.  We are going to re-use that user here to manage the SSP once we "flip" it to Forms Authentication.  Yes, that's right, we are going to switch the authentication method of our SSP Administration site to Forms!  How else did you think it would wok with FBA users?  Ideally, you should probably go and create another user for this, maybe sspadmin or something similar.

  1. Browser to your SSP Administration Site.
  2. Click on Personalization services permissions in the User Profile and My Sites section.


  3. Click on the Add Users/Groups link.


  4. Type spadmin into the Users/Groups textbox and click the Check Names button , watch SharePoint resolve the user, then check all of the permissions and click Save.  This will ensure that when we make the switch to Forms Authentication on the SSP site, that our FBA admin user will actually be able to perform the operations listed here.


  5. Perform an IISReset and close all your browser windows.

 

Switch Authentication Providers for SSP and MySites

  1. Click on the Authentication providers link in the Application security section on the Application Management tab in Central Administration.


  2. Verify that the SSP Web Application is selected in the Web Application dropdown in the top right hand corner of the page.


  3. Click on Default.


  4. Select Forms as the Authentication Type, and enter the appropriate values for the Membership provider name and the Role manager name as they exist in this web application's web.config, then click OK.


  5. Perform steps 1 to 4 again for the MySite Web Application.

Update Site Collection Administrator for SSP and MySites

We now need to update the Site Collection Administrators of the SSP and MySite host so we can go make some more changes.

  1. Click on the Site collection administrators link in the SharePoint Site Management section of the Application Management tab in the Central Administration.


  2. Switch the Site Collection dropdown to the SSP admin Site Collection.  Remember, you may have to switch the Web Application to get the correct list of Site Collections (this is done in the popup).  I know of some people who are not too fond of this user interface, myself included).  Notice that since we switched the Authentication Type of our SSP to Forms, we will see a squiggly under the Windows account that was previously the Site Collection Administrator.


  3. Delete the squigglied name (is that a word?) and replace it with spadmin, the FBA admin user we discussed earlier.  Click the Check Names button  and watch SharePoint resolve the FBA admin user, then click OK.

     
  4. Repeat steps 1 to 3 for the MySite Host Site Collection.

Assign My Site Host Permissions to FBA Users

The following steps were the most unintuitive steps ever, in my opinion, and if anyone can tell me why it is required for FBA/MySite integration, but not for Windows/MySite integration I would love to know.  That said, here are the steps.

  1. Browse to your SSP Administration site.
  2. You will be prompted with the standard out of the box FBA login form.  Log in as spadmin.
  3. Click on the My Site settings link in the User Profiles and My Sites section on the SSP Home page.


  4. Click on the My Site Host Permissions link in the loft navigation.


  5. You will be prompted with the standard out of the box FBA login form.  Log in as spadmin.  You will be directed to the People and Groups page.


  6. Click on the Site Permissions link in the left navigation.


  7. Click on Add Users under the New menu item.


  8. Add the 3 roles we created in part 1, Administrator, Manager and Employee.  Ideally we would have created a role that holds all of the FBA users (maybe call it Everyone).  Had we done that in part 1 (we did not and I apologize), we would only have had one role to add here and so long as we always assigned new users to the Everyone role we would never have to come to this page again.  As it stands now, if we were to create another user and place them in a new role, they would not be able to create a MySite.  I think you get my drift here.  Give them Read permission directly and click OK.

    Actually, doing this doesn't actually give users permission to create a MySite, but permission to use the MySite Host site should they already have the permission to create a MySite.  The next section will grant users permission to create MySites.


  9. Close all your browser windows.

Grant Personalization Services Permissions

The next set of steps, as mentioned above is to grant our FBA users the appropriate permission to allow them to create MySites and use the personalization features of Office SharePoint Server 2007.

  1. Browse to your SSP Administration site.
  2. You will be prompted with the standard out of the box FBA login form.  Log in as spadmin.
  3. Click on the Personalization services permissions link in the User Profiles and My Sites section of the SSP Home page.


  4. Click on the Add Users/Groups link.


  5. Type Administrator;Manager;Employee into the Users/Groups textbox and click the Check Names button , watch SharePoint resolve the roles, check only the Create personal site and Use personal features permission, and click Save.  This grants these roles the permission to create a MySite and to use the personalization features.

     
  6. Your screen should resemble the following screen shot.


  7. Perform an IISReset and close all your browser windows.

Assign Roles to Default Reader Site Group

Ideally, we don't want users to have to assign other users Read permission just to view the public areas of their MySites.  When using Windows authentication, the default is to allow all authenticated users to read other users MySites.  Such a group does not exist when using FBA.  Had we created some sort of Everyone role, as suggested earlier in this post, in part 1 of the series, we could have leveraged that role, however, since we did not, we will have the same scenario as before manifest itself should we decide to add a new role in the future, after making the following changes.  So lesson learned #1 would be to create an Everyone role in your role manager and place all of your users in it.

  1. Browse to your SSP Administration site.
  2. You will be prompted with the standard out of the box FBA login form.  Log in as spadmin.
  3. Click on the My Site Settings link in the User Profiles and My Sites section on the SSP Home page.


  4. Scroll down to the Default Reader Site Group section and type or append Administrator; Manager; Employee into the textbox.  You can leave NT AUTHORITY\authenticated users in the textbox or remove it, it does not matter at this point, then click OK.


  5. Close all your browser windows.

 

Test You Solution!

Remember, I made allot of assumptions at the beginning of this post.  One of those assumptions was that you had completed part 1 of this series.  Under the assumption that you have completed part 1, test your solution using these steps.

  1. Browse to http://fbaextranet.attis.org and first login as spadmin.  You should see a My Site link in the top right hand corner of the page.  DO NOT CLICK ON IT YET.
  2. Verify that the Employee role is in the pre-created Visitor SharePoint group and that the Manager role is in the pre-created Member SharePoint group (I have to assume you know how to do this!).
  3. As I mentioned earlier, since we set our My Site Host site collection up on a separate Web Application than our website, we will need to log to our My Site independently of this site.  You may now click on the My Site link!
  4. Login as spadmin and watch the MAGIC!


  5. Check it out!

     
  6. Close your browser, open a new one and browse to http://fbaextranet.attis.org again.
  7. Login as Employee1.  You should see a My Site link in the top right hand corner of the page.  Remember, this user was created in part 1.  Click on the My Site link, logon as Employee1 and again, watch the MAGIC!

     

Caveats

Of course, this solution has a couple of caveats.  The biggest issue I have come across is Search.  At present time, the crawler simply cannot deal with Forms Authentication yet.  This is not a problem for the main website as the crawler simply enters through another zone.  The following TechNet article explains how the crawler interacts with multiple zones and authentication modes in great detail.  I encourage you to read it.  With that said, MySite Search does not work OOB (I say OOB because I am sure someone will come up with a clever solution at some point) because all of the MySites lie behind Forms Authentication.

Now go forth and integrate your Forms Authentication Solutions with MySites and your SSP's.  it will be interesting to see if there is going to be a supported or documented solution put forth by Microsoft.  I guess we will just have to wait and see!