Publié mardi 8 juillet 2008 18:22 par Adrien Siffermann

[MOSS 2007] Publier ses formulaires InfoPath via feature

Lorsque l'on veut publier des formulaires InfoPath sur un serveur SharePoint, il faut passer par l'administration centrale pour le télécharger sur le serveur, puis l'activer pour chacune des collections de sites pour lesquelles on veut le rendre disponible. Cette solution, bien que simple, nécessite forcemment une intervention humaine, ce qui peut être pénalisant dans le cadre de multiples déploiements, ou tout simplement si l'on souhaite activer un formulaire InfoPath à la création d'une collection de sites.

Analysons de plus près ce que génèrent ces actions dans l'administration centrale.

Lorsqu'on choisit de télécharger un nouveau formulaire InfoPath, on peut se rendre compte qu'une solution est automatiquement ajoutée au magasin du serveur. Le nom de cette solution commence par "form-", suivi par le nom du formulaire précédemment téléchargé.

De plus, dans la liste des fonctionnalités de la collection de site, on voit apparaître une nouvelle fonctionnalité du nom de notre formulaire.

Et lorsque nous activons un formulaire pour une collection de sites, cette fonctionnalité se retrouve tout simplement activée.

Super ! Des solutions, des fonctionnalités, voilà un modèle de déploiement auquel nous sommes habitués dans SharePoint, et qui peut être automatisé. Il va donc nous falloir reproduire le comportement de celles qui sont générées par l'interface d'administration.

Grâce à une petite application console, on peut récupérer tous les fichiers .wsp correspondants aux solutions actuellement installés sur le serveur :

SPSite site = new SPSite("http://localhost");

SPFarm farm = site.WebApplication.Farm;

     foreach (SPSolution solution in farm.Solutions)

     {

         SPPersistedFile solutionFile = solution.SolutionFile;

         solutionFile.SaveAs(solution.Name);

     }

En renommant le fichier solution en .cab, on s'aperçoit qu'il contient les éléments suivants :

Il s'agit donc d'une solution assez simple, avec une seule feature, contenant un fichier de définition, un fichier de provisionning et le modèle de formulaire .xsn. La gestion des multiples versions du formulaire est assurée par un système de dossiers différents pour chaque version.

Pour pouvoir reproduire une telle fonctionnalité, il s'agit d'identifier les informations clés des fichiers XML. Il s'agit notamment d'un FeatureReceiver particulier, de quelques propriétés et du téléchargement du fichier XSN dans une librairie spécifique. Ainsi, voilà comment faire une simple fonctionnalité d'activation de formulaire InfoPath :

Feature.xml

<Feature xmlns="http://schemas.microsoft.com/sharepoint/"

    Id="D2BD3DFB-178E-4fda-89E1-77F67C45641D"

    Title="Identity Form"

    Description="Provides a simple form to give his identity."

    Hidden="FALSE"

    Scope="Site"

    Version="1.0.0.0"

    ReceiverClass="Microsoft.Office.InfoPath.Server.Administration.XsnFeatureReceiver"

    ReceiverAssembly="Microsoft.Office.InfoPath.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">

  <ElementManifests>

    <ElementManifest Location="Elements.xml" />

  </ElementManifests>

  <Properties>

    <Property Key="FeatureName" Value="IdentityForm" />

    <Property Key="OriginalFileName" Value="Identity.xsn" />

  </Properties>

  <ActivationDependencies>

    <!-- XsnFeatureReceiver -->

    <ActivationDependency FeatureId="C88C4FF1-DBF5-4649-AD9F-C6C426EBCBF5" />

    <!-- WSS Fields -->

    <ActivationDependency FeatureId="CA7BD552-10B1-4563-85B9-5ED1D39C962A" />

  </ActivationDependencies>

</Feature>

Elements.xml

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">

  <Module Name="XSN" Url="FormServerTemplates" RootWebOnly="TRUE">

    <File Url="Identity.xsn" Name="Identity.xsn" Type="GhostableInLibrary"/>

  </Module>

</Elements>

Il suffit juste d'ajouter le fichier .xsn dans le répertoire de la fonctionnalité pour que cela fonctionne. Comme nous avons déterminé un GUID spécifique pour notre fonctionnalité, nous pouvons alors demander automatiquement son activation dans le fichier de définition d'un site par exemple, ou tout simplement l'inclure dans une solution globale.

A noter que si votre formulaire contient du code C# ou VB pour exécuter des actions spécifiques, il faut alors juste mettre la DLL de ce code dans le répertoire de la fonctionnalité.

J'espère que cela vous aidera !

Adrien

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

# re: [MOSS 2007] Publier ses formulaires InfoPath via feature @ vendredi 11 juillet 2008 14:29

Il faut faire très attention quand on parle d'InfoPath.

Dans le cas présent cela correspond surtout à l'utilisation de Form Services et non d'InfoPath Client.

En terme de licencing c'est totalement différent, car Form Services nécessite les licences Enterprise de MOSS (pour le serveur) mais surtout les CAL Enterprise de SharePoint.

Dans le cas de formulaire juste InfoPath (utilisant le client InfoPath et non le Form server, les CAL Standard suffisent.

Fabrice

ROMELARD Fabrice


Les 10 derniers blogs postés

- [Refactoring] ReSharper pour Visual Studio 2010 (Preview) par Thomas Jaskula le il y a 2 heures et 18 minutes

- [Refactoring] Analyser vos exceptions avec ReSharper Exceptional par Thomas Jaskula le il y a 3 heures et 32 minutes

- SharePoint 2007 : patterns & practices SharePoint Guidance par Philippe Sentenac [MVP SharePoint] le il y a 17 heures et 12 minutes

- [Visual Studio 2010] Les tests cases c’est bien, mais je vais devoir tout réécrire ? par Etienne Margraff le il y a 18 heures et 8 minutes

- MVP[Gribouillon].AddYear par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le il y a 18 heures et 23 minutes

- Clinique INSIA - Projet de fin d’Etudes (Silverlight 3 MVVM et OutOfBrowser, WCF, TFS) - Part 1 par David REI le 07-02-2009, 23:38

- C’est la crise ? Bah pourquoi cramer du budget pub alors ? par Nix's Blog le 07-02-2009, 15:31

- Soyons MVP ! par TheSaib .NET blog le 07-02-2009, 12:15

- SharePoint : Gestion des Erreurs 6398, 7076 et 6482 par Blog Technique de Romelard Fabrice le 07-02-2009, 11:53

- EF avec WPF par Matthieu MEZIL le 07-02-2009, 10:18