小工具知识网

当前位置: 首页 > 行业知识 > Power Apps 学习笔记 -- Plugin

行业知识

Power Apps 学习笔记 -- Plugin

2026-11-01 03:49:57 来源:互联网转载

文章目录

    • 1. Plugin 简介
    • 2. Plugin 配置
      • 2.1 步骤Step核心分析
      • 3. Plugin 代���

        1. Plugin 简介

          Plugin基础教程 : Plugin基础教程

        插件Plugin:1. 插件Plugin通常用于默认数据处理操作区间,增加数据默认行为的方法。(无重用性)

         

        2. Plugin 配置

         .NET环境:.NET环境

        ##安装配置 1. 安装.NET 环境 2. 安装 PowerPlatform CLI (使用.NET命令行安装)dotnet tool install --global Microsoft.PowerApps.CLI.Tool 3. 安装 Plugin Registration Toolpac tool prt
        ##使用Plugin1. 创建 Class Library(.NET FrameWork)2. Manuget包:Microsoft.CrmSdk.CoreAssemblies3. 代码编写4. 进入属性当中进行密钥签名、检查属性为Debug5. 解决方案生成 --> 生成文件资源管理器 \bin\Debug\BasicPlugin.dll6. 登录进入Plugin Registration Tool (注意选择对应环境)7. 注册程序集 Assembly(注意这里必须全选所有插件,否则会导致其他已有插件被撤掉)8. 注册步骤Step(核心:定义插件的触发条件、)9. 运行10. 调试(install profiler - start profiling - 执行操作 - 附加进程 - startExecution) 

        2.1 步骤Step核心分析

          事件执行管道模型(Plugin插件遵循其规律)

          PreCalidation: 数据库事务管理前,可加入用户过滤等相关取消逻辑的操作。可用于用户安全验证、权限检查等.  PreOperation: 核心操作前,可调整传入核心操作消息实体的值。可用于核心操作实体值修改等  MainEvent: 该阶段是执行关键操作(增删改等)的阶段,不允许注册插件.  PostOperation: 核心操作后,可以获取消息最初传入、操作结束后消息返回的值。尽可能不要修改实体值,避免触发其他事件。可执行事务管理外的异步操作。可用于创建、修改、更新实体等操作。

          Step注册参数含义

         

        3. Plugin 代码

         IPluginExecutionContext接口:IPluginExecutionContext接口

          IPulginExecutionConext: 提供了有关 plugin 执行上下文的信息,包括当前操作的实体记录、操作的类型、执行 plugin 的用户等,可以使用相关属性和方法进行访问.
        using System;using System.ServiceModel;using Microsoft.Xrm.Sdk;namespace BasciPlugin {    public class FollowupPlugin : IPlugin {        public void Execute(IServiceProvider serviceProvider) {            // 跟踪日志            ITracingService tracingService =(ITracingService)serviceProvider.GetService(typeof(ITracingService));            // Plugin上下文信息            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));            // InputParameters包含请求的实体集(可以是EntityCollection)            if(context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) {                // 组织服务工厂及相关                 IOrganizationServiceFactory serviceFactory =(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);                try {                    // context.OutputParameters 核心操作后的响应消息参数                    // 具体的Plugin相关操作                    tracingService.Trace("FollowupPlugin: Creating the task activity.");                }                catch(FaultException ex) {                    throw new InvalidPluginExecutionException("An error occurred in FollowUpPlugin.", ex);                }                catch(Exception ex) {                    tracingService.Trace("FollowUpPlugin: {0}", ex.ToString());                    throw;                }            }        }    }}

上一篇:Java 面试题:String、StringBuffer、StringBuilder 有什么区别?

下一篇:网页设计怎么导航不动?