So a bit of a preview for you about one of the solutions from my new book, Pro SharePoint 2010 Solution Development.
This one shows how you can use the Silverlight Bing Maps control to build a SharePoint solution that layers data from a KML file, Geocoded RSS feed, and a SharePoint 2010 list. The beauty of the solution is that since it is Silverlight-based, you can use the new client-side library for talking to SharePoint. This means that getting the list data onto the map is almost trivial. The appearance is that you might think it is server-side code, but it isn't. In this example, campgrounds is the SharePoint list which has a content type that is dervived from the out-of-the-box contacts content type. Here is some code from the load event of the user control.
private void UserControl_Loaded(object sender, RoutedEventArgs e)
context = SP.ClientContext.Current;
web = context.Web;
campgroundList = web.Lists.GetByTitle("Campgrounds");
SP.CamlQuery query = new SP.CamlQuery();
query.ViewXml = "<View><Query><Where><Eq>" +
"<FieldRef Name='GeocodeStatus'/><Value Type='Choice'>Geocoded</Value>" +
campgroundItems = campgroundList.GetItems(query);
And then since everything is Async in Silverlight, we have to use some UI delegates to make sure everything is happening on the right thread:
private void requestSucceeded(object sender, SP.ClientRequestSucceededEventArgs e)
UpdateUIMethod updateUI = AddCampgroundPins;
Lastly, adding the pins to the right map layer for each SharePoint item...
private void AddCampgroundPins()
foreach (SP.ListItem item in campgroundItems)
Pushpin pin = new Pushpin();
pin.Tag = item["Company"].ToString();
double latitude = (double)item["Latitude"];
double longitude = (double)item["Longitude"];
Location loc = new Location(latitude, longitude);
pin.Location = loc;
pin.MouseEnter += new MouseEventHandler(pin_MouseEnter);
pin.MouseLeave += new MouseEventHandler(pin_MouseLeave);
I have also posted a video walkthrough of the demo on skydrive which you can download here. Enjoy! And send your feedback - Ed
With the lack of posts and everything, people have been asking me what I have been up to. Among other things, I am updating my SharePoint development book for the 2010 release. The new title will be Pro SharePoint 2010 Solution Development. Just like the last book, you can expect lots of examples that incorporate Microsoft Office 2010, Visual Studio Tools for Office, Open XML, and of course SharePoint 2010. This is still a developer book meant to show patterns that devs can use in projects - not an introduction to SharePoint development. I've wrangled Chad Wach (another Microsoft SharePoint resource) to helping me with a few chapters. We are nearly done with the first drafts of the chapters, but plan to update them as we get RTM bits. The book should be out by TechEd - sometime early summer. It is already posted on amazon.com for pre-order. http://www.amazon.com/Pro-SharePoint-2010-Solution-Development/dp/1430227818/ref=sr_1_3?ie=UTF8&s=books&qid=1263665961&sr=8-3
You will notice a lot of the chapters have the same title as some of the solutions in the last book. I can guarentee you that there is a lot new here. Even in cases where the goal of the solution is the same, we were able to take it much father with less code given the improvements in the platform. Below is where the table of contents stands currently. The chapters in brackets are still being written and may change. I hope to have some webcasts for you soon of some of the solutions.
1 - Office Business Applications
2 - SharePoint 2010: Overview and New Features
3 - SharePoint Development with Visual Studio 2010
4 - Microsoft Office Overview for Developers
5 - [An Excel Services focused chapter]
6 - Merging SharePoint List Data into Word Documents
7 - Automating Document Assembly
8 - Extending PowerPoint to Build a Presentation Based on Site Content
9 - Building a Presentation Server-Side with a Web Part
10 - Surfacing Line-of-Business Data into Outlook
11 - [Site Provisioning Forms and Workflows]
12 - Rapid SharePoint Application Development using Access
13 - Using Visio Services to Visualize Data
14 - [Building Mashups]
15 - Realizing the Vision
Most of day 1 was the keynotes. Got to love that the first demo was for the developers in the room. Really like that the definition of SharePoint has become more broad then simply a collaboration platform. The new pie slide simply stated Next Generation Platform. I sat in all the keynotes and then mostly IT Pro sessions. This is because I am already pretty deep in the dev stuff. I went to IT Pro Overview, and the 2 part sessions on Architecture done wy the SharePoint 911 guys which were very entertaining. Some favorite lines:
Co-authoring is the feature that lets you watch other people do your work...
If you write a bad web part, my sharepoint server will hunt you down and shoot you...
I really like all the powershell stuff done by Shane and Todd. The biggest thing to take out of this is make get-help your friend and don't forget tabbing can auto complete not only commands, but also parameters. I'll be doing more blogging once I get back with a lot of details as well as the dev work I have been doing... finally nice that the NDA has been lifted.
Was working on a proof of concept today and ran across an interesting error when trying to get the MOSS server to talk to RMS. Since this is just in a lab, the MOSS central administration web app pool was running as Network Service. When I chose to specify the RMS server, the error was that it was found, but that the local machine account did not have access. Turns out, you need to set a few permissions on one of the asmx web service files on the RMS server. In my case the RMS Server was on a domain controller- installed with the default options. To solve the problem, I simply went to c:\inetpub\wwwroot\_wmcs\certification and modified the permissions of ServerCertification.asmx. I added the computer account of the MOSS server, and the app pool identity of my other web applications, as well as the AD RMS Service Group. That fixed it. Here is another post that has some pretty pictures and more explanation:
I just wanted to post the deck I will be using for my session (SPDev 314) at the SharePoint Best Practices Conference in Reston. My session includes mostly demos around document generation scenarios with SharePoint. There is a lot of use of the new Open XML SDK. Most of the code samples have already made it onto this blog. So I'll just post the deck. Enjoy!
I’ve been updating some of my demos for the upcoming DC SharePoint Best Practices Conference (http://www.bestpracticesconference.com/). Basically, I have a session that shows different approaches to common document generation scenarios that customers have expressed an interest in. I will show why you want to be building these out with SharePoint and why you want to use some of the latest tools to help. These tools are things like the new Visual Studio Extensions for WSS, the new Open XML SDK, and the Word Content Control toolkit. Some of the demos in my session (on the first day of the conference) were solutions that I first proposed in my book: Pro SharePoint Solution Development. Those solutions were built on (gasp) VS.NET 2005 and the Packaging API which was brand new back then. For those of you who have been looking for an update, here you go. Here are some download links to updated projects:
A web part for building a PowerPoint presentation server-side:
A new feature that merges SharePoint list data into a Word document template:
A new feature that supports the splitting of a document into discrete sections and then merged back:
Just a reminder that all of these solutions are really just demo code and should have a lot more error handling and testing. But it gives you a really good starting point for your own solutions. The biggest difference with these new projects is the use of the Open XML SDK which gives you an object model to work with instead of coding nasty XML. Here is an example of an old code snippet that opened up a PowerPoint template and located the slide parts:
Using pptPackage As Package = Package.Open(fileStream, FileMode.Open, FileAccess.ReadWrite)
' Get the main document part (presentation.xml).
For Each relationship As PackageRelationship In pptPackage.GetRelationshipsByType(documentRelationshipType)
documentUri = PackUriHelper.ResolvePartUri(New Uri("/", UriKind.Relative), relationship.TargetUri)
documentPart = pptPackage.GetPart(documentUri)
' There is only one document part. Get out now.
' Manage namespaces to perform Xml XPath queries.
Dim nt As New NameTable()
nsManager = New XmlNamespaceManager(nt)
' Iterate through the slides and extract the title string from each.
Dim xDoc As New XmlDocument(nt)
Dim sheetNodes As XmlNodeList = xDoc.SelectNodes("//p:sldIdLst/p:sldId", nsManager)
And see how this changes with the new SDK:
Dim presDoc As PresentationDocument = PresentationDocument.Open(fileStream, True)
Dim presPart As PresentationPart = presDoc.PresentationPart
Dim presentation As DocumentFormat.OpenXml.Presentation.Presentation = presPart.Presentation
If (Not (presentation.SlideIdList) Is Nothing) Then
' Get the title of each slide in the slide order.
For Each slideId As SlideId In presentation.SlideIdList.Elements(Of SlideId)()
Just a reminder that you need these add-ons to VS.NET 2008 to work with these projects:
Visual Studio Extensions 1.3 March Preview:
Open XML Format 2.0 SDK April Preview:
As promised in my earlier video demo, here is a web part that I quickly wrote to view the claims of a user when they are authenticating to the SharePoint site using a Security Token Service such as Geneva Server. There are some important sections in the code. First is the check to see if a user is actually has a claims principal:
IClaimsPrincipal icp = null;
IClaimsIdentity claimsIdentity = null;
icp = this.Context.User as IClaimsPrincipal;
claimsIdentity = (IClaimsIdentity)icp.Identity;
protected override void CreateChildControls()
if (claimsIdentity != null)
And then just collecting the claims into a dataset:
ClaimsInfo oData = new ClaimsInfo();
foreach (Claim claim in claimsIdentity.Claims)
Here is a link where you can download the sample. Just be mindful it is a sample.
Just one note that this project was built using the new Visual Studio Extensions for WSS 1.3 March CTP. You can get that here if you haven’t tried it out. Much better than previous releases – so give it a try.
No this is not a post on anything SharePoint 2010 related.
I get asked this question, quite a bit… It usually goes something like: I have a SharePoint site and when the user clicks on a Word document, the file is shown in the Internet Explorer viewer and not in MS Word. I had to track this down once upon a time with good old SharePoint 2003 so I can usually answer that it is a setting on the desktop that determines whether or not the rich client app will launch. At a recent conference, an attendee pushed for a little more detail and it took me a while to find the KB article. Here it is:
As you can see there is an interactive way to set it through some very hidden settings screens as well as through the registry. The registry approach published via a group policy would be the way to go if a massive amount of users need to have the change made.
I put together a little video demo of using Geneva Beta 2 stuff with MOSS 2007. You can get these VMs using the links from the previous post, but it is an awful lot to download and setup. So I thought a video might be appealing.
Since a lot of the customers I serve are government agencies, there has always been a lot of interest in ADFS with SharePoint. But there has always been lots of issues... ADFS being targeted to only federating Active Directory, what about Office client integration, SAML protocol support, etc... Well there is something new on the horizon and last month at Tech Ed there was some interesting announcements that impact the SharePoint world.
If you haven't been watching the MS beta name list, it was probably an easy miss, but there is a new Windows Server service coming that currently goes by the beta name of Geneva Server. This service brings a Security Token Service to the windows platform building on top some new .NET libraries (the Geneva framework). This STS is an evolution of the ADFS Windows service adding support for more standards, a claims transformation rules engine, support for SQL attribute stores, and much more.
At Tech Ed, there was an announcement that MOSS 2007 will support Geneva. In fact, there is now a set of hyper-v VMs that will allow you to play with Geneva Beta 2, MOSS 2007, RMS, and Card Space. This also has the SP2 updates for client integration so it is quite a demo when you are done. You can register and get the images here: http://msdn.microsoft.com/en-us/evalcenter/dd440951.aspx
There is only 1 error that I found going through the docs. On page 87, the Url should be https://docs.contoso.com. And I would change the demo a bit and only add the RMS protection to the confidential documents.
This is really just a publish of an old demo I have had for some time, but finally got around to putting a video together. This demo is about two different ways to build PowerPoint presentations based off of SharePoint content. The first uses an Office Add-in approach and the second does everything on the server using Open XML. Enjoy!
By the way, both solutions are in my book: Pro SharePoint Solution Development
It's that time of year again. A local sharepoint user group that I am involved with is putting on a regional sharepoint conference. The dates are June 26th and 27th. Visit their web site for more information: http://www.sugdc.org/Events/Conferences/tabid/58/Default.aspx
And came across a series of webcasts that I had to share:
What's new for SharePoint in DPM 2007 SP1: http://edge.technet.com/Media/What-is-new-in-DPM-2007-SP1-for-protecting-SharePoint/
DPM Licensing Changes: http://edge.technet.com/Media/DPM-2007-sp1-Licensing/
Deep Dive on how DPM works: http://edge.technet.com/Media/DPM-2007-SP1-How-does-DPM-really-work/
A few posts ago, I put up a silverlight video of a solution from my book on how to merge sharepoint list data into templatized Word documents. See: http://blogs.msdn.com/edhild/archive/2008/10/29/merging-sharepoint-list-data-into-word-documents.aspx
Of course the book has been out for quite a while and this new demo utilized a few new toys since then: Visual Studio 2008, the Word Content Control Toolkit, and the Open XML SDK (all discussed and links are in the prior post). I've been asked a few time for a copy of the new solution so I've posted it here:
As usual, the code is for learning purposes only! All the usual caveats about not supporting it, etc all apply.
And of course there would have to be an error that I had to work around... I had built several samples with the pre-release stuff of Silverlight 2.0 and just started the processing of updating my environment. So I uninstalled everything in my dev environment related to silverlight and started over. This included Visual Studio 2008 SP1, Expression Blend 2 SP1, as well as the new Silverlight Tools for Visual Studio. After getting everything in the environment, I created a simple Silverlight app along with the default web test application...and my Hello World demo gave me a wonderful parser error saying it couldn't find the Silverlight assembly.
I checked the reference and it was point to the correct dll. If I changed the setting for this to copy local then it would work fine, but i didn't want tons of copies floating around on my dev machine. I used gacutil and installed it into the Global Assembly Cache - same error. Interesting, if I changed the Register directive in the aspx page then so that it specified the strong name of the assembly then it worked. But I didn't want to have to do this for every aspx page or project that I create... So the end state solution I came up with was to add the assembly reference in the framework's root web.config file. This is located at: C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG. It is called web.config. The additional line I added was an assembly directive:
<add assembly="System.Web.Silverlight, Version=18.104.22.168, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
I still haven't gotten to my previous projects, but at least Hello World works now :)
You do NOT want to miss this week’s SharePoint Weekly Webcast Series presentation. I have lined up the folks from Microsoft's Academy Team who brought you the Podcasting Kit for SharePoint and it is sure to be a great, informative session. Please be sure to pass along this invite to your colleagues!! The meeting information for this week’s session is below as well as a download of the calendar invite in iCal format. The session will be this Thursday, November 13th from 12 noon eastern time until 1pm est. See you Thursday!!
Join us this week for a special treat on the SharePoint Weekly Webcast Series! In today’s corporate environment the needs for tacit knowledge capture and re-use, for training generated by all levels of an organization, are ever increasing. Couple that with an increasingly mobile workforce and the challenges of meeting these needs may seem insurmountable. However, if you have an investment in Microsoft office SharePoint Server 2007 then you also own the rights to an exciting new solution for SharePoint designed to meet these needs, The Podcasting Kit for SharePoint. This week’s presentation will be by the folks who brought us this fantastic solution. Be sure to join us to learn more about PKS as well as to ask those burning questions you may have about mobile training in the corporate space.
Mike Gannotti has invited you to attend an online meeting using Live Meeting.
Join the meeting.
To use computer audio, you need speakers and microphone, or a headset.
Choose one of the following:
· Start Live Meeting client, and then in Voice & Video pane under Join Audio options, click Call Me. The conferencing service will call you at the number you specify. (Recommended)
· Use the information below to connect:
Toll-free: +1 (866) 500-6738
Participant code: 121607
First Time Users:
To save time before the meeting, check your system to make sure it is ready to use Microsoft Office Live Meeting.
Unable to join the meeting? Follow these steps:
1. Copy this address and paste it into your web browser:
2. Copy and paste the required information:
Meeting ID: 2KN7GD
Entry Code: t}k9d,(>N
If you still cannot enter the meeting, contact supportNotice
Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting.
It isn't too often that I get to share publicly some of the work we do at the MTC for customers. Fortunately, the US Air Force let Microsoft turn a proof of concept I worked on into a case study. This POC was done a while ago - in fact you'll recognize some of it is on older technology than the current revisions. The solution was focused on providing a tracking system for requests for forces that come in from JFCOM. The current system (at the time) was simply Outlook and Emails. The action officers described spending 50% of their time sorting and searching through complicated email folder hierarchies. We proposed and build a system leveraging Microsoft CRM and SharePoint. On Microsoft's site, you can see a video about this solution, a demo of it online, and even more info of how this solution has generalized to tracking just about any task:
By the way, they caked make up on me for the video...
I was preparing for the upcoming conference and wanted to demo some of the new tools coming for SharePoint. Often I have heard the customer's IT department talk about finding rogue SharePoint installations and getting better metrics on how these servers were being used, so I thought I would spend some time with the SharePoint Asset Inventory Tool. This tool is currently in Beta, but is publicly available through Microsoft's Connect site. It is basically a scanning solution that looks for SharePoint servers and dumps metrics about them into a SQL store with some nice SQL Reports. I installed the tool, only to get an error half-way through the scan. The error was something about a malformed SQL statement near a ';' and an ELSE statement. Unfortunately, I had nothing in the repository to even show as part of the demo. So the hunt began...
Looking through log files, I found the offending stored procedure to be dbo.SP_INSUPD_DEVICES_PORT_NUMBER. This proc was in the SATAssets database on my SQL server. If you modify this proc, you will notice that it builds a dynamic SQL string. In this string, one of the variables is not covered by two single quptes ''. So ...
IF('' + PORT_NUMBER + '' IS NOT NULL)
notice that I added the 2 ''. This proc and the SATAssets DB seem to be recreated each time you run a new scan after the initialization screen. Start the wizard, wait for the initialize prompt to go away, modify the proc, and then it works.
I also am a big fan of host headers in my dev environments. I noticed I also had to make sure that I had a web application that resolved the the server name on port 80 (or one of the ports it was looking for) to get my results.
I've also posted this workaround in the forums so hopefully you'll have some luck before the next drop happens on the Connect beta site.
First sorry for the long time away from posting. It was quite a busy fourth quarter. But welcome to 2008!
I put together a quick video blog of two demonstrations I show about how to automate the creation of PowerPoint presentations based on SharePoint site content. The first part of the demo shows how a Visual Studio Tools for Office add-in for PowerPoint can call SharePoint's web services to retrieve content and build slides. The second approach shows how this can be done completely server side by manipulating the new Open XML formatted files. Both demos usually get people excited; I hope you enjoy them. The code for these is available on Apress' web site since they are from my book: Pro SharePoint Solution Development. This book is mentioned a lot in the blog so it should be easy to find more info if you are interested. Sorry for the background noise in the video. The HVAC system here is running full strength on this cold day.
Also, I will be presenting at the upcoming SharePoint conference in Seattle in March. My topic will be "Enforce Governance by Provisioning Sites through Workflows" or something like that. Stop by and say hi. I may have a few books to hand out. http://www.mssharepointconference.com/Pages/default.aspx
Just an update: Ian at wssdemo.com has hosted this video on a streaming server which has much better quality: http://xpstream.winisp.net/imorrish/generate_ppt_sharepoint.wmv
Video: Building Presentations from SharePoint Content