Procédure pas à pas : Utiliser des activités de flux de travail de confiance totale SharePoint avec Business Connectivity Services
Cette rubrique de procédure pas à pas explique comment créer une activité de confiance totale pour un flux de travail qui utilise Microsoft Business Connectivity Services (BCS). Elle décrit un scénario élémentaire d’approbation de dépenses qui utilise un flux de travail pour obtenir l’approbateur et des valeurs limites sûres à partir du système externe à l’aide de Business Connectivity Services. Ces valeurs correspondent à l’employé donné, spécifié par un ID d’employé, et au type de dépense.
Dernière modification : vendredi 16 juillet 2010
S’applique à : SharePoint Server 2010
Cette rubrique de procédure pas à pas est basée sur l’exemple BCS Full-Trust Workflow Activity, qui fait partie du Microsoft SharePoint 2010 Software Development Kit (SDK). Pour plus d’informations sur la façon d’obtenir cet exemple, voir Exemple de code : Exemple d’activité de flux de travail de confiance totale BCS.
Les activités de confiance totale sont écrites dans Microsoft Visual Studio et requièrent les éléments suivants :
Installation dans le Global Assembly Cache (GAC).
Un fichier .actions placé dans le dossier de modèle de flux de travail dans le système de fichiers de chaque serveur de la batterie.
Une entrée AuthorizedTypes dans le fichier web.config sur chaque serveur, afin d’autoriser l’exécution de l’assembly. Ces entrées doivent être déployées sur chaque serveur de la batterie et nécessitent par conséquent des autorisations beaucoup plus élevées et une attention toute particulière.
Conseils relatifs à l’utilisation des actions BCS et erreurs courantes
Utilisez des activités de flux de travail de confiance totale pour Business Connectivity Services dans les cas suivants :
Vous êtes autorisé à déployer des activités de confiance totale.
Vous souhaitez effectuer l’une des opérations suivantes :
Lire, créer et mettre à jour des données dans un système externe à partir d’un flux de travail avec ou sans avoir de liste externe déjà mise en service.
Effectuer le moins d’appels possibles au système externe.
Utiliser une logique complexe qui requiert un bouclage sur plusieurs éléments ou associations à d’autres types de contenu externe sans utiliser le Service d’exécution du code bac à sable (Sandbox).
Lors de l’utilisation d’activités de flux de travail de confiance totale, prenez en compte les éléments suivants :
Les activités de confiance totale, comme leur nom l’indique, s’exécutent en mode de confiance totale. Cela signifie que vous devez savoir exactement ce que fait l’activité et approuver l’auteur de l’activité comme s’il s’agissait d’un administrateur avant de déployer l’activité.
Si vous utilisez cette activité dans Microsoft SharePoint Designer, vous devez renvoyer une quantité fixe d’éléments car SharePoint Designer ne prend pas en charge le bouclage.
Génération de l’activité de flux de travail de confiance totale
L’activité que vous allez générer lors de cette procédure renvoie l’approbateur et une limite sûre pour un type de dépense et un ID d’employé donnés. Les informations relatives au type de contenu externe sont déjà intégrées dans l’activité et celle-ci fonctionnera uniquement sur ce type de contenu externe.
Création de l’activité de flux de travail
Cette procédure pas à pas répond au même scénario que celle dans Procédure : création d’actions de flux de travail en sandbox. Toutefois, ici on ne travaille pas avec une liste externe ; on atteint les objectifs du scénario uniquement à l’aide des API Service BDC (Business Data Connectivity). Ceci est légèrement plus compliqué que la simple lecture d’un élément dans une liste car les API du service BDC offrent beaucoup plus de flexibilité qu’une liste plate. Avant d’examiner le code, vous devez comprendre les propriétés qui sont exposées par cette activité. Bien que toutes les propriétés de l’activité soient exposées de manière à pouvoir être modifiées dans SharePoint Designer, certains paramètres par défaut sont intégrés de sorte que vous n’ayez pas à entrer les informations de celles qui doivent demeurer cohérentes d’un déploiement à l’autre.
Tableau 1. Exemples de propriétés d’activité de flux de travail
Nom |
Description |
---|---|
EntityName |
Nom du type de contenu externe. Vous coderez en dur cette valeur dans l’exemple en tant que valeur par défaut, mais vous pouvez la remplacer dans la grille de propriétés. Dans un environnement de production, il peut être préférable d’interdire totalement le passage d’EntityName, EntityNamespace et LobSystemIsntanceName à l’activité, car tout utilisateur de SharePoint Designer pourrait modifier le flux de travail de sorte qu’il pointe vers un type de contenu externe différent et serait susceptible d’obtenir des informations auxquelles il ne devrait pas avoir accès. Ces propriétés sont là principalement pour vous aider à comprendre comment le code fonctionne. |
EntityNamespace |
Espace de noms du type de contenu externe. Vous le coderez en dur dans l’exemple en tant que valeur par défaut, mais vous pouvez remplacer cette valeur dans la grille de propriétés. |
LobSystemInstanceName |
Nom d’instance du système externe. Tous les noms d’instances dans SharePoint Designer sont les noms que vous tapez lors de la découverte du système externe. Cependant, les types de contenu externe créés en dehors de SharePoint Designer peuvent avoir plusieurs noms, raison pour laquelle vous devez en spécifier un. Vous le coderez en dur dans l’exemple en tant que valeur par défaut, mais vous pouvez remplacer cette valeur dans la grille de propriétés. |
EmployeeID |
N° d’employé qui sera recherché. |
Category |
Catégorie de dépenses. L’implémentation dans l’exemple prend en charge Morale, Equipment et Travel comme uniques entrées valides pour ce paramètre. |
Approver |
Cette valeur est renvoyée à l’utilisateur à partir du système externe. Il s’agit de l’utilisateur qui doit approuver la dépense. |
SafeLimit |
Cette valeur est renvoyée à l’utilisateur à partir du système externe. Il s’agit de la limite pour l’utilisateur en question et pour ce type de dépense. |
Pour comprendre ce que fait ce code, observez le code d’activité dans BDCReadActivity.cs. Notez que tout le code est contenu dans la méthode Execute, que l’hôte de flux de travail appelle pour exécuter l’activité. Dans cet appel, la première action BDC à effectuer consiste à obtenir le magasin de métadonnées qui contient le type de contenu externe SafeLimits, comme illustré dans le code suivant.
private IMetadataCatalog GetMetadataCatalog(SPSite site, ISharePointService hostInterface)
Ce code peut paraître simple, mais plusieurs choses méritent une attention particulière. Tout d’abord, l’étendue du catalogue porte sur la batterie, et non sur le site. Cela signifie que cette activité fonctionnera sur tout site qui utilise le même service BDC. Ensuite, les API SharePoint utilisées pour obtenir le magasin de métadonnées retournent la valeur Null si l’élément est introuvable. Ce comportement diffère de celui des API BDC, qui lèvent des exceptions si des éléments sont introuvables.
Maintenant que nous avons le magasin de métadonnées, nous devons trouver le type de contenu externe et renvoyer les données correctes, comme illustré dans l’exemple de méthode suivant.
private void GetSafeLimits(IMetadataCatalog catalog, ISharePointService hostInterface)
Notez dans l’exemple de code que GetEntity est dans un bloc try/catch ; par conséquent, si le type de contenu externe est supprimé ou est absent de ce catalogue, une exception MetadataObjectNotFoundException est levée. Pour gérer cette exception, vous devez ajouter une entrée dans la liste d’historique de flux de travail pour signaler l’exception, puis relever l’exception afin d’autoriser l’échec du flux de travail.
Une fois que vous disposez d’un type de contenu externe, vous devez rechercher une instance spécifique de ce type de contenu externe. Pour cela, utilisez la méthode FindSpecific de IEntity. Cette méthode prend deux paramètres. Le premier est l’Identity de l’instance spécifique. Dans cet exemple, EmployeeID ayant été défini comme identificateur, nous devons passer EmployeeID comme Identity. On constate à ce stade que l’identité est spécifique au type de contenu externe. Un autre type de contenu externe peut avoir un identificateur différent avec un nom différent et même un type différent. Le deuxième paramètre est l’instance de système externe que nous utilisons pour rechercher l’élément. Comme mentionné plus haut, puisqu’on utilise SharePoint Designer il n’existe qu’une seule instance de système externe et on utilise pour elle le nom stocké dans le code. Notez également que FindSpecific lève une exception différente si l’élément est introuvable : ObjectNotFoundException. Là encore, il faut intercepter cette exception et renvoyer une erreur conviviale à l’utilisateur avant de relever l’exception, de sorte que le flux de travail puisse échouer. Une fois que vous avez l’instance d’entité, le reste du travail est simple. Vous pouvez utiliser les noms des champs entre crochets pour obtenir les valeurs de l’instance.
Voici les étapes nécessaires à la création d’un flux de travail basé sur l’exemple BCS Full-Trust Workflow Activity.
Pour configurer l’exemple
Suivez les étapes fournies dans Exemple de code : Exemple d’activité de flux de travail de confiance totale BCS pour télécharger et installer l’exemple BCS Full-Trust Workflow Activity.
Dans SharePoint Designer, créez un type de contenu externe nommé SafeLimits, avec un espace de noms BCSBlog et une instance de système externe nommée SafeLimit. Notez que ces valeurs sont codées en dur dans l’exemple de code d’activité. Assurez-vous également que le type de contenu externe possède les sept champs suivants : EmployeeID, EquipmentLimit, EquipmentApprover, MoraleLimit, MoraleApprover, TravelLimit et TravelApprover.
Notes
Vous devez configurer un système externe, tel qu’une base de données, avec une structure de données qui contient les champs répertoriés ici.
(Facultatif) Pour vérifier le type de contenu externe, vous pouvez créer une liste externe.
Ouvrez la solution dans Visual Studio 2010.
Générez la solution.
Cela génère BCSReadActivity.dll, qui est déployé dans le Global Assembly Cache du serveur Web frontal (%windir%\assembly) de sorte que SharePoint Server puisse rechercher et charger l’activité.
Avant de générer la solution, assurez-vous que les valeurs par défaut de EntityName, EntityNamespace, et LobSystemInstanceName sont mise à jour de façon à correspondre à votre paramètre. Ces valeurs sont définies dans la méthode GetSafeLimits.
Déployer la solution
Ajoutez l’assembly au fichier web.config sur chaque serveur de batterie SharePoint.
Ouvrez le fichier web.config de votre site SharePoint sur le serveur de batterie.
Dans la section inférieure, recherchez <System.Workflow.ComponentModel.WorkflowCompiler>. À l’intérieur de cette balise doivent se trouver une section <authorizedTypes> et une entrée pour chaque ensemble de types. Ajoutez la ligne suivante (assurez-vous que les informations de type sont correctes, notamment le jeton de clé publique).
<authorizedType Assembly="BCSReadActivity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=90f597110ccda6ac" Namespace="Microsoft.SharePoint.Samples" TypeName="SafeLimitActivity" Authorized="True" />
Déployez le fichier BCSReadActivity.ACTIONS sur chaque serveur de batterie SharePoint.
Sur chaque serveur de batterie, copiez BCSReadActivity.ACTIONS dans le dossier suivant dans le dossier d’installation de SharePoint Server : %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\template\1033\workflow.
Notes
1033 est le LCID du paramètre régional Anglais-US. Si vous utilisez un autre paramètre régional, ce nom de dossier sera différent.
Exécutez une commande iisreset sur chaque serveur de batterie.
Pour créer le flux de travail
Créez une bibliothèque de documents pour les rapports de dépenses et nommez-la ExpenseReports.
Ajoutez les colonnes suivantes :
EmployeeID
ExpenseType comme champ de choix avec les choix suivants : Morale, Equipment, Travel
Approver
Limit
Dans SharePoint Designer, dans la bibliothèque de documents ExpenseReports, cliquez sur Nouveau flux de travail de liste.
Nommez le flux de travail et fournissez une description, puis cliquez sur OK.
Notes
À ce stade, vous travaillez dans le concepteur de flux de travail et vous pouvez commencer à ajouter des actions.
Insérez l’action Obtenir Safe Limits pour Employee.
Laissez les deux paramètres tels quels. Il s’agit des variables de sortie de la fonction pour Approver et SafeLimit.
Pour le troisième paramètre, spécifiez la Category. Celle-ci étant déjà définie dans votre liste, sélectionnez comme précédemment la colonne ExpenseType à l’aide de CurrentItem au moyen du bouton de fonction (fx).
Pour le dernier paramètre, sélectionnez la colonne EmployeeID à l’aide de CurrentItem au moyen du bouton de fonction (fx).
Vous devriez maintenant voir un nouveau flux de travail de liste comme illustré à la Figure 1.
Figure 1. Nouveau flux de travail de liste dans Microsoft SharePoint Designer
Ajoutez une autre action pour écrire les variables de sortie de la fonction pour Approver et SafeLimit.
Insérez l’action Mettre à jour l’élément de la liste.
Cliquez sur le lien cette liste.
Cliquez sur Ajouter, puis sélectionnez Approver.
Dans la boîte de dialogue Rechercher une seule ligne de texte, cliquez sur le bouton fx.
Pour Source de données, sélectionnez Paramètres et variables du flux de travail.
Pour **Champ de la source **, sélectionnez Variable : Approver.
Fermez la boîte de dialogue.
Répétez les étapes c à g pour ajouter la variable pour SafeLimit.
Enregistrez le flux de travail et publiez-le.
Notes
Avant d’exécuter le flux de travail, assurez-vous d’avoir configuré les autorisations appropriées dans votre modèle BDC pour le système externe et le type de contenu externe de sorte que le flux de travail puisse accéder à ces ressources. Il est également recommandé d’utiliser le Service Banque d’informations sécurisé comme type d’authentification pour le modèle BDC. Pour plus d’informations sur les flux de travail dans Business Connectivity Services, voir Procédure : Utiliser Business Connectivity Services avec des flux de travail SharePoint.
Pour exécuter le flux de travail
Remplissez votre système externe de données.
Créez un élément dans la bibliothèque de documents ExpenseReports. Assurez-vous que les valeurs de type de dépense et d’ID d’employé que vous avez ajoutées existent dans le système interne.
Déclenchez le flux de travail.
Les champs de valeurs Approver et SafeLimit dans l’entrée de bibliothèque de documents doivent être remplis par le flux de travail avec des valeurs tirées du système externe.