将消息(请求和响应类)与 Execute 方法结合使用

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

您可以使用 IOrganizationService 中的方法执行常见操作。 除了常用方法外,您可以使用 IOrganizationService.Execute 方法执行没有公开为方法的消息。Execute 此方法采用消息请求类作为参数,并返回消息响应类。 请求消息类的名称以“Request”结尾,而响应消息类的名称以“Response”结尾。 有关 Execute 方法支持的所有消息的详细信息,请参阅 组织服务中的 xRM 消息组织服务中的 Dynamics 365 消息IDiscoveryServiceIDeploymentService Web 服务使用类似的执行请求和响应模式。

执行消息流

OrganizationRequest 是所有消息请求的基类。 可以使用此基类执行任何消息,为请求指定消息名称和参数集合。 不过,如果使用派生类(例如 AssociateRequest),则在使用请求类上的属性时会填充参数集合。

Execute 方法返回请求的相应响应类,即 OrganizationResponse 类的派生类。 与请求类一样,派生类包含结果参数集合中的每个值的属性。 所有消息都有响应,但许多消息没有响应上的任何属性。 .

消息在元数据中进行预定义并在 SDK 消息实体中存储为记录。 对于每个消息,可以确定它是在连接到服务器时运行还是从带脱机访问功能的 Microsoft Dynamics 365 for Microsoft Office Outlook 运行。 此信息可在 SdkMessage.Availability 属性中找到。 有关详细信息,请参阅插件注册实体

本主题内容

传递消息中的可选参数

在单一数据库事务中执行消息。

在后台执行消息(异步)

传递消息中的可选参数

通过向 Parameters 属性添加值,可以将可选参数传递给任何消息请求。 一些参数不是请求类上的公开属性。 若要设置这些参数,必须在 Parameters 类上的 Request 集合中设置它们。

下表列出这些参数。

Parameter

说明

消息

SolutionUniqueName

指定操作应用于的解决方案的唯一名称的 String。 有关详细信息,请参阅解决方案组件的依赖项跟踪

AddPrivilegesRoleRequest
CreateRequest
DeleteRequest
MakeAvailableToOrganizationTemplateRequest
UpdateRequest

CalculateMatchCodeSynchronously

不再需要指定此参数。 将同步计算用于检测重复项的匹配代码,而不管此参数中传递的值为何。 有关详细信息,请参阅运行重复检测

CreateRequest
UpdateRequest

SuppressDuplicateDetection

用于对创建或更新操作禁用重复检测的 Boolean。 有关详细信息,请参阅运行重复检测

CreateRequest
UpdateRequest

以下示例演示如何传递可选参数:

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);

在单一数据库事务中执行消息。

协调系统中的多条记录以使他们成功更改或无法更改,这在业务程序中是一个很常见的要求。 在数据库术语中,这被称为“在单个事务中执行多个操作”,它能够对所有的数据回滚更改。

您可以使用 ExecuteTransactionRequest 消息请求,在单个数据库事务中执行两个或更多组织服务。 若要使用此消息,使用要在事务中执行的两个或更多组织请求填充 Requests 集合。 如果您要在 Responses 集合中获取响应集合,每个执行的消息请求一个,请将 ReturnResponses 设置为 trueRequests 集合中消息请求的执行顺序与它们在集合中显示的顺序相同,索引 0 的元素首先执行。 该同一顺序保留在 Responses 集合中。

如果任何一个请求失败,且事务回滚,在事务期间完成的任何数据更改都将被撤消。 此外,将返回 ExecuteTransactionFault,标识索引进入引起错误的请求消息的请求集合中。

ExecuteMultipleRequest 可以包含一个或多个 ExecuteTransactionRequest 实例。ExecuteTransactionRequest 实例可能未包含 ExecuteMultipleRequestExecuteTransactionRequest。 有关 ExecuteMultipleRequest 的详细信息,请参阅 使用 ExecuteMultiple 提高批量数据加载的性能

对于演示 ExecuteTransactionRequest 的示例代码,请参阅Sample: Execute multiple requests in transaction

在后台执行消息(异步)

除了将立即执行消息请求外,就像调用 Execute 并传递消息请求的情况一样,您还可以在后台执行消息请求(异步)。 这通过将消息执行推迟一些时间直到服务器负载较小时,从而提高了系统性能。 交互用户在继续操作之前不必等待目标消息执行。 这在处理花费好几分钟或更多时间执行的消息时尤其有用。

备注

当前,只有 ImportSolutionRequest 消息可与 ExecuteAsync 消息一同使用。

使用 ExecuteAsyncRequest 消息可以异步执行消息。 配置请求并将请求实例作为 Execute 的参数传递。ExecuteAsyncResponse 与异步作业的 ID 一起返回。 您可以选择使用 ID 查询作业以找出其当前状态。

您还可以使用 ExecuteMultipleRequest 消息一次执行多个信息。 为此,需要将一个或多个 ExecuteAsync 消息请求添加到 ExecuteMultiple 消息请求。 由于改进整个系统性能的限制,每个组织一次仅允许执行一个异步运行的消息。 不能从 ExecuteAsync 消息请求中执行 ExecuteMultiple 消息请求。 有关 ExecuteMultiple 消息请求的详细信息,请参阅使用 ExecuteMultiple 提高批量数据加载的性能

另请参阅

Execute
OrganizationRequest
OrganizationResponse
ExecuteAsyncMaxConnectionsPerServer
ExecuteAsyncPerOrgMaxConnectionsPerServer
使用组织服务读取和写入数据或元数据
使用 ExecuteMultiple 提高批量数据加载的性能
将消息(请求和响应类)与 ExecuteCrmOrganizationRequest 方法结合使用
Discovery Service 中的消息
组织服务中的 xRM 消息
组织服务中的 Dynamics 365 消息
ExecuteAsync message privileges

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权