Mise à jour en bloc des champs personnalisés et création de sites de projet à partir d’un flux de travail dans Project Online
Pour aider les clients à tirer le meilleur parti de Project Online et à améliorer l’extensibilité et la flexibilité de notre service, nous avons ajouté deux méthodes au modèle objet côté client que vous pouvez utiliser dans Project Online applications et workflows.
Valeur | |
---|---|
UpdateCustomFields |
Met à jour en bloc les champs personnalisés du projet. Pour Project Online uniquement. Disponible uniquement dans l’API REST. |
CreateProjectSite |
Crée un site Project. Pour Project Online uniquement. Disponible dans l’API REST, le modèle objet client managé et le modèle objet client JavaScript. |
En plus d’offrir plus de flexibilité, ces méthodes offrent également des améliorations significatives des performances lors de l’enregistrement et de la publication de projets dans un workflow. Cet article explique comment utiliser les méthodes dans l’API REST et fournit des instructions pour créer un flux de travail qui met à jour en bloc des champs personnalisés et un flux de travail qui crée un site Project.
Remarque
Pour en savoir plus sur l’appel d’API REST à partir de flux de travail SharePoint 2013, voir Présentation et utilisation de l’interface REST SharePoint 2013 et Appel de l’API REST SharePoint 2013 à partir d’un flux de travail Designer SharePoint.
Mettre à jour en bloc les champs personnalisés d’un projet à partir d’un workflow
Auparavant, les workflows ne pouvaient mettre à jour qu’un seul champ personnalisé à la fois. La mise à jour de champs personnalisés de projet un par un peut entraîner une mauvaise expérience de l’utilisateur final lorsque les utilisateurs passent d’une page de détails de projet à l’autre. Chaque mise à jour nécessitait une demande de serveur distincte à l’aide de l’action Définir un champ de projet , et la mise à jour de plusieurs champs personnalisés sur un réseau à latence élevée et à faible bande passante entrait une surcharge non triviale. Pour résoudre ce problème, nous avons ajouté la méthode UpdateCustomFields à l’API REST qui vous permet de mettre à jour en bloc les champs personnalisés. Pour utiliser UpdateCustomFields, vous transmettez un dictionnaire qui contient les noms et les valeurs de tous les champs personnalisés que vous souhaitez mettre à jour.
La méthode REST se trouve au point de terminaison suivant :
https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()
Remarque
Remplacez l’espace <site-url>
réservé dans les exemples par l’URL de votre site Project Web App (PWA) et l’espace réservé par l’UID <guid>
de votre projet.
Cette section explique comment créer un flux de travail qui met à jour en bloc les champs personnalisés d’un projet. Le flux de travail suit les étapes générales suivantes :
Attendez que le projet que vous souhaitez mettre à jour soit archivé.
Créez un jeu de données qui définit toutes vos mises à jour de champs personnalisés pour le projet.
Consultez le projet.
Appelez UpdateCustomFields pour appliquer les mises à jour de champs personnalisés au projet.
Journaliser les informations pertinentes dans la liste de l’historique du flux de travail (si nécessaire).
Publiez le projet.
Archivez le projet.
Le flux de travail final de bout en bout se présente comme suit :
de bout en bout
Pour créer un workflow qui met à jour en bloc les champs personnalisés
Optional. Stockez l’URL complète de votre projet dans une variable que vous pouvez utiliser tout au long du flux de travail.
Ajoutez l’action Attendre l’événement de projet au flux de travail et choisissez l’événement Lors de l’enregistrement d’un projet .
Créez un dictionnaire requestHeader à l’aide de l’action Générer un dictionnaire . Vous allez utiliser le même en-tête de requête pour tous les appels de service web dans ce workflow.
Ajoutez les deux éléments suivants au dictionnaire.
Nom Type Valeur Accepter String application/json ; odata=verbose Content-Type String application/json ; odata=verbose Créez un dictionnaire requestBody à l’aide de l’action Générer un dictionnaire . Ce dictionnaire stocke toutes les mises à jour de champs que vous souhaitez appliquer.
Chaque mise à jour de champ personnalisé nécessite quatre lignes : le type de métadonnées (1) du champ, (2) la clé, (3) la valeur et (4) le type de valeur.
__metadata/type Type de métadonnées du champ. Cet enregistrement est toujours le même et utilise les valeurs suivantes :
Nom : customFieldDictionary(i)/__metadata/type (où i est l’index de chaque champ personnalisé dans le dictionnaire, en commençant par 0)
Type : String
Valeur : SP. KeyValue
Clé Nom interne du champ personnalisé, au format : Custom_ce23fbf43fa0e411941000155d3c8201
Vous pouvez trouver le nom interne d’un champ personnalisé en accédant à son point de terminaison InternalName :
https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/InternalName
Si vous avez créé vos champs personnalisés manuellement, les valeurs diffèrent d’un site à l’autre. Si vous envisagez de réutiliser le workflow sur plusieurs sites, assurez-vous que les ID de champ personnalisés sont corrects.
Valeur Valeur à affecter au champ personnalisé. Pour les champs personnalisés liés à des tables de recherche, vous devez utiliser les noms internes des entrées de la table de recherche au lieu des valeurs réelles de la table de recherche.
Vous trouverez le nom interne de l’entrée de la table de recherche au point de terminaison suivant :
https://<site-url>/_api/ProjectServer/CustomFields('<guid>')/LookupEntries('<guid>')/InternalName
Si vous disposez d’un champ personnalisé de table de recherche configuré pour accepter plusieurs valeurs, utilisez
;#
pour concaténer des valeurs (comme indiqué dans l’exemple de dictionnaire ci-dessous).Valuetype Type du champ personnalisé que vous mettez à jour.
Pour les champs Text, Duration, Flag et LookupTable, utilisez Edm.String
Pour les champs Nombre, utilisez Edm.Int32, Edm.Double ou tout autre type de nombre accepté par OData
Pour les champs Date, utilisez Edm.DateTime
L’exemple de dictionnaire ci-dessous définit des mises à jour pour trois champs personnalisés. Le premier concerne un champ personnalisé de table de recherche de valeurs multiples, le second pour un champ numérique et le troisième pour un champ de date. Notez comment l’index customFieldDictionary s’incrémente .
Remarque
Ces valeurs sont à des fins d’illustration uniquement. Les paires clé-valeur que vous utiliserez dépendent de vos données PWA.
Nom Type Valeur customFieldDictionary(0)/__metadata/type String SP. KeyValue customFieldDictionary(0)/Key String Custom_ce23fbf43fa0e411941000155d3c8201 customFieldDictionary(0)/Value String Entry_b9a2fd69279de411940f00155d3c8201 ;#Entry_baa2fd69279de411940f00155d3c8201 customFieldDictionary(0)/ValueType String Edm.String customFieldDictionary(1)/__metadata/type String SP. KeyValue customFieldDictionary(1)/Key String Custom_c7f114c97098e411940f00155d3c8201 customFieldDictionary(1)/Value String 90.5 customFieldDictionary(1)/ValueType String Edm.Double customFieldDictionary(2)/__metadata/type String SP. KeyValue customFieldDictionary(2)/Key String Custom_c6fb67e0b9a1e411941000155d3c8201 customFieldDictionary(2)/Value String 2015-04-01T00 :00 :00.0000000 customFieldDictionary(2)/ValueType String Edm.DateTime
Ajoutez une action Appeler le service web HTTP pour case activée le projet.
Modifiez les propriétés de l’appel de service web pour spécifier l’en-tête de requête. Pour ouvrir la boîte de dialogue Propriétés , cliquez avec le bouton droit sur l’action et choisissez Propriétés.
Ajoutez une action Appeler le service web HTTP pour appeler la méthode UpdateCustomFields .
Notez le
/Draft/
segment dans l’URL du service web. L’URL complète doit ressembler à ceci :https://<site-url>/_api/ProjectServer/Projects('<guid>')/Draft/UpdateCustomFields()
Modifiez les propriétés de l’appel de service web pour lier les paramètres RequestHeader et RequestContent aux dictionnaires que vous avez créés. Vous pouvez également créer une variable pour stocker le ResponseContent.
de
Optional. Lisez le dictionnaire de réponses pour case activée l’état du travail de file d’attente et journaliser les informations dans la liste d’historique du flux de travail.
Ajoutez un appel de service web au point de terminaison Publier pour publier le projet. Utilisez toujours le même en-tête de requête.
Ajoutez un appel de service web final au point de terminaison Checkin pour case activée le projet.
Créer un site project à partir d’un flux de travail
Chaque projet peut avoir ses propres sites SharePoint dédiés où les membres de l’équipe peuvent collaborer, partager des documents, soulever des problèmes, etc. Auparavant, les sites pouvaient uniquement être créés automatiquement lors de la première publication ou manuellement par le responsable de projet dans Project Professionnel ou par l’administrateur dans les paramètres PWA, ou ils pouvaient être désactivés.
Nous avons ajouté la méthode CreateProjectSite afin que vous puissiez choisir quand créer des sites de projet. Cela est particulièrement utile pour les organisations qui souhaitent créer automatiquement leurs sites lorsqu’une proposition de projet atteint une étape spécifique dans un flux de travail prédéfini, plutôt que lors de la première publication. Le report de la création d’un site de projet améliore considérablement les performances de création d’un projet.
Condition préalable: Avant de pouvoir utiliser CreateProjectSite, le paramètre Autoriser les utilisateurs à choisir doit être défini pour la création de site de projet dans Paramètres PWA Paramètres> SitesSharePoint>connectés Paramètres.
Pour créer un flux de travail qui crée un site Project
Créez ou modifiez un flux de travail existant, puis sélectionnez l’étape à laquelle vous souhaitez créer vos sites de projet.
Créez un dictionnaire requestHeader à l’aide de l’action Générer un dictionnaire .
Ajoutez les deux éléments suivants au dictionnaire.
Nom Type Valeur Accepter String application/json ; odata=verbose Content-Type String application/json ; odata=verbose Ajoutez l’action Appeler le service web HTTP . Modifiez le type de requête pour utiliser POST et définissez l’URL au format suivant :
https://<site-url>/_api/ProjectServer/Projects('<guid>')/CreateProjectSite('New web name')
Transmettez le nom du site Project à la méthode CreateProjectSite sous forme de chaîne. Pour utiliser le nom du projet comme nom de site, passez une chaîne vide. Veillez à utiliser des noms uniques pour que le site de projet suivant que vous créez fonctionne.
Modifiez les propriétés de l’appel de service web pour lier le paramètre RequestHeader au dictionnaire que vous avez créé.