Pour continuer sur l'intégration avec Silverlight et SharePoint (cf premier post), je vais maintenant vous parler du chargement de fichier XAML faisant appel à des DLL.
Comme je vous le montrais précédemment, j'upload plusieurs fichiers XAML via une feature : HelloWorld.xaml, Clock.xaml et Surface.xaml
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Module Url="XAML"
Path="XAML"
RootWebOnly="TRUE">
<File Url="Clock.xaml"
Name="Clock.xaml"
Type="GhostableInLibrary">
</File>
<File Url="HelloWorld.xaml"
Name="HelloWorld.xaml"
Type="GhostableInLibrary">
</File>
<File Url="Surface.xaml"
Name="Surface.xaml"
Type="GhostableInLibrary">
</File>
</Module>
</Elements>
Autant le fichier HelloWorld.xaml ne pose pas de problèmes particulier (cf premier post) autant le fichier Clock.xaml fait appel à une DLL et il va bien falloir que je trouve un moyen de la loader.
<Canvas x:Name="ParentCanvas"
Opacity="0"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="Page_Loaded"
x:Class="Clock.Page;assembly=ClientBin/Clock.dll"
>
...
</Canvas>
les fichiers XAML de Clock et Surface sont disponibles aux URLs suivantes : Clock ou Surface.
La première chose à faire est donc de mettre cette DLL à disposition de SharePoint. Pour celà, vous avez plusieurs possibilités :
- Changez "assembly=ClientBin/Clock.dll" en "assembly=/ClientBin/Clock.dll" et copier/coller la DLL dans le repertoire IIS correspondant à votre application web. Le problème étant qu'il n'y pas de moyen simple de déployer la DLL de cette façon dans l'univer SharePoint (ie : via un fichier solution).
- Changez "assembly=ClientBin/Clock.dll" en "assembly=/_layouts/ClientBin/Clock.dll" et déployer votre DLL via votre package wsp dans le répertoire Layouts se trouvant dans C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\. Ainsi si vous utilisez WSPBuilder, vous avez cette arborescence
A noter que dans les deux cas, il faudra modifier les permissions sur le répertoire ClientBin par "Execute Permissions : Script Only" (Sinon vous aurez un problème de chargement des DLL et Silverlight génèrera une erreur) :
Une fois ces modifications faites, votre horloge devrait s'afficher dans votre webpart sans problème.
Dans le prochain billet, nous verrons ensemble comment faire pour communiquer avec SharePoint pour récupérer des informations "live" via WebServices ou autres méthodes connues.
<Philippe/>