定义

在 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 来访问实体的最新数据,从而进行下一步的处理。

参考

  1. IExecutionContext Interface)
  2. Dynamics365-Apps-Samples/samples-from-msdn/HelperCode/OptionSets.cs