Partner Conference Day -1

July 10th, 2007 by adrh

After a landing I'd rather forget, which might actually be a good one in Denver (lucky I recently learned that modern passenger jets are designed to land at up a to 45 degree angle to the runway!), we arrived in Denver last night (depending on where you are). Today was pre-partner-conference-event-day (I'm pretty sure there is a catchy acroynom, I'm just not sure what it is!).

Today was a day of meetings and MS Partner 101 - I think that means I am officially assimilated! Smile

We had a good meeting with several key members of the Microsoft Information Worker Partner Team, which was great – very synergistic (if that is a real word) with what our philosophy around SharePoint and Office is. And then a fairly indepth look at what the value that Microsoft adds in terms of an organisation to be partnered with - there were actually some surprising results here in terms of rankings in market share and growth. After which in the midst of several thousand Partner (approx 7,000 I think) we ran into Bjarne. About 48 hours of travel between us – but only 6 degrees of separation.

Then, after a rest (read: email check) it was off to the welcome reception, shortly followed by the Australian Welcome reception and drinks and a free (possible hijacked) Limo ride around the sights of Denver!

Looking forward to the sessions tomorrow, especially the one on MOSS Search…

 

Partner Conference Day -1

July 10th, 2007 by adrh

After a landing I'd rather forget, which might actually be a good one in Denver (lucky I recently learned that modern passenger jets are designed to land at up a to 45 degree angle to the runway!), we arrived in Denver last night (depending on where you are). Today was pre-partner-conference-event-day (I'm pretty sure there is a catchy acroynom, I'm just not sure what it is!).

Today was a day of meetings and MS Partner 101 - I think that means I am officially assimilated! Smile

We had a good meeting with several key members of the Microsoft Information Worker Partner Team, which was great – very synergistic (if that is a real word) with what our philosophy around SharePoint and Office is. And then a fairly indepth look at what the value that Microsoft adds in terms of an organisation to be partnered with - there were actually some surprising results here in terms of rankings in market share and growth. After which in the midst of several thousand Partner (approx 7,000 I think) we ran into Bjarne. About 48 hours of travel between us – but only 6 degrees of separation.

Then, after a rest (read: email check) it was off to the welcome reception, shortly followed by the Australian Welcome reception and drinks and a free (possible hijacked) Limo ride around the sights of Denver!

Looking forward to the sessions tomorrow, especially the one on MOSS Search…

 

The Dark Side? MOSS on a MacBook Pro!

July 4th, 2007 by adrh

I may as well admit it, I have been seduced by the power of the Dark Side (that should generate the 5,911 Google hit for that phrase and maybe knock Google off the top few spots in Live Search! Smile).

After much research I decided on one of the new MacBook Pro's as my new laptop for work. I've never been a fan partly because of the proprietory (near predatory) nature of Apple, and partly because of the price. However, in my research I discovered that the new ones are fast (mine is Core 2 Duo 2.4Ghz, 4GB RAM and 160GB Hard Disk), light (about .5 kgs lighter than similar spec'd notebooks), pretty standard (SATA drives, DDR2 RAM), can run any OS you want (using Bootcamp, Virtualized with VMWare Fusion or Parallels).

On to the SharePoint bit - I installed bootcamp on MAC OS, created the drivers disk, ran the Windows install wizard, put in the Vista DVD, 10-15 minutes later put in the Bootcamp drivers disk (created at step 2) and voila VISTA on a Mac, complete with all peripherals (including the iSight camera which surprised me!). I won't go into details, but being sad about the fact that 32-bit Vista would only see 3GB of my 4GB, I tried 64-bit Vista which was NOT so good – drivers didn't all work. I suspect/hope that the final release of Bootcamp might fix that tho…

Next step, installed Virtual Server 2005, copied over my images and then started them up (note the use of 'them'). I ran 2 MOSS servers (one domain controller with AD) AND played a little Halo 2 (eval) at 1440×900 just to see if the machine was up to it – it was.

So, I'm off the the Microsoft Worldwide Partner Conference next week in Denver complete with shiny new Mac!

I hope they let me in (I'll take some kiddy stickers to cover the logo just in case – although it'll take more than that to disguise it)!

Oh, and just in case this feels in any way like a review (It's not meant to!) - My opinions do not reflect those of my blog host, SharePoint Experts.

 

The Dark Side? MOSS on a MacBook Pro!

July 4th, 2007 by adrh

I may as well admit it, I have been seduced by the power of the Dark Side (that should generate the 5,911 Google hit for that phrase and maybe knock Google off the top few spots in Live Search! Smile).

After much research I decided on one of the new MacBook Pro's as my new laptop for work. I've never been a fan partly because of the proprietory (near predatory) nature of Apple, and partly because of the price. However, in my research I discovered that the new ones are fast (mine is Core 2 Duo 2.4Ghz, 4GB RAM and 160GB Hard Disk), light (about .5 kgs lighter than similar spec'd notebooks), pretty standard (SATA drives, DDR2 RAM), can run any OS you want (using Bootcamp, Virtualized with VMWare Fusion or Parallels).

On to the SharePoint bit - I installed bootcamp on MAC OS, created the drivers disk, ran the Windows install wizard, put in the Vista DVD, 10-15 minutes later put in the Bootcamp drivers disk (created at step 2) and voila VISTA on a Mac, complete with all peripherals (including the iSight camera which surprised me!). I won't go into details, but being sad about the fact that 32-bit Vista would only see 3GB of my 4GB, I tried 64-bit Vista which was NOT so good – drivers didn't all work. I suspect/hope that the final release of Bootcamp might fix that tho…

Next step, installed Virtual Server 2005, copied over my images and then started them up (note the use of 'them'). I ran 2 MOSS servers (one domain controller with AD) AND played a little Halo 2 (eval) at 1440×900 just to see if the machine was up to it – it was.

So, I'm off the the Microsoft Worldwide Partner Conference next week in Denver complete with shiny new Mac!

I hope they let me in (I'll take some kiddy stickers to cover the logo just in case – although it'll take more than that to disguise it)!

Oh, and just in case this feels in any way like a review (It's not meant to!) - My opinions do not reflect those of my blog host, SharePoint Experts.

 

Microsoft Office SharePoint Server's Most Innovative Search Solution

June 28th, 2007 by adrh

In the middle of all the excitement of the APAC SharePoint Conference, Breakfast Briefings, Partner Conference Prep and product releases, it was announced in June that we at MacroView have won the Quickstart for Microsoft Search Innovative Solution Contest!! This contest was open at all Partners who signed up to the Quickstart for Search program and had Innovative Search solutions developed for the Portal Server or MOSS environments.

Way back in February I posted about some work I had been doing around a customized search UI. This was based on a generic, customizable Web Part for rendering user friendly and consistant UI for the user when they search using MOSS. This customizable Search solution is what we submitted as our entry.

Congratulations also to the other Australian Partners (OBS and Unique World) who made the 13 Finalists. It says a lot about the quality of Partner – and competition Smile – in Australia that there was such a representation from down under amongst some major players from around the world!

I'm pretty excited about our win, and also about the awesome customization features within MOSS and the Search area in particular. If you're deploying MOSS and looking for ways to improve the OOB Search feel free to drop me a line, or even better, if you are going to the Worldwide Partner Conference look me up in WPC Connect!

 

Microsoft Office SharePoint Server's Most Innovative Search Solution

June 28th, 2007 by adrh

In the middle of all the excitement of the APAC SharePoint Conference, Breakfast Briefings, Partner Conference Prep and product releases, it was announced in June that we at MacroView have won the Quickstart for Microsoft Search Innovative Solution Contest!! This contest was open at all Partners who signed up to the Quickstart for Search program and had Innovative Search solutions developed for the Portal Server or MOSS environments.

Way back in February I posted about some work I had been doing around a customized search UI. This was based on a generic, customizable Web Part for rendering user friendly and consistant UI for the user when they search using MOSS. This customizable Search solution is what we submitted as our entry.

Congratulations also to the other Australian Partners (OBS and Unique World) who made the 13 Finalists. It says a lot about the quality of Partner – and competition Smile – in Australia that there was such a representation from down under amongst some major players from around the world!

I'm pretty excited about our win, and also about the awesome customization features within MOSS and the Search area in particular. If you're deploying MOSS and looking for ways to improve the OOB Search feel free to drop me a line, or even better, if you are going to the Worldwide Partner Conference look me up in WPC Connect!

 

The solution to saving properties in Custom Field Types!

May 25th, 2007 by adrh

I have finally managed to put Anton's code to the test in my own custom field type with great results.

The underlying issue is that the Update method does not seem to get called when adding a new field, and because there are a number of initializations of the field object the values in the custom propery editor controls get lost before you get to the OnAdded event where you could set them!

So, Anton's plan (which I confirm works very well) is to store the values of the properties in a static string dictionary, keyed with the hash of the current SharePoint context SPContext.Current.GetHashCode() so we get the right property back out in the OnAdded event and can set the correct values.

You can get the full code in the thread linked to above, but I'll summarize as best I can. I'm using a property called Application that is set by selecting a value from a combo box – which is actually part of a parent child combination used in the Property Editor, but that's another story…

First we create a new dictionary in the Field Class (the one that inherits from the SPField… class) to store the properties:

private static Dictionary<int, string> updatedApplicationProperty = new Dictionary<int, string>(); 

Create a new method that the Property Editor Control can call to update the dictionary to the value in the property editor control:

        public void UpdateApplicationProperty(string value)
        {
            updatedApplicationProperty[ContextId] = value;
        } 

Then, in the get for the property, return the dictionary stored property value if it exists or the internal value if not:

public string Application

get

{

                if (updatedApplicationProperty.ContainsKey(ContextId))
                {

                    //If we saved a value away and we're in the middle of the save field process, then pull it out.
                    return  updatedApplicationProperty[ContextId];
                }
                else
                {

                    //Return the existing value for the application property. This will be the case if we already have a field.
                    return sApplication;
                }

}

In the Update method of the Field Control set the custom property value and remove the stored property value:

this.SetCustomProperty("Application", this.Application);

if (updatedApplicationProperty.ContainsKey(ContextId))
     updatedApplicationProperty.Remove(ContextId);

And, lastly, in the OnSaveChange event in the class for the Property Editor Control store the value of the control that represents the property into the dictionary via the Update…Property method for a new field, or set the property as normal if the field already exists:

                BDCField currentBDCField = field as BDCField;

                if (isNewField)
                {
                    currentBDCField.UpdateApplicationProperty(this.cboApplications.SelectedValue);
                }
                else
                {
                    currentBDCField.Application = this.cboApplications.SelectedValue;
                }

Hopefully that's a reasonable description of the required steps. Anton has a good description of the why he chose the static dictionary in the forum post.

 Thanks again Anton and sorry it took me sooooo long to try it out!!!

The solution to saving properties in Custom Field Types!

May 25th, 2007 by adrh

I have finally managed to put Anton's code to the test in my own custom field type with great results.

The underlying issue is that the Update method does not seem to get called when adding a new field, and because there are a number of initializations of the field object the values in the custom propery editor controls get lost before you get to the OnAdded event where you could set them!

So, Anton's plan (which I confirm works very well) is to store the values of the properties in a static string dictionary, keyed with the hash of the current SharePoint context SPContext.Current.GetHashCode() so we get the right property back out in the OnAdded event and can set the correct values.

You can get the full code in the thread linked to above, but I'll summarize as best I can. I'm using a property called Application that is set by selecting a value from a combo box – which is actually part of a parent child combination used in the Property Editor, but that's another story…

First we create a new dictionary in the Field Class (the one that inherits from the SPField… class) to store the properties:

private static Dictionary<int, string> updatedApplicationProperty = new Dictionary<int, string>(); 

Create a new method that the Property Editor Control can call to update the dictionary to the value in the property editor control:

        public void UpdateApplicationProperty(string value)
        {
            updatedApplicationProperty[ContextId] = value;
        } 

Then, in the get for the property, return the dictionary stored property value if it exists or the internal value if not:

public string Application

get

{

                if (updatedApplicationProperty.ContainsKey(ContextId))
                {

                    //If we saved a value away and we're in the middle of the save field process, then pull it out.
                    return  updatedApplicationProperty[ContextId];
                }
                else
                {

                    //Return the existing value for the application property. This will be the case if we already have a field.
                    return sApplication;
                }

}

In the Update method of the Field Control set the custom property value and remove the stored property value:

this.SetCustomProperty("Application", this.Application);

if (updatedApplicationProperty.ContainsKey(ContextId))
     updatedApplicationProperty.Remove(ContextId);

And, lastly, in the OnSaveChange event in the class for the Property Editor Control store the value of the control that represents the property into the dictionary via the Update…Property method for a new field, or set the property as normal if the field already exists:

                BDCField currentBDCField = field as BDCField;

                if (isNewField)
                {
                    currentBDCField.UpdateApplicationProperty(this.cboApplications.SelectedValue);
                }
                else
                {
                    currentBDCField.Application = this.cboApplications.SelectedValue;
                }

Hopefully that's a reasonable description of the required steps. Anton has a good description of the why he chose the static dictionary in the forum post.

 Thanks again Anton and sorry it took me sooooo long to try it out!!!

Adding additional properties to the MOSS People Search

May 21st, 2007 by adrh

I figured out how to add additional fields from the Profile Import into the People Search today.

This requirement occured to me after discussing how this might be done with Aaron Saikovshi at the APAC SharePoint Conference.

In this particular case, I wanted to add one of the extended properties from the Exchange Users into both the Search Box control and the results page. I suspect, but have not confirmed that this process would work for extensions to the AD Schema too.

There are several steps to make this happen:

1. Assuming that you have a property with data in it, go to the Shared Services Administration page and click on 'User Profiles and Properties' link.

2. Add a new Profile Property for the property you want to include by clicking the 'Add profile property' link at the bottom of the page. The things to pay attention to are the policy settings (properties will need to be available to all those who need to see them!) and the Property Import Mapping (you need to map your property to a physical property crawled by the indexer – just like Managed Properties in MOSS Search – which is actually what this property becomes). In the case of my Exchange extended property this was extensionAttribute1.

3.  At this point I did a full import, just to make sure I could see the values coming through when I viewed the user profiles.

[Ishai has a nice post with pictures for the remaining steps...]

4. Go to the people search page in the Search Centre (or wherever you put the people search).  Edit the page and then edit the properties of the People Search Box. Open the Properties property and add a new Property element to the list, eg:

<Property Name="NewProp" ManagedName="NewProp" ProfileURI="urn:schemas-microsoft-com:sharepoint:portal:profile:NewProp"/>

where NewProp is the name you gave to the new Profile Property above.

5. In the Results Query Options section of the properties for the People Search Core Results web part, edit the Selected Columns property. If your default value is like mine, it will look like there is nothing in there – which tricked me for a while, but click the … button and add a new Column element for your property equal to the name of your new Profile Property.

6. Edit the Data View Properties of the People Search Core Results web part to add the new column (in lower case), somewhere in the XSL eg. <xsl:value-of select="newprop"/>. Click Apply and Publish (if you have content management turned on). Don't worry if you get a nasty looking error in the web part unless it happens after you publish! You did backup the XSL before you modified it, right?!

I also had to do some crawling of the Content Sources once I had added the new Property and at one point had to reset and re-crawl. I think there is something strange going on there, because the first property I added only seemed to require a Crawl to be available, but the second would not work as a Selected Column until I reset and re-crawled! I'm not 100% on what requires what level of crawling. I can understand a full crawl being required for new properties because that probably updates the property store, but a Reset Crawled Content?!

If anyone has, or tries to get this working with a custom Active Directory column it would be great to know and complete the puzzle!

 

Adding additional properties to the MOSS People Search

May 21st, 2007 by adrh

I figured out how to add additional fields from the Profile Import into the People Search today.

This requirement occured to me after discussing how this might be done with Aaron Saikovshi at the APAC SharePoint Conference.

In this particular case, I wanted to add one of the extended properties from the Exchange Users into both the Search Box control and the results page. I suspect, but have not confirmed that this process would work for extensions to the AD Schema too.

There are several steps to make this happen:

1. Assuming that you have a property with data in it, go to the Shared Services Administration page and click on 'User Profiles and Properties' link.

2. Add a new Profile Property for the property you want to include by clicking the 'Add profile property' link at the bottom of the page. The things to pay attention to are the policy settings (properties will need to be available to all those who need to see them!) and the Property Import Mapping (you need to map your property to a physical property crawled by the indexer – just like Managed Properties in MOSS Search – which is actually what this property becomes). In the case of my Exchange extended property this was extensionAttribute1.

3.  At this point I did a full import, just to make sure I could see the values coming through when I viewed the user profiles.

[Ishai has a nice post with pictures for the remaining steps...]

4. Go to the people search page in the Search Centre (or wherever you put the people search).  Edit the page and then edit the properties of the People Search Box. Open the Properties property and add a new Property element to the list, eg:

<Property Name="NewProp" ManagedName="NewProp" ProfileURI="urn:schemas-microsoft-com:sharepoint:portal:profile:NewProp"/>

where NewProp is the name you gave to the new Profile Property above.

5. In the Results Query Options section of the properties for the People Search Core Results web part, edit the Selected Columns property. If your default value is like mine, it will look like there is nothing in there – which tricked me for a while, but click the … button and add a new Column element for your property equal to the name of your new Profile Property.

6. Edit the Data View Properties of the People Search Core Results web part to add the new column (in lower case), somewhere in the XSL eg. <xsl:value-of select="newprop"/>. Click Apply and Publish (if you have content management turned on). Don't worry if you get a nasty looking error in the web part unless it happens after you publish! You did backup the XSL before you modified it, right?!

I also had to do some crawling of the Content Sources once I had added the new Property and at one point had to reset and re-crawl. I think there is something strange going on there, because the first property I added only seemed to require a Crawl to be available, but the second would not work as a Selected Column until I reset and re-crawled! I'm not 100% on what requires what level of crawling. I can understand a full crawl being required for new properties because that probably updates the property store, but a Reset Crawled Content?!

If anyone has, or tries to get this working with a custom Active Directory column it would be great to know and complete the puzzle!