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

- Etendre le Team Web Access de TFS 2012 – Step 0 par Philippe Didiergeorges Aka Philess le 05-23-2013, 23:48

- Simuler facilement l’envoi de mail par Blog de Jérémy Jeanson le 05-22-2013, 12:52

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le 05-20-2013, 14:50

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 12:59

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:09

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:03

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 08:27

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21