定义
在 Dynamics365 中,IExecutionContext 接口是一个非常重要的概念,它包含了当前插件或工作流执行环境的相关信息。
提示
命名空间: Microsoft.Xrm.Sdk
程序集: Microsoft.Xrm.Sdk (in Microsoft.Xrm.Sdk.dll)
语法
public interface IExecutionContext
属性
注释
下面列表根据本人平时使用频次,由高往低排。
名称 | 描述 |
---|---|
UserId | 获取插件代表其调用 Web 服务方法的系统用户的 GUID |
Mode | 获取插件执行的模式 |
MessageName | 获取事件执行管道正在处理的 Web 服务消息的名称 |
InputParameters | 获取触发导致插件执行的事件的请求消息的参数 |
OutputParameters | 获取核心平台作完成后响应消息的参数 |
PostEntityImages | 获取插件或工作流执行之后实体的当前(记录)值 |
PreEntityImages | 获取插件或工作流执行之前实体的当前(记录)值 |
BusinessUnitId BusinessUnitId | 获取发出请求的用户(也称为调用用户)所属的业务部门的 GUIDGUID |
CorrelationId | 获取用于跟踪插件或自定义工作流活动执行的 GUID |
Depth | 获取调用堆栈中的当前执行深度 |
InitiatingUserId | 获取执行当前管道的系统用户帐户的 GUID |
IsExecutingOffline | 获取插件在脱机时是否从具有脱机访问功能的 Microsoft Dynamics 365 for Microsoft Office Outlook 客户端执行 |
IsInTransaction | 获取一个值,该值指示插件是否在数据库事务中执行 |
IsOfflinePlayback | 获取一个值,该值指示插件是否由于具有脱机访问功能的 Microsoft Dynamics 365 for Microsoft Office Outlook 客户端从脱机转换为联机并与 Microsoft Dynamics 365 服务器同步而执行 |
IsolationMode | 获取一个值,该值指示插件是否在沙盒中执行 |
OperationCreatedOn | 获取创建相关系统作业的日期和时间 |
OperationId | 获取相关系统作业的 GUID |
OrganizationId | 获取实体所属的组织以及插件执行所在的组织的 GUID |
OrganizationName | 获取当前正在处理的实体所属的组织的唯一名称,插件在其下执行该组织 |
OwningExtension | 获取对相关 SdkMessageProcessingingStep 或 ServiceEndpoint 的引用 |
PrimaryEntityId | 获取管道为其处理事件的主实体的 GUID |
PrimaryEntityName | 获取管道为其处理事件的主实体的名称 |
RequestId | 获取事件执行管道正在处理的请求的 GUID |
SecondaryEntityName | 获取与主实体有关系的辅助实体的名称 |
SharedVariables | 获取在插件之间共享的自定义属性 |
UserId
- 作用
获取插件代表其调用 Web 服务方法的系统用户的 GUID。
- 语法
Guid UserId { get; }
Mode
- 作用
获取插件执行的模式。
- 语法
int Mode { get; }
- 枚举值
在 SdkMessageProcessingStepMode
枚举中定义:
public enum SdkMessageProcessingStepMode
{
[System.Runtime.Serialization.EnumMemberAttribute()]
Synchronous = 0, // 同步
[System.Runtime.Serialization.EnumMemberAttribute()]
Asynchronous = 1, // 异步
}
MessageName
- 作用
获取事件执行管道正在处理的 Web 服务消息的名称
- 语法
string MessageName { get; }
- 枚举
public static class MessageName
{
public const string Create = "Create";
public const string Update = "Update";
public const string Delete = "Delete";
public const string Associate = "Associate";
public const string Disassociate = "Disassociate";
public const string SetStateDynamicEntity = "SetStateDynamicEntity";
public const string RetrieveMultiple = "RetrieveMultiple";
public const string Retrieve = "Retrieve";
public const string QualifyLead = "QualifyLead";
public const string Assign = "Assign";
}
InputParameters 和 OutputParameters
InputParameters 和 OutputParameters 一般用于 Action,两者相互配合使用,一个是输入、一个是输出。
- InputParameters 作用
获取触发导致插件执行的事件的请求消息的参数。
- OutputParameters 作用
输出参数。
- 代码示例
using Microsoft.Xrm.Sdk;
using System;
namespace Blog.D365.Plugins.Account
{
public class GetAccountNameByGuidAction : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = factory.CreateOrganizationService(context.UserId);
IOrganizationService serviceAdmin = factory.CreateOrganizationService(null);
string param_1 = context.InputParameters["Param_1"].ToString(); // 接收参数
string param_2 = context.InputParameters["Param_1"].ToString();
try
{
string result = string.Empty;
if (string.IsNullOrWhiteSpace(param_1) || string.IsNullOrWhiteSpace(param_2))
{
// return error
}
// 逻辑处理...
context.OutputParameters["results"] = result; // 处理完后返回结果
}
catch (Exception e)
{
throw new InvalidPluginExecutionException(e.Message);
}
}
}
}
IsInTransaction
- 作用
获取一个值,该值指示插件是否在数据库事务中执行
- 语法
// 如果插件在数据库事务中执行,则为 true;否则为 false。
bool IsInTransaction { get; }
IsolationMode
- 作用
获取一个值,该值指示插件是否在沙盒中执行。
- 语法
int IsolationMode { get; }
- 枚举值
在 PluginAssemblyIsolationMode
枚举中定义:
[System.Runtime.Serialization.DataContractAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("CrmSvcUtil", "8.1.0.239")]
public enum PluginAssemblyIsolationMode
{
[System.Runtime.Serialization.EnumMemberAttribute()]
None = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
Sandbox = 2,
}
PreEntityImages
- 定义
PreEntityImages 属性包含了在插件或工作流执行之前实体的当前值。
- 作用
在插件或工作流的执行过程中,可以使用 PreEntityImages 来访问实体的原始数据,从而进行比较、验证等操作。
- 场景示例
- 在更新客户实体的插件中,可以使用 PreEntityImages 来获取客户的原始地址信息,并与新的地址进行比较,判断是否发生了变更
PostEntityImages
- 定义
PostEntityImages 属性包含了在插件或工作流执行之后,实体的当前值。
- 作用
在插件或工作流的执行过程中,可以使用 PostEntityImages 来访问实体的最新数据,从而进行下一步的处理。
感谢您的耐心阅读!来选个表情,或者留个评论吧!