首页 > 其他分享 >Plugin开发基本知识点 IPluginExecutionContext, iOrganization Service

Plugin开发基本知识点 IPluginExecutionContext, iOrganization Service

时间:2024-07-03 17:35:40浏览次数:13  
标签:知识点 插件 service Service Plugin Entity context 执行 IPluginExecutionContext

IPluginExecutionContext

`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`,开发者可以方便地获取与当前操作相关的各种信息,从而在插件中实现复杂的业务逻辑。

 

 

 

iOrganization Service

        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

相关文章

  • dfsvc.exe 是 Windows 操作系统中的一个系统进程,它的全称是 "ClickOnce Deployment Se
    dfsvc.exe是Windows操作系统中的一个系统进程,它的全称是"ClickOnceDeploymentService"。这个进程主要用于支持ClickOnce技术,它是一种用于在Windows平台上发布和部署应用程序的技术。具体来说,ClickOnce是一种轻量级的、易于部署的应用程序部署技术,通常用于分发和更新.NE......
  • LLM大语言模型知识点整理
    大模型知识点总结1.基础概念1.1大模型定义大模型(LargeModel)通常指参数量级达到数亿甚至数千亿的深度学习模型。这些模型通常基于Transformer架构,如GPT、BERT等。1.2常见大模型GPT系列(GenerativePre-trainedTransformer)BERT(BidirectionalEncoderRepresentations......
  • PowerShell 和 NSSM(Non-Sucking Service Manager)的组合可以用来创建和管理 Windows 上
    PowerShell和NSSM(Non-SuckingServiceManager)的组合可以用来创建和管理Windows上的服务。NSSM是一个开源工具,允许你将任何可执行文件转换为Windows服务。下面是一个简单的示例,展示如何使用PowerShell和NSSM来创建和管理一个服务。步骤一:下载和安装NSSM下载NSSM:......
  • Python--matplotlib绘图可视化知识点整理
    无论你工作在什么项目上,IPython都是值得推荐的。利用ipython--pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能。本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找。这样IPython配置为使用你所指定的mat......
  • 打包警告:chunk common [mini-css-extract-plugin]Conflicting order between:
    1.问题webpage5打包告警:chunkcommon[mini-css-extract-plugin]Conflictingorderbetween:2.解决方案:-vue.config.js配置//vue.config.jsmodule.exports={//...,css:{extract:{ignoreOrder:true},}};或者:调整组件引入的顺序3.......
  • Java知识点整理 18 — Lambda表达式
    一.简介Lambda表达式是函数式编程思想的体现,强调做什么,而不是以什么方式去做。面向对象编程思想强调的是对象,必须通过对象的形式来做一些事情。比如多线程执行任务,需要创建对象,对象需要实现指定接口,然后再执行等。过程相对繁琐。而如果使用函数式编程思想,可以直接通过传递......
  • 待整理知识点
    排序函数sort(begin,end,cmp):根据数量级不同,自动选择合适的排序方法(快排,堆排等)cmp可省略,默认是从小到大排序,从大到小则将cmp换成greater<类型>()升序:sort(begin,end,less())降序:sort(begin,end,greater())begin为指向数组第一个元素的指针,end为指向数组尾后的指针(最......
  • Vue预渲染prerender-spa-plugin+vue-meta-info
    前言:公司现有一个新需求需要在原有的vue2项目上面进行预渲染,进行SEO的优化,在网上进行了一系列的搜索,发现两种简单易上手的方案(1.使用prerender-spa-plugin+vue-meta-info进行打包构建;2.使用nuxt.js在开发过程中就渲染呈现出来)因是在原有项目基础上进行,所以采用第一种方案进行构......
  • Maven知识点概括(帮助你快速回顾Maven)
    一、Maven简介1、为什么学习Maven1.1、Maven是一个依赖管理工具随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中,一个模块里面用到上百个jar包是非常正常的。而如果使用Maven来引入这些jar包只需要配置三个“依赖”:<!--Nac......
  • ASP.NET Core如何使用HttpClient调用WebService
    原文链接:https://www.yisu.com/jc/691937.html我们使用VS创建一个ASP.NETCoreWebAPI项目,由于是使用HttpClient,首先在ConfigureServices方法中进行注入。public void ConfigureServices(IServiceCollection services){    // 注入HttpClient    services.AddHt......