Utiliser les messages (classes de demande et de réponse) avec la méthode Execute

 

Date de publication : janvier 2017

S’applique à : Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Vous pouvez utiliser les méthodes dans IOrganizationService pour exécuter des opérations courantes. Outre les méthodes courantes, vous pouvez utiliser la méthode IOrganizationService.Execute pour exécuter des messages qui ne sont pas exposés en tant que méthodes. La méthode Execute accepte une classe de demande de message comme paramètre et retourne une classe de réponse de message. Les noms des classes de message de demande se terminent par « Demande » et les noms des classes de message de réponse se terminent par « Réponse ». Pour plus d’informations sur tous les messages pris en charge par la méthode Execute, consultez Messages xRM dans le service d’organisation, Messages Dynamics 365 dans le service d’organisation. Les services Web IDiscoveryService et IDeploymentService utilisent un modèle d’exécution de demande et de réponse similaire.

Exécuter le flux de messages

OrganizationRequest représente la classe de base pour toutes les demandes de messages. Vous pouvez utiliser cette classe de base pour exécuter des messages, en indiquant le nom du message et la collection de paramètres pour la demande. Cependant, lorsque vous utilisez une classe dérivée, par exemple AssociateRequest, la collection de paramètres est remplie lorsque vous utilisez les propriétés de la classe de demande.

La méthode Execute retourne la classe de réponse correspondante pour la demande, une classe dérivée de la classe OrganizationResponse. Comme pour la classe de demande, la classe dérivée contient une propriété pour chaque valeur dans la collection de paramètres de résultats. Tous les messages ont une réponse, mais nombre d’entre eux n’ont pas de propriétés dans la réponse. .

Les messages sont prédéfinis dans les métadonnées et stockés en tant qu’enregistrements dans les entités de message SDK. Pour chaque message, vous pouvez déterminer s’il fonctionne lorsqu’il est connecté au serveur ou à partir de Microsoft Dynamics 365 pour Microsoft Office Outlook avec accès hors connexion. Ces informations se trouvent dans l’attribut SdkMessage.Availability. Pour plus d'informations, voir Entités d’inscription de plug-in.

Contenu de la rubrique

Transmettre des paramètres facultatifs dans les messages

Exécuter des messages en une seule transaction de base de données

Exécuter les messages en arrière-plan (de façon asynchrone)

Transmettre des paramètres facultatifs dans les messages

Vous pouvez transmettre des paramètres facultatifs à une demande de message en ajoutant une valeur à la propriété Parameters. Certains paramètres ne sont pas des propriétés exposées dans les classes de demande. Pour définir ces paramètres, ils doivent être définis dans la collection Parameters de la classe Request.

Le tableau suivant répertorie ces paramètres.

Parameter

Description

Messages

SolutionUniqueName

String qui spécifie le nom unique de la solution à laquelle l’opération s’applique. Pour plus d'informations, voir Suivi de dépendance pour les composants de solution.

AddPrivilegesRoleRequest
CreateRequest
DeleteRequest
MakeAvailableToOrganizationTemplateRequest
UpdateRequest

CalculateMatchCodeSynchronously

La spécification de ce paramètre n’est plus nécessaire. Les codes de correspondance utilisés pour détecter les doublons sont calculés de façon synchrone, quelle que soit la valeur passée dans ce paramètre. Pour plus d'informations, voir Exécuter la détection des doublons.

CreateRequest
UpdateRequest

SuppressDuplicateDetection

Boolean utilisé pour désactiver la détection des doublons dans une opération de création ou de mise à jour. Pour plus d'informations, voir Exécuter la détection des doublons.

CreateRequest
UpdateRequest

L’exemple suivant montre comment transmettre un paramètre facultatif :

Account target = new Account();
target.Name = "Fabrikam";
CreateRequest req = new CreateRequest();
req.Target = target;
req["SuppressDuplicateDetection"] = true;
req["CalculateMatchCodeSynchronously"] = true;
req["SolutionUniqueName"] = "MySolutionName";
CreateResponse response = (CreateResponse)_service.Execute(req);

Exécuter des messages en une seule transaction de base de données

Il s'agit d'une exigence courante dans les applications d'entreprise pour coordonner les modifications de plusieurs enregistrements dans le système afin que toutes les modifications réussissent, ou aucune. En termes de base de données, il s'agit d'exécuter plusieurs opérations dans une seule transaction avec la possibilité d'annuler toutes les modifications si une seule échoue.

Vous pouvez exécuter deux ou plusieurs requêtes de service d'organisation dans une seule transaction de base de données à l'aide du message ExecuteTransactionRequest. Pour utiliser ce message, entrez Requests avec deux requêtes d'organisation ou plus qui doivent être exécutées dans la transaction. Définissez ReturnResponsestrue si vous souhaitez revenir à une collection de réponses, une pour chaque demande de message exécutée, dans la collection Responses . Les requêtes de message dans la collection Requests sont exécutées dans l'ordre où elles apparaissent dans la collection, où l'élément à l'index 0 est exécuté en premier. Ce même ordre est conservé dans la collection Responses .

En cas d'échec de l'une des demandes et de la restauration de la transaction, toutes les modifications apportées aux données pendant la transaction seront annulées. En outre, ExecuteTransactionFault est retourné avec identification de l'index dans la collection de messages de demande à l'origine de l'erreur.

ExecuteMultipleRequest peut contenir une ou plusieurs instances de ExecuteTransactionRequest. Une instance de ExecuteTransactionRequest ne peut pas contenir ExecuteMultipleRequest ou ExecuteTransactionRequest. Pour plus d'informations sur ExecuteMultipleRequest, voir Utiliser ExecuteMultiple pour améliorer les performances du chargement en bloc des données.

Pour un exemple de code qui présente ExecuteTransactionRequest, voir Sample: Execute multiple requests in transaction.

Exécuter les messages en arrière-plan (de façon asynchrone)

Outre l’exécution immédiate des demandes de message, comme cela est le cas avec l’appel de Execute et la transmission d’une demande de message, vous pouvez également exécuter une demande de message en arrière-plan (de façon asynchrone). Cela améliore les performances du système en différant l’exécution du message à une date ultérieure où la charge du serveur est réduite. Les utilisateurs interactifs n’ont pas besoin d’attendre l’exécution du message cible pour continuer. Cela est particulièrement utile lorsque vous traitez des messages qui mettent du temps à s’exécuter.

Notes

Actuellement, seul le message ImportSolutionRequest peut être utilisé avec le message ExecuteAsync.

Utilisez le message ExecuteAsyncRequest pour exécuter un message de façon asynchrone. Vous configurez la demande et transmettez l'instance de la demande en tant qu'argument à Execute.ExecuteAsyncResponse est retourné avec l'ID de la tâche asynchrone. Vous pouvez éventuellement rechercher la tâche à l’aide de l’ID pour déterminer son état actuel.

Vous pouvez également exécuter simultanément plusieurs messages à l’aide du message ExecuteMultipleRequest. Pour ce faire, ajoutez une ou plusieurs demandes de message ExecuteAsync à une demande de message ExecuteMultiple. En raison des restrictions de limitation qui améliorent les performances globales du système, un seul message qui s’exécute de façon asynchrone est autorisé à s’exécuter à la fois pour chaque organisation. Vous ne pouvez pas exécuter une demande de message ExecuteMultiple à partir d’une demande de message ExecuteAsync. Pour plus d’informations sur la demande de message ExecuteMultiple, consultez Utiliser ExecuteMultiple pour améliorer les performances du chargement en bloc des données.

Voir aussi

Execute
OrganizationRequest
OrganizationResponse
ExecuteAsyncMaxConnectionsPerServer
ExecuteAsyncPerOrgMaxConnectionsPerServer
Utilisez le service Organization pour lire et écrire des données ou des métadonnées.
Utiliser ExecuteMultiple pour améliorer les performances du chargement en bloc des données
Utiliser les messages (classes de demande et de réponse) avec la méthode ExecuteCrmOrganizationRequest
Messages dans le service de découverte
Messages xRM dans le service d’organisation
Messages Dynamics 365 dans le service d’organisation
ExecuteAsync message privileges

Microsoft Dynamics 365

© 2017 Microsoft. Tous droits réservés. Copyright