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

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le 10-11-2008, 21:55

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52