Procédure : création d’actions de flux de travail en sandbox
Dernière modification : vendredi 16 juillet 2010
S’applique à : SharePoint Server 2010
Dans cet article
Scénario d’action de flux de travail en sandbox
Scénarios courants d’utilisation des actions de flux de travail en sandbox
Conseils d’utilisation des actions de flux de travail en sandbox
Cette rubrique décrit comment créer des actions de flux de travail mis en sandbox qui lisent des listes externes en utilisant le modèle objet de liste SharePoint.
La procédure de cette rubrique correspond à l’exemple de flux de travail en sandbox qui fait partie de Microsoft SharePoint 2010 Software Development Kit (SDK). Pour savoir comment se procurer cet exemple, voir Exemple de code : exemple de flux de travail sandbox.
Les actions de flux de travail en sandbox sont des fonctions de code qui peuvent être utilisées dans un concepteur de flux de travail déclaratif et qui sont appelées à partir d’un flux de travail déclaratif. Une action de flux de travail en sandbox est écrite dans Microsoft Visual Studio et téléchargée dans la galerie de solutions SharePoint. Ces actions s’exécutent de manière isolée pour garantir la protection du processus système principal et le respect des limites.
À l’aide des actions de flux de travail en sandbox, vous pouvez lire un élément dans la liste externe une seule fois et le stocker de façon à pouvoir réutiliser ces données. Cela permet de réduire le nombre de lectures effectuées sur une liste externe qu’il faudrait sinon effectuer lorsque vous travaillez avec des activités de flux de travail SharePoint. La lecture d’une colonne d’une liste externe en utilisant les activités de flux de travail SharePoint intégrées appelle une méthode Read List (Finder) et une méthode Read Item (SpecificFinder), ce qui est inutile. Les actions de flux de travail en sandbox évitent les appels inutiles et réduisent la charge du système externe.
Scénario d’action de flux de travail en sandbox
Généralement, il est préférable d’utiliser un flux de travail avec Microsoft Business Connectivity Services (BCS) dans un scénario où une approbation conditionnelle est nécessaire et où la condition de l’approbation est fonction d’une valeur stockée dans un système externe. Par exemple, envisagez un scénario d’approbation de dépense dans lequel la note de frais est envoyée pour approbation à un responsable uniquement si le montant total des dépenses dépasse une limite raisonnable. Si le montant des frais est inférieur ou égal à la limite raisonnable, les frais sont automatiquement approuvés et ne nécessitent pas d’approbation explicite. Dans la mesure où la limite raisonnable de dépense peut varier, elle est stockée dans un système externe et recherchée plus tard par le flux de travail par l’intermédiaire d’une liste externe.
L’exemple de cette rubrique décrit en détail les étapes pour créer une liste externe qui est basée sur le type de contenu externe SafeLimit (limite raisonnable), un flux de travail et la variable de recherche.
Notes
Ce scénario suppose que vous êtes familiarisé avec l’utilisation des activités d’élément de liste SharePoint Designer par rapport à des listes externes, si vous les avez utilisées pour manipuler des listes SharePoint. La principale différence dans la façon dont les activités d’élément de liste fonctionnent est que vous ne trouvez pas un élément par son identificateur (ID), mais par sa colonne d’identification.
Pour générer le flux de travail de limite raisonnable à l’aide des activités SharePoint Designer
Dans SharePoint Designer, créez un type de contenu externe et nommez-le SafeLimit.
Le type de contenu externe doit avoir deux champs : EmployeeID et Limit (pour la valeur de limite raisonnable).
Créez une liste externe en utilisant le type de contenu externe SafeLimit et nommez-la SafeLimits.
Créez une bibliothèque de documents pour les notes de frais et nommez-la ExpenseReports. Ensuite, ajoutez une colonne pour EmployeeID.
Dans SharePoint Designer, dans la bibliothèque de documents ExpenseReports, cliquez sur Flux de travail Nouvelle liste.
Tapez un nom de flux de travail, indiquez sa description, puis cliquez sur Continuer.
Maintenant, dans le Concepteur de flux de travail, vous pouvez ajouter de nouvelles activités.
Insérez l’action Définir la variable de flux de travail.
Cliquez sur le lien hypertexte de variable de flux de travail, puis cliquez sur Créer une nouvelle variable.
Nommez cette nouvelle variable SafeLimit.
Cliquez sur la valeur, puis sur le bouton fx pour créer la recherche dans la liste externe.
Pour Source de données, cliquez sur la liste d’externe SafeLimits.
Il s’agit de la source de données à partir de laquelle extraire les valeurs de limite raisonnable.
Pour Champ de la source, choisissez le champ qui indique la limite raisonnable. Dans cet exemple, il s’appelle Limit.
Définissez le champ à utiliser pour rechercher l’élément. Dans ce scénario, vous souhaitez rechercher l’élément de liste externe par l’ID d’employé, par conséquent, pour Champ, cliquez sur le champ EmployeeID.
Sélectionnez la valeur à rechercher. Dans ce scénario, vous allez choisir le champ EmployeeID de l’élément en cours, donc cliquez sur le bouton fx dans la boîte de dialogue.
Dans la boîte de dialogue qui s’ouvre, pour Source de données, cliquez sur Élément en cours ; pour Champ de la source, cliquez sur EmployeeID.
La figure 1 illustre la boîte de dialogue de recherche.
Figure 1. Boîte de dialogue de recherche de la limite raisonnable
Cliquez sur OK pour créer la variable de recherche.
Après avoir créé la variable de recherche, un avertissement s’affiche, tel que celui de la figure 2. Cet avertissement apparaît parce que la colonne sélectionnée pour trouver l’élément dans la liste externe comporte plusieurs valeurs. Dans ce cas, l’avertissement vous informe que la recherche retournera la première valeur si plusieurs valeurs sont trouvées. Vous rencontrez généralement cet avertissement avec les éléments de liste externe.
Figure 2. Avertissement de la recherche
Le scénario suivant étend le scénario précédent en ajoutant des limites raisonnables pour certaines catégories budgétaires au lieu d’avoir une seule limite raisonnable pour toutes les soumissions de notes de frais. Par exemple, vous pouvez avoir des limites raisonnables pour les frais de déplacement différentes de celles pour les dépenses d’équipement. Lorsqu’un employé soumet sa note de frais, le flux de travail vérifie la catégorie et la limite de dépense associée pour déterminer l’action à effectuer.
Pour créer l’action de flux de travail en sandbox
L’Exemple de code : exemple de flux de travail sandbox implémente les actions que cette rubrique décrit. À haut niveau, l’action doit lire un élément une seule fois, puis lire d’autres propriétés à partir de cette transaction unique vers le système externe. Cette action doit également apparaître dans Microsoft SharePoint Designer 2010 pour que d’autres utilisateurs puissent écrire des flux de travail par rapport à cette liste. Comme SharePoint Designer ne prend pas en charge l’exécution de boucle, l’action ne peut pas retourner un tableau d’éléments. Au lieu de cela, vous pouvez créer une action pour lire un élément et stocker ses propriétés dans une chaîne XML. Ensuite, vous créerez une autre action pour lire une valeur de champ spécifique à partir de cette chaîne XML dans une variable SharePoint Designer. Vous pouvez optimiser cette action, par exemple, pour stocker uniquement les valeurs que vous avez besoin de lire, mais cet exemple est implémenté pour être le moyen réutilisable le plus générique possible de renvoyer les propriétés d’un élément avec n’importe quel jeu de propriétés.
La méthode avec la signature suivante lit des valeurs dans la liste externe.
public static Hashtable GetExternalListItemByField(SPUserCodeWorkflowContext context, String externalListId, string fieldName, string fieldValue)
Cette méthode prend un identificateur (ID) de liste externe et trouve un élément dans cette liste en recherchant le premier élément ayant la valeur « fieldValue » pour un champ nommé « fieldname ». Après avoir trouvé l’élément, elle place chaque champ dans une table de données et l’enregistre au format XML de manière à ce que vous puissiez l’analyser ensuite. La fonction est suffisamment générique pour fonctionner aussi sur des éléments de liste SharePoint. Cela peut contribuer à améliorer les performances parce qu’elle appelle l’outil de recherche et l’outil de recherche spécifique une seule fois et obtient toutes les propriétés ; toutefois, vous appellerez toujours l’outil de recherche. Vous pouvez optimiser cette action pour n’appeler l’outil de recherche que deux fois, comme décrit plus loin dans la rubrique.
Après avoir lu l’élément, appelez la méthode avec la signature suivante pour rechercher le champ spécifié par le paramètre value.
public static Hashtable GetItemDataFromString(SPUserCodeWorkflowContext context, string itemData, string value)
Cette méthode accepte la chaîne XML avec toutes les propriétés de l’élément dans le paramètre itemData, reconstruit la table de données et recherche le champ spécifié par le paramètre value. Cela entraîne le rechargement de la table de données à chaque appel de la fonction, mais peut être beaucoup plus rapide que d’accéder au système externe à chaque appel. Cela permet également à l’utilisateur SharePoint Designer de choisir les colonnes voulues au lieu du codage en dur dans la méthode.
L’autre fichier d’intérêt dans le projet est le fichier elements.xml dans le répertoire BCSWorkflowActivities. Ce fichier indique à SharePoint Designer la façon dont l’action en sandbox doit être présentée dans SharePoint Designer et comment l’utilisateur peut mapper les propriétés. Les détails de ce fichier dépassent la portée de cette rubrique, mais le fichier a la même structure de base que le fichier ACTIONS.xml utilisé dans Office SharePoint Designer 2007.
Pour utiliser l’exemple d’activités en sandbox BCS
Téléchargez et décompressez l’exemple d’activités en sandbox BCS à partir du centre de téléchargement Microsoft (voir Référence SharePoint 2010 : Kit de développement logiciel (éventuellement en anglais)).
Ouvrez l’exemple dans Visual Studio 2010.
Appuyez sur F6 pour générer la solution.
Déployez la solution.
Si vous déployez la solution sur un autre ordinateur, vous pouvez utiliser le package de solution (fichier .wsp) créé à l’étape 3 et effectuer les opérations suivantes :
Dans Paramètres du site, sous Galeries, sélectionnez Solutions.
Téléchargez le fichier .wsp puis activez-le.
Pour créer le flux de travail
Dans SharePoint Designer, créez un type de contenu externe et nommez-le SafeLimit.
Le type de contenu externe doit avoir les 7 champs suivants : EmployeeID, EquipmentLimit, EquipmentApprover, MoraleLimit, MoralApprover, TravelLimit et TravelApprover.
Créez une liste externe pour le type de contenu externe SafeLimit et nommez-la SafeLimits.
Créez une bibliothèque de documents pour les notes de frais et nommez-la ExpenseReports.
Ajoutez deux colonnes pour EmployeeID et ExpenseType.
ExpenseType doit être un champ de choix avec les choix suivants : Morale, Equipment et Travel.
Dans SharePoint Designer, dans la bibliothèque de documents ExpenseReports, cliquez sur Flux de travail Nouvelle liste.
Tapez un nom de flux de travail, indiquez sa description, puis cliquez sur Continuer.
À ce stade, vous êtes dans le Concepteur de flux de travail et vous pouvez ajouter des nouvelles actions.
Insérez la fonction en sandbox Obtenir un élément de liste externe par champ.
Choisissez la liste externe SafeLimits pour le premier paramètre.
Sélectionnez la colonne EmployeeID utilisant CurrentItem à l’aide du bouton fx pour le second paramètre.
Tapez EmployeeID pour le troisième paramètre.
Vous pouvez laisser le paramètre de sortie inchangé (sa valeur par défaut est ItemString).
Pour lire une colonne de données à partir de cet élément que vous avez stocké dans ItemString, insérez la fonction en sandbox Lire les données d’élément de liste externe.
Pour le premier paramètre, tapez un champ que vous souhaitez afficher. Pour ce scénario, utilisez la valeur stockée dans le champ de choix ExpenseType et ajoutez-lui Limit.
Pour le deuxième paramètre, choisissez la variable ItemString.
Le dernier paramètre est la valeur qui est trouvée ; nommez-la limit.
Répétez l’étape 8 et ajoutez Approver à la valeur ExpenseType (au lieu de Limit ) et remplacez la sortie par l’approbateur.
La figure 1 illustre le flux de travail dont vous disposez à présent.
Figure 1. Flux de travail en sandbox
Scénarios courants d’utilisation des actions de flux de travail en sandbox
Utilisez les actions de flux de travail en sandbox pour les listes externes si vous n’êtes pas autorisé à déployer des activités avec autorisation totale et que vous souhaitez effectuer l’une des opérations suivantes :
Lire un grand nombre de valeurs à partir d’une liste externe.
Écrire une fonction simple qui fonctionne sur des listes SharePoint et des listes externes.
Conseils d’utilisation des actions de flux de travail en sandbox
Les actions de flux de travail en sandbox peuvent provoquer l’échec du flux de travail s’il ne peut pas obtenir un domaine d’application du processus de travail en sandbox. Le nombre de domaines d’application qui sont configurés par un administrateur est fixe et les domaines d’application sont partagés par tout le code mis en sandbox, par exemple des actions, des composants WebPart et des récepteurs d’événements. Pour cette raison, soyez prudent lors de l’utilisation des actions en sandbox dans les situations suivantes :
Les actions de code en sandbox complexes dont l’exécution prend du temps.
Les listes externes lentes.
Un environnement dans lequel de nombreux flux de travail s’exécuteront à peu près en même temps.
Les scénarios qui ne peuvent pas gérer les erreurs de flux de travail.
Le service de code en sandbox peut exécuter ces appels avec un compte qui est différent du compte du pool d’applications ; vous devez donc vous assurer que ce compte est défini dans le Service Banque d’informations sécurisé.
Si vous stockez une copie locale des données que vous avez lues à partir d’un élément de liste externe, comme dans cet exemple, vous devez vous assurer que vos données sont actualisées.