Procédure : créer et déployer des actions de flux de travail dans les solutions en bac à sable (sandbox)
Cette rubrique explique comment créer et déployer une action de flux de travail personnalisée dans un solution en bac à sable (sandbox).
Dernière modification : mercredi 13 avril 2011
S’applique à : SharePoint Foundation 2010
Disponible dans SharePoint Online
Une fois déployée, l’action personnalisée peut être utilisée dans un concepteur de flux de travail déclaratif tel que Microsoft SharePoint Designer.
Conseil |
---|
Vous trouverez un autre exemple dans How to: Create a Sandboxed Workflow Action. |
Si vous voulez qu’une action de flux de travail personnalisée puisse être utilisée dans SharePoint Designer par les utilisateurs d’une collection de sites, mais que vous n’avez pas l’autorisation d’installer un solution de batterie de serveurs, vous pouvez installer l’action dans un solution en bac à sable (sandbox). Le processus diffère sur deux points de la façon dont vous créez et installez une action de flux de travail personnalisée dans un solution de batterie de serveurs :
Vous devez créer une classe personnalisée et une méthode appelée par le moteur du flux de travail et qui s’exécute dans le processus de travail en bac à sable (sandbox). Cette méthode constitue l’activité de flux de travail de l’action de flux de travail personnalisée.
Le balisage déclaratif qui définit l’action de flux de travail pour SharePoint Designer est déployée dans un manifeste de fonctionnalité de la base de données de contenu, et non dans un fichier .actions du système de fichiers des serveurs Web frontaux, et le balisage WorkflowActions utilisé dans le manifeste de fonctionnalité est quelque peu différent du balisage WorkflowInfo utilisé dans un fichier .actions.
Pour créer la méthode de l’activité
Démarrez un projet SharePoint Microsoft Visual Studio. Il peut s’agir de l’un des types de projet autorisés dans solutions en bac à sable (sandbox), y compris Solution SharePoint vide. (En revanche, ce ne peut être Modèle de connectivité de données métiers, Modèle de site, Composant Visual WebPart, Flux de travail séquentiel ou Flux de travail de la machine à états.)
Dans l’Explorateur de solutions, double-cliquez sur le fichier .feature pour ouvrir le Concepteur de fonctionnalités.
Dans le Concepteur de fonctionnalités, définissez Étendue avec la valeur Site.
Ajoutez un élément Classe au projet.
Attribuez à la classe et à l’espace de noms les noms appropriés, puis ajoutez les instructions using pour System.Collections, Microsoft.SharePoint et Microsoft.SharePoint.UserCode.
Déclarez dans la classe une méthode qui contiendra la logique de votre activité de flux de travail personnalisée. Elle doit satisfaire aux conditions suivantes :
Elle doit être public.
Elle doit être static.
Elle doit retourner un objet Hashtable.
Elle doit accepter, comme premier paramètre, un objet SPUserCodeWorkflowContext. (Elle peut comporter des paramètres supplémentaires, si nécessaire.)
L’exemple suivant correspond à ce que vous devez avoir à ce stade.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using Microsoft.SharePoint; using Microsoft.SharePoint.UserCode; namespace Contoso.SharePoint.Workflow.Actions { class ListCreation { public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType) { } } }
Indiquez la logique de l’activité à l’intérieur de la méthode.
Important
Comme la méthode s’exécute à l’intérieur d’un processus de travail en bac à sable (sandbox), elle doit se conformer aux restrictions sur ce qu’il est possible d’exécuter dans le processus. Par exemple, le code ne peut accéder à rien en dehors de la collection de sites courante, ni lire ou écrire dans le système de fichiers du serveur. Pour plus d’informations, voir Restrictions imposées aux solutions en bac à sable (sandbox)
L’exemple précédent se poursuit ci-après.
public static Hashtable CreateList(SPUserCodeWorkflowContext context, String listTitle, String listDescription, String listType) { using (SPSite siteCollection = new SPSite(context.SiteUrl)) { SPWeb currentWeb = siteCollection.OpenWeb(context.WebUrl); SPListTemplateCollection availableListTypes = currentWeb.ListTemplates; SPListTemplate listTemplate = availableListTypes[listType]; Guid listID = currentWeb.Lists.Add(listTitle, listDescription, listTemplate); Hashtable result = new Hashtable(); result["ListID"] = listID.ToString(); return result; } }
Pour créer le balisage WorkflowActions
Dans le projet, ajoutez un élément Élément vide des modèles SharePoint 2010 de Visual Studio.
Dans l’Explorateur de solutions, ouvrez le fichier Elements.xml.
Ajoutez un élément WorkflowActions comme enfant de l’élément Elements.
Ajoutez un élément enfant Action à l’élément WorkflowActions, et définissez ses attributs. Voici un exemple :
<Action Name="Create a List" SandboxedFunction="true" Assembly="$SharePoint.Project.AssemblyFullName$" ClassName="Contoso.SharePoint.Workflow.Actions.ListCreation" FunctionName="CreateList" AppliesTo="all" UsesCurrentItem="true" Category="Contoso Actions"> </ Action>
Ajoutez un enfant RuleDesigner à l’élément Actions, et spécifiez son attribut Sentence.
<RuleDesigner Sentence="Create a %1 list named %2, and described as %3"> </RuleDesigner>
Pour chaque champ variable de l’Sentence, ajoutez un élément enfantFieldBind et configurez ses attributs.
<RuleDesigner Sentence="Create a %1 list named %2, and described as %3"> <FieldBind Id="1" Field="listType" DesignerType="Text" Text="list type"/> <FieldBind Id="2" Field="listTitle" DesignerType="Text" Text="list name"/> <FieldBind Id="3" Field="listDescription" DesignerType="Text" Text="description"/> </RuleDesigner>
Notes
Même si le précédent exemple d’un RuleDesigner n’utilise pas l’objet Hashtable retourné par la méthode de l’activité, il est possible d’utiliser la valeur renvoyée dans une règle. Si vous procédez ainsi, il doit exister pour elle un élément FieldBind dans l’élément RuleDesigner. Par exemple, vous pouvez ajouter « Résultat : % 4 » à l’attribut Sentence de l’élément Action, puis ajouter un élément FieldBindsupplémentaire tel que celui-ci : <FieldBind Id="4" Field="result" DesignerType="Text" Text="ID of new list"/>.
Attention N’ajoutez pas d’élément FieldBind pour un paramètre non référencé dans votre Sentence. En agissant ainsi, vous n’empêchez pas le déploiement de l’action du flux de travail, mais les utilisateurs recevront une erreur qu’ils ne pourront pas corriger s’ils essaient d’utiliser l’action dans un flux de travail.
Comme le moteur du flux de travail appelle votre méthode d’activité personnalisée, non votre propre code, vous devez lui communiquer les paramètres de la méthode. Ajoutez un élément Parameters, élément (WorkflowActions) à l’élément Action.
Le premier paramètre défini est toujours le paramètre SPUserCodeWorkflowContext obligatoire, et son balisage est toujours le même. Vous en avez une illustration dans l’exemple ci-après.
<Parameters> <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" /> </Parameters>
Notez que le type est identifié comme Microsoft.SharePoint.WorkflowActions.WorkflowContext, non comme Microsoft.SharePoint.UserCode.SPUserCodeWorkflowContext. La raison en est que le moteur de flux de travail génère un objet SPUserCodeWorkflowContext à partir des valeurs des propriétés d’un objet WorkflowContext.
Ajoutez un autre élément Parameter pour chacun des éléments FieldBind que vous avez ajoutés à l’élément RuleDesigner. L’attribut Name de l’élément Parameter doit correspondre à la valeur de l’attribut Fieldde l’élément FieldBindcorrespondant. L’exemple se poursuit ci-après.
<Parameters> <Parameter Name="__Context" Type="Microsoft.SharePoint.WorkflowActions.WorkflowContext, Microsoft.SharePoint.WorkflowActions" Direction="In" DesignerType="Hide" /> <Parameter Name="listType" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox"/> <Parameter Name="listTitle" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" /> <Parameter Name="listDescription" Type="System.String, mscorlib" Direction="In" DesignerType="TextBox" /> </Parameters>
Notes
Si vous avez un élément FieldBind pour la valeur retournée, vous devez également avoir un élément Parameter. La valeur de l’attribut Directiondu Parameter est « Out » ; par exemple, <Parameter Name="result" Type="System.String, mscorlib" Direction="Out" DesignerType="ParameterNames" />
Générez la solution, créez le package de solution et rendez le package de solution SharePoint (fichier .wsp) accessible aux administrateurs de la collection de sites.
Pour déployer l’action de flux de travail sur une collection de sites
La solution en bac à sable (sandbox) est installée et déployée par l’administrateur de la collection de sites, qui installe la solution sur la Galerie de solutions de la collection de sites. Il existe deux étapes à ce processus.
L’administrateur de la collection de sites télécharge le package de solutions sur la galerie.
L’administrateur de la collection de sites déploie le package, intitulé « activation » pour solutions en bac à sable (sandbox). Cette étape active automatiquement les composants fonctionnels du package. Si un validateur de solution est enregistré avec la collection de sites, il s’exécute aussi à l’étape de l’activation (déploiement).
Si la solution passe la validation avec succès et qu’elle n’a pas été bloquée par un administrateur de batterie, elle est prête à être utilisée sur la collection de sites.
Pour tester l’action du flux de travail
Ouvrez un site Web sur lequel le Composant fonctionnel de votre solution a été activé.
Dans le menu Actions du site, sélectionnez Modifier dans SharePoint Designer.
Créez un flux de travail qui utilise la nouvelle action de flux de travail et testez-le. Les étapes suivantes testent l’action de flux de travail de l’exemple en cours.
Après avoir ouvert le site Web (qui possède une liste Annonces) dans SharePoint Designer, cliquez sur Flux de travail dans le volet Navigation.
Dans le ruban, cliquez sur Flux de travail de liste et sélectionnez Annonces dans la liste déroulante.
Dans la boîte de dialogue Créer un flux de travail de liste, dans la zone Nom, tapez Retour du salon commercial, puis cliquez sur OK.
Dans l’aire de conception du flux de travail, cliquez sur Condition dans le ruban, puis sélectionnez Si le champ de l’élément actif est égal à la valeur dans la liste déroulante. La condition Si le champ est égal à la valeur apparaît à l’étape 1.
Cliquez sur le lien champ, puis sélectionnez Titre dans la liste déroulante.
Cliquez sur le lien égal à, et sélectionnez se termine par dans la liste déroulante.
Cliquez sur le lien valeur et tapez salon commercial dans la zone de texte qui s’ouvre. Appuyez sur Entrée.
Cliquez sur la zone (Commencez à taper sous la condition pour lui transmettre le focus.
Dans le ruban, cliquez sur Action. Vous verrez la nouvelle catégorie Actions Contoso dans la liste déroulante et la nouvelle action Créer une liste dans la liste.
Sélectionnez Créer une liste. La « phrase » que vous avez définie dans votre élément Action s’affiche.
Cliquez sur le lien type de liste, puis tapez Contacts dans la zone de texte qui s’ouvre. Appuyez sur Entrée.
Cliquez sur le lien nom de la liste, puis sur les points de suspension (...) pour ouvrir la boîte de dialogue Générateur de chaînes.
Tapez Contacts rencontrés au (avec un espace à la fin) dans la zone de texte.
Cliquez sur le bouton Ajouter ou modifier la recherche. La boîte de dialogue Rechercher la chaîne s’ouvre.
Dans la liste déroulante Source de données, sélectionnez Élément en cours.
Dans la liste déroulante Champ de la source, sélectionnez la boîte de dialogue Titre.
Cliquez sur OK pour fermer la boîte de dialogue, puis cliquez à nouveau sur OK pour fermer la boîte de dialogue Générateur de chaînes.
Cliquez sur le lien description, puis sur les points de suspension (...) pour ouvrir la boîte de dialogue Générateur de chaînes.
Tapez Contacts créés lors du (avec un espace à la fin) dans la zone de texte.
Cliquez sur le bouton Ajouter ou modifier la recherche. La boîte de dialogue Rechercher la chaîne s’ouvre.
Dans la liste déroulante Source de données, sélectionnez Élément en cours.
Dans la liste déroulante Champ de la source, sélectionnez la boîte de dialogue Titre.
Cliquez sur OK pour fermer la boîte de dialogue, puis cliquez à nouveau sur OK pour fermer la boîte de dialogue Générateur de chaînes.
Le texte de votre action doit maintenant être le suivant : Créer une liste Contacts intitulée Contacts rencontrés au [%Current Item:Title%], et décrite comme Contacts créés lors du [%Current Item:Title%].
Dans le ruban, cliquez sur Rechercher les erreurs et corrigez les erreurs détectées.
Dans le ruban, cliquez sur Paramètres du flux de travail.
Dans la zone Options de démarrage, activez Démarrer automatiquement le flux de travail lorsqu’un élément est créé.
Dans le ruban, cliquez sur Enregistrer.
Dans le ruban, cliquez sur Publier.
Fermez SharePoint Designer.
Dans un navigateur, ouvrez le site Web sur lequel vous avez publié le flux de travail et naviguez jusqu’à la liste Annonces.
Cliquez sur Ajouter une nouvelle annonce.
Pour le Titre, tapez Salon commercial de Berlin, puis cliquez sur Enregistrer.
Actualisez la page de la liste Annonces. Une nouvelle colonne intitulée Retour du salon commercial apparaît sur la liste et votre nouvel élément a pour valeur En cours ou Terminé.
Continuez d’actualiser la page jusqu’à ce que le flux de travail Retour du salon commercial affiche Terminé.
Cliquez sur Listes ou Tout le contenu du site dans le volet de navigation. Apparaît une nouvelle liste intitulée Contacts rencontrés au salon commercial de Berlin, accompagnée de la description Contacts créés lors du salon commercial de Berlin.
Voir aussi
Concepts
Qu'est-ce qui peut être implémenté dans une solution en bac à sable (sandbox) ?
Restrictions imposées aux solutions en bac à sable (sandbox)