Adventure in SPWonderland

Take apart and put back together

NAVIGATION - SEARCH

Silverlight 2: Unable to call SharePoint's Web Services

While preparing for the presentation on Silverlight and SharePoint next week I've just discovered that the current Beta 1 of SilverLight 2 is unable to call SharePoint's native webservices.

The technical reason is that the WSDL SharePoint generates includes an asd:any declaration which is translated by the proxy generator as requiring the XmlElement class but Silverlight does not support this class. So you're not able to call GetList or GetListItems in Lists.asmx for instance.

I've posted on the Silverlight forums about this but the reply I got from Yavor Georgiev (Program Manager - Connected Services) was not clear as to whether this is a planned feature for SL 2.

There are a few ways around this which I'll go into in the presentation but none are very pleasant prospects.

There's probably still time to get this feature in v2. The best thing is to let MS know this is an important issue by adding support on the thread. Also worth keeping an eye on the Silverlight Web Services blog.

Presenting SharePoint + Silverlight at the SharePoint UK UserGroup Basingstoke March 27th

I'm really stoked to be presenting at the UK SharePoint user group meeting in Basingstoke on the 27 March about Silverlight and SharePoint.

This presentation will explain what Silverlight is, what the benefits are over standard web development and how Silverlight can be hosted in and integrate with SharePoint.
With few slides and plenty of demos I'll walkthrough the creation of a Silverlight 2.0 video browser application that uses data from SharePoint and then deploy it to SharePoint. I'll also show how a commercial Silverlight 2.0 product for SharePoint is put together.

The other presentations are

Architecting a Highly Available MOSS Farm - by Lewis Baldwin, ICS,  Head of Infrastructure and Support

Governance: Protecting your SharePoint Investment by Symon Garfield, ICS,  SharePoint Practice Lead

The good folks at ICS solutions are hosting us at their offices in Basingstoke (http://www.icssolutions.co.uk/pages/howtofindus.aspx).

Just post a reply with your full name on this thread http://suguk.org/forums/thread/8918.aspx (registration required)

Some tests are really hard to ignore

Picture this, you're a IT bod working for Thomson Financial, you've got I don't know how many sites subscribing to your global financial news feed, you need to check that your latest update is working, so you key a test message in the system, hmm that's funny nothing coming out on the test feed reader.

Try a second one, and a third and you just keep on going...

Now you did check its the test system you were logged in to?

 

Test Please Ignore

 

Its even harder to ignore on some other sites...looks like they might have lost ignore 1 and ignore 2 though, maybe they meant these to go around the world :-)

 

ThisIsATest2 - Copy

Silverlight 2 Beta 1 has landed

 

The Silverlight 2 Beta 1 downloads have been released!

via Micheal Sync

  • Silverlight 2 (beta1) runtime (download)
  • Microsoft® Silverlight™ 2 Software Development Kit Beta 1 (download)
  • Source Code and Unit Tests for Silverlight 2 Beta 1 Controls (download)
  • Microsoft® Silverlight™ 2 Software Development Kit Beta 1 Documentation (download)
  • Silverlight 2 (beta1) MSDN (view online)
  • Microsoft Silverlight Tools Beta 1 for Visual Studio 2008 (download)

Additional Tools ~

  • Microsoft Expression Blend 2.5 March 2008 Preview (download)

 

Now you have a chance to run the samples that have been posted at the Silverlight 'blueprints' for SharePoint website at a couple of days ago that nobody could run without the runtime above. They say Software+Services blueprints, I say a bunch of code samples.

PowerShell-SharePoint: Add a list item

Its pretty easy to add list items to SharePoint with Powershell so here's a quick sample

 

[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
 
# Add an new item to the announcements list
 
$site    =     new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com")                                                        
$web     =    $site.rootweb                                                                                                
 
$list    =    $web.Lists["Announcements"]                                                                              
 
$newitem=    $list.items.Add()                                                                                                  
                                                                                                  
$newitem["Title"]=    "New CFO Appointed";                                                                                          
$newitem["Body"]=    "Our new CFO is Harry Varden, money still not recovered from previous appointee, legal action is ongoing";                                                                                          
$newitem["Expires"]=     [DateTime]::Now.AddDays(5)
 
$newitem.update() 
 
$web.Dispose()
$site.Dispose()                                                                                                      

This could easily be turned into a function

Here I've referenced the field names by text but I could have used SharePoint's built-in list of field Id's using the SPBuiltInFieldId class.

In that case the fields are referenced by using the syntax [Microsoft.SharePoint.SPBuiltInFieldId]::Title

To get a list of fields in the class you can use this PowerShell command

[Microsoft.SharePoint.SPBuiltInFieldId] | get-member -static | select name | more

get-member is a handy class that reflects over a given object and returns the list of properties, fields and methods.

PowerShell-SharePoint: Three ways to delete a list item: ID, CAML, string matching

Deleting a list item with PowerShell is pretty easy also

If you know or can find out the ID of the list item use the GetItemById method of the list itself

 

[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 

# Delete an item from the announcements list by Item ID

$site    =     new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com")                                                        
$web     =    $site.rootweb                                                                                                

$list    =    $web.Lists["Announcements"]                                                                              

$deaditem=    $list.GetItemById(2)
$deaditem.Delete()

$web.Dispose()
$site.Dispose()                                                                                                      
 
Another way to delete items is to run a CAML query and delete items from the collection
This code sample deletes all those announcements that have expired dates before yesterday
 

# Delete an item from the announcements list by using a CAML query [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $site = new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com") $web = $site.rootweb $list = $web.Lists["Announcements"]

$DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-1)) $caml=' <Where> <Lt> <FieldRef Name="Expires" /> <Value Type="DateTime">{0}</Value> </Lt> </Where> ' -f $DeleteBeforeDate $query=new-object Microsoft.SharePoint.SPQuery $query.Query=$caml $col=$list.GetItems($query) # Pipe results to a loop and delete each element $col | % { $_.Delete() } $web.Dispose() $site.Dispose()

 

Be very careful with this as a badly formed CAML query will return ALL the items in a list thus deleting all items in the list, use a line like $col | select Title instead of the delete to double check the results before you run the function. Using the invaluable CAML Builder utility from U2U for these queries is a good idea, just remember to remove the <Query> tags from the result.

The third way is to use some of Powershell's powerful string matching feature. This article gives a simple overview of the like and match commands in Powershell

Using like or match we could compare any field in a list and delete on that basis.

For instance lets say we need to delete all Announcements that had CEO in the title. This sample does that

 

[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 

# Delete announcements that match a string pattern

$site    =     new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com")                                                        
$web     =    $site.rootweb                                                                                                

$list    =    $web.Lists["Announcements"]                                                                              

$list.get_items() | where { $_.Title -like '*CEO*' } | % { $_.Delete() }
                                                                                              

$web.Dispose()
$site.Dispose()      

 

Note the get_items() syntax as PowerShell has a problem with Items as a property so we have to use the assessor directly.

Sharepoint and Powershell Virtual lab

I forgot to post this before but Microsoft has created a virtual lab based on my blog postings. If you're interested in Powershell and SharePoint its definitely worth checking out

http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032346304&EventCategory=3&culture=en-US&CountryCode=US

As noted on Ben Pierce's blog Powershell is now a CER common engineering requirement for all products released in 2009 and beyond, that should mean as Office 14 is due for release in 2009 PowerShell should be a mandatory feature in SharePoint.

Thats good news and a big change as when I'd asked the question about PowerShell support in SharePoint to Mike Fitzmaurice back in February last year the answer was they had no plan to do so.

SharePoint 2007 and Open Protocols

Microsoft has recently pledged to release the documentation of a lot of its up-to-now internal server protocols.

'Microsoft is providing access through open connections to its high-volume products—Windows Vista (including the .NET Framework), Windows Server 2008, SQL Server 2008, Office 2007, Exchange Server 2007, and Office SharePoint Server 2007—so that software developers, business partners and competitors can better interact with these Microsoft products or invent new solutions for customers.'

Obviously the ones getting the most attention are the server SMB interfaces but also of interest in a real geeky way are ones for the Windows Search Service and WebDAV.

What's tweaked my curiosity is that SharePoint 2007 is mentioned on this list. What interfaces are they talking about? Client side protocols like the FrontPage RPC's?  Server side ones? Dunno but it could be interesting.

Personally given the time I spent a long time ago extracting data from a corrupt Microsoft MDB in 2k pages I'd like to see the Jet DB format released, just for old times sake.

Kudo's to Microsoft to releasing this information with a much dignity as anyone with their arm twisted up their back by the EU could.

 

UPDATE:

thanks to Sean Watson for explaining that the SharePoint related Open Protocols are three WebDAV and two FrontPage ones

MS-WDV  Web Distributed Authoring and Versioning (WebDAV) Protocol: Client Extensions

MS-WDVME  Web Distributed Authoring and Versioning (WebDAV) Protocol: Microsoft Extensions

MS-WDVRV World Wide Distributed Authoring and Versioning (WebDAV) MS-Author-Via Protocol Specification

MC-FPSEWM FrontPage Server Extensions: Website Management Specification

MS-FPSE FrontPage Server Extensions Remote Protocol Specification

for more details about the Microsoft Communications Protocol Program MCPP and the legal status of these documents see http://www.microsoft.com/about/legal/intellectualproperty/protocols/mcpp.mspx 

The gist of it seems to be that open source projects are free to use this information but commercial products would possibly be subject to licencing and patent requirements depending on what they implemented.

Silverlight 2 emerges (slowly)

The minute we began working with Silverlight 1.1 we knew Web Application Development would never look the same again and we've been working on a Silverlight Application for SharePoint over the last few months using Silverlight 1.1 (which is going to be supercool btw) and have been waiting longingly for the Beta 1 of Silverlight 2 to appear.

Like a hitech version of the Dance of the Seven Veils newly minted Microsoft VP Scott Guthrie has just posted the first revealing posts about the upcoming SL 2 release at http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx . (scottgu.com is where the pictures are posted to and is not accessible when writing this post)

Sporting a subset of WPF features such as controls, databinding, layout and styles but most importantly supporting .net code running client-side its ironic that while WPF itself has gone nowhere (dont believe me - check the market www.jobserve.com, skills keyword WPF, EU jobs 51, yes thats 51 jobs (perm and contract) in the whole of the European union) Silverlight is set to introduce a whole slew of developers to XAML.

Microsoft has just thrown a very big stone in the web application development pond and the ripples are going to be huge.

EVO Community Day - June 21st: Microsoft Campus Thames Valley Park Reading

I’m presenting at the EVO (Exchange, Vista, Office) Community day next Thursday the 21st June.


I’ll be doing a session that shows how you can use Powershell to read information from Exchange and getting it into SharePoint 2007.
Its really hard to know how to pitch a presentation like this as the mix of experiences is probably going to be wide, from people seeing this stuff for the first time to old hands. Anyway I’m looking forward to it.

The talk will cover some Powershell basics, calling the new Exchange Web Services from PowerShell and why we might still need to use WebDAV(hint Public Folders) and of course how we write to SharePoint.
I'll start posting some of the code samples over the next week.

There’s lots of other sessions including ones from Steve Smith on SharePoint and Richard Siddaway on PowerShell, should be a good one.

Heres the details of the Event:
The Next EVO Community Day - June 21st: Microsoft Campus Thames Valley Park Reading

Event Agenda
09:30 Start
09:30 - 10:00 Keynote
10:00 - 10:25 Introductions to groups (Including LiveMeeting, Longhorn, Virtualisation)
10:25 - 10:55 Vista
10:55 - 11:10 Break
11:10 - 12:40 Office, SharePoint, Groove
12:40 - 13:25 Lunch
13:25 - 14:55 Break-out sessions
14:55 - 15:10 Break
15:10 - 15:40 OCS + UM
15:40 - 16:40 Exchange and PowerShell
16:40 - 16:55 Break
16:55 - 17:30 Q&A

Further agenda information can be found here:  http://www.ukusergroups.co.uk/Agenda.html

To sign up and more information: http://www.ukusergroups.co.uk/