`IPluginExecutionContext` 接口在Microsoft Dynamics 365插件开发中用于获取有关当前插件执行上下文的信息。它提供了丰富的属性和方法,帮助开发者在插件执行时获取与当前操作相关的各种数据和元数据。以下是`IPluginExecutionContext`的一些主要功能和属性:
### 主要属性
1. **MessageName**:表示当前执行的消息名称(如 "Create", "Update", "Delete", "Retrieve")。
string messageName = context.MessageName;
2. **PrimaryEntityName**:表示当前操作涉及的主要实体的名称。
string primaryEntityName = context.PrimaryEntityName;
3. **PrimaryEntityId**:表示当前操作涉及的主要实体的ID。
Guid primaryEntityId = context.PrimaryEntityId;
4. **InputParameters**:包含传递给插件的输入参数。
ParameterCollection inputParams = context.InputParameters;
5. **OutputParameters**:包含插件执行后返回的输出参数。
ParameterCollection outputParams = context.OutputParameters;
6. **PreEntityImages** 和 **PostEntityImages**:包含实体的预操作和后操作图像(即操作前后的实体状态)。
Entity preImage = (Entity)context.PreEntityImages["PreImage"]; Entity postImage = (Entity)context.PostEntityImages["PostImage"];
7. **SharedVariables**:在插件和自定义工作流活动之间共享数据的变量集合。
ParameterCollection sharedVariables = context.SharedVariables;
8. **Depth**:表示插件调用的嵌套深度,用于避免无限循环调用。
int depth = context.Depth;
9. **UserId**:表示当前操作的用户ID。
Guid userId = context.UserId;
10. **InitiatingUserId**:表示发起操作的用户ID。
Guid initiatingUserId = context.InitiatingUserId;
11. **OrganizationId** 和 **OrganizationName**:表示组织的ID和名称。
Guid organizationId = context.OrganizationId; string organizationName = context.OrganizationName;
12. **IsExecutingOffline**:指示插件是否在离线模式下执行。
bool isOffline = context.IsExecutingOffline;
13. **IsInTransaction**:指示当前插件执行是否在事务中。
bool isInTransaction = context.IsInTransaction;
14. **Mode**:表示插件执行模式(同步或异步)。
int mode = context.Mode;
### 使用示例
在插件中,你可以通过`IServiceProvider`获取`IPluginExecutionContext`,然后访问上述属性和方法。例如:
public class MyPlugin : IPlugin { public void Execute(IServiceProvider serviceProvider) { IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); // 获取当前操作的消息名称 string messageName = context.MessageName; // 获取主要实体的名称 string primaryEntityName = context.PrimaryEntityName; // 获取输入参数 if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) { Entity entity = (Entity)context.InputParameters["Target"]; // 执行自定义逻辑 } // 获取预操作图像 if (context.PreEntityImages.Contains("PreImage")) { Entity preImage = (Entity)context.PreEntityImages["PreImage"]; // 执行自定义逻辑 } } }
通过`IPluginExecutionContext`,开发者可以方便地获取与当前操作相关的各种信息,从而在插件中实现复杂的业务逻辑。
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
`IOrganizationService` 接口是Microsoft Dynamics 365 SDK中的一个关键接口,提供了与Dynamics 365实例进行交互的核心方法。通过这个接口,你可以执行多种操作,如CRUD(创建、读取、更新、删除)操作、检索元数据以及执行组织服务中的其他操作。
以下是`IOrganizationService`接口提供的一些主要功能:
1. **创建记录:**
- 使用`Create`方法在Dynamics 365中创建一个新的记录。
Guid recordId = service.Create(entity);
2. **检索记录:**
- 使用`Retrieve`方法根据实体类型和记录ID检索单个记录。
Entity retrievedEntity = service.Retrieve("account", recordId, new ColumnSet(true));
3. **更新记录:**
- 使用`Update`方法更新现有记录。
service.Update(entity);
4. **删除记录:**
- 使用`Delete`方法删除指定的记录。
service.Delete("account", recordId);
5. **执行查询:**
- 使用`RetrieveMultiple`方法执行查询以检索多个记录。
QueryExpression query = new QueryExpression("account"); EntityCollection results = service.RetrieveMultiple(query);
6. **执行组织服务操作:**
- 使用`Execute`方法执行特定的组织服务操作或消息。
ExecuteTransactionRequest request = new ExecuteTransactionRequest { Requests = new OrganizationRequestCollection { new CreateRequest { Target = newAccount }, new UpdateRequest { Target = existingAccount } } }; ExecuteTransactionResponse response = (ExecuteTransactionResponse)service.Execute(request);
TransactionResponse response = (ExecuteTransactionResponse)service.Execute(request);
```
7. **检索元数据:**
- 可以通过执行特定的组织服务请求来检索Dynamics 365的元数据(如实体、字段定义等)。
RetrieveEntityRequest retrieveEntityRequest = new RetrieveEntityRequest { LogicalName = "account", EntityFilters = EntityFilters.All }; RetrieveEntityResponse retrieveEntityResponse = (RetrieveEntityResponse)service.Execute(retrieveEntityRequest);
这些功能使得`IOrganizationService`成为在Dynamics 365插件和自定义工作流活动中与数据和元数据进行交互的主要方式。
标签:知识点,插件,service,Service,Plugin,Entity,context,执行,IPluginExecutionContext From: https://www.cnblogs.com/TheMiao/p/18282229