【转】Dynamics CRM 365零基础入门学习(三)Dynamics 通过Web API 来调用自定义的Action(使用插件)

今天想实现一个Search Product的功能,首先要将数据展示在页面,然后前端根据查询需求进行处理。之前是在salesforce中实现的,可以定义一个Search Product的页面,然后在页面中访问查询数据的Webservice即可。但是在Dynamic 365中并没有这种直接调用的方式,最终找到一种方式就是,前端页面通过Js调用工作流中的Action,而在Action上绑定了插件。


实现效果

这里写图片描述

(1) 实现html页面并导入系统

在设置中找到自定义项,然后进去自定义系统,选择Web资源,然后将之前做好的页面上传到系统。
这里写图片描述

(2) 自定义Action

首先新建一个action,实体设置上可以设置为全局的,也可以单独设定某个实体。

注意:

注册该action,方法同插件注册,在注册step时message选择我们的action的唯一名称,很多人在这一步的message里不显示action的名字,确保两点:第一你的action激活了,第二你的插件注册器是在你激活action后再打开的。
这里写图片描述
设置好action,这边设置了两个输入参数和一个输出参数,设置完后保存并且激活。

(3) 开发Plugin项目

这里我们简单介绍一下插件的基本用法
1. 要继承IPlugin,并实现Excute方法。
2. 从Service provider里获取执行上下文
3. 我们可以检查出发插件的实体名称
4. 还可以检查触发的事件,是creat, update还是delete
5. 输入参数里获取触发的实体
6. 通过service factory获取IOrganizationService,当CreateOrganizationService方法的参数为null时,表示的是系统用户,当参数为context.UserId 或Guid.Empty时,表示的是当前用户
7. 最后是DoAction方法,插件的逻辑就可以在这里实现了。
以下是实现插件的代码:

public void Execute(IServiceProvider serviceProvider){IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);//传入两个参数String InParameters1 = context.InputParameters["InParameters1"] as String;String InParameters2 = context.InputParameters["InParameters2"] as String;//查询//EntityReference entityRef = context.InputParameters["Target"] as EntityReference;string fetchProductXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='new_be_eligible_pn__c'><attribute name='new_be_eligible_pn__cid' /><attribute name='new_name' /><attribute name='createdon' /><attribute name='new_value_category__c' /><attribute name='new_is_tp_part__c' /><attribute name='new_country__c' /><attribute name='new_available_quantity_flag__c' /><order attribute='new_name' descending='false' /><filter type='and'><condition attribute='new_country__c' operator='eq' value='Italy' /></filter><link-entity name='new_product' from='new_productid' to='new_product__c' link-type='inner' alias='a_e79f28ae2899e811a96f000d3a828e6c'><attribute name='new_wifi__c' /><attribute name='new_warranty__c' /><attribute name='new_type__c' /><attribute name='new_sub_series__c' /><attribute name='new_series__c' /><attribute name='new_screen_size__c' /><attribute name='new_name' /><attribute name='new_product_hierarchy__c' /><attribute name='new_description' /><attribute name='new_productcode' /><attribute name='new_os__c' /><attribute name='new_memory__c' /><attribute name='new_hdd__c' /><attribute name='new_cpu__c' /><attribute name='new_brand__c' /><attribute name='new_battery__c' /><filter type='and'><filter type='or'><condition attribute='new_type__c' operator='like' value='%PC System Unit%' /><condition attribute='new_type__c' operator='eq' value='Non System Unit' /></filter></filter></link-entity><link-entity name='new_product_sales_country__c' from='new_product_sales_country__cid' to='new_psc__c' link-type='inner' alias='a_c278acd92899e811a96f000d3a828e6c'><attribute name='new_currencyisocode' /><attribute name='new_channel_price__c' /><filter type='and'><condition attribute='new_sales_status__c' operator='like' value='%12%' /></filter></link-entity></entity></fetch>";EntityCollection products = service.RetrieveMultiple(new FetchExpression(fetchProductXml));//传出参数context.OutputParameters["OutParameters"] = products;//遍历productsforeach (var pair in products.Entities){foreach (var pa in pair.Attributes){Console.WriteLine(pa.Key + ": " + pa.Value);}}Console.WriteLine(products);}

(4)数据查询方式,本篇使用FetchXML

在以上的代码实现中,我使用了FetchXML的方式实现,对于多条件跨表查询,返回多条记录很方便。常用的结构如下,
SDK中有很多类似的案例。
这里写图片描述
其中XML这块我们可以使用高级查询来自动生成
这里写图片描述
最后我们可以导出XML文件

(5)Js调用自定义的Action

这里写图片描述

最后可以看到输出结果:

这里写图片描述

总结:

在on-premises的开发中我们往往把复杂的业务处理逻辑封装成接口供前端js调用,但在online的开发中这样的开发方式无疑增加了成本(需另外架设服务器,添置域名,配置https协议证书等),通过web api调用action给我们提供了新的可行的方式。实现了需求。在下一章我们将分享如何调试插件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】Dynamics CRM 365零基础入门学习(四)Dynamics 使用profiler插件调试流程

今天我们介绍一种在dynamics开发中经常会用到的调试操作&#xff0c;其中一种调试方式即是profile调试。以下是我在项目开发中记录的调试流程&#xff0c;可供参考使用。 1、打开插件注册工具&#xff0c;会看到install Profile,点击即可安装。 2、在插件注册器中选择要调试的s…

【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

先举个例子&#xff0c;分别以不指定编码、指定编码为 utf-8、指定编码为 utf-8-sig 三种方式来做比较&#xff0c;再将写入 csv 文件和 txt 文件来做个对比 一、不指定编码方式&#xff0c;直接存入 csv 文件 import csvwith open(test.csv, w) as fp:writer csv.writer(fp)…

【转】Dynamics CRM 365零基础入门学习(五)权限管理

一&#xff1a;安全角色 Microsoft Dynamics 365中的安全角色是各种实体的特权和访问级别矩阵。 它们根据其功能分组在不同的选项卡下。 这些组包括&#xff1a;核心记录&#xff0c;营销&#xff0c;销售&#xff0c;服务&#xff0c;业务管理&#xff0c;服务管理&#xff0…

【转】Dynamics CRM 365零基础入门学习(七)Dynamics 365 DataMigrationUtility tool使用

SDK里有个工具叫DataMigrationUtility&#xff0c;这个工具适合两个CRM系统之间的数据迁移。例如&#xff1a;在项目上线之初会做数据初始化的工作&#xff0c;一般这个工作会在UAT开始前完成&#xff0c;当UAT完成之后再把这部分初始化数据迁移到生产环境。那我费了半天劲把数…

【转】Dynamics 365中的应用程序介绍

本人微信和易信公众号&#xff1a;微软动态CRM专家罗勇 &#xff0c;回复275或者20180630可方便获取本文&#xff0c;同时可以在第一间得到我发布的最新的博文信息&#xff0c;follow me&#xff01;我的网站是 www.luoyong.me 。 Dynamics 365引入了应用程序&#xff0c;为啥…

【转】Dynamics 365中配置和使用文件夹级别的跟踪(folder-level tracking)

本人微信和易信公众号&#xff1a;微软动态CRM专家罗勇 &#xff0c;回复274或者20180630可方便获取本文&#xff0c;同时可以在第一间得到我发布的最新的博文信息&#xff0c;follow me&#xff01;我的网站是 www.luoyong.me 。 Dynamics 365与Office 365可以方便紧密的集成…

【转】Dynamics 365Online 如何启用手机端APP的离线功能

隐约记得365自带的手机app是支持离线功能的&#xff0c;但实际尝试后发现不行&#xff0c;断开网络后直接提示下图这样&#xff0c;无法操作了 然后就去查询了下最新版的Online设置离线的方式&#xff0c;步骤还挺多的&#xff0c;本篇即来分享下 第一步&#xff0c;首先要确定…

【转】Microsoft Teams快速上手系列-01Teams的前世今生

说到Teams&#xff0c;这到底是一个什么产品&#xff1f;有人说它是团队协作工具&#xff0c;有人说它是云视频系统&#xff0c;有人说它是Hub&#xff0c;还有人说它是微软有史以来发展最快的一个产品&#xff0c;还有人说它完全是一个高效办公神器。其实都是对的。 Teams集成…

【转】响应式详解

一两年以前&#xff0c;我发现&#xff0c;很多人都被响应式搞得很懵逼。 现在&#xff0c;我依然发现&#xff0c;还是有很多人&#xff0c;依旧被响应式搞得很懵逼。 所以&#xff0c;我也很懵逼。 到底是哪个环节出了问题&#xff0c;让这么多学习前端的同学对于这个响应…

Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期之应用程序生命周期

参考&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms178473(vvs.100).aspx 参考&#xff1a;http://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候&#xff0c;IIS &#xff08;Int…

Python 数据分析三剑客之 NumPy(二):数组索引 / 切片 / 广播 / 拼接 / 分割

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler

引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里&#xff0c;我们首先了解了Http请求在服务器端的处理流程&#xff0c;随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。从 Http 请求处理流程 一文的最后的一…

Python 数据分析三剑客之 NumPy(三):数组的迭代与位运算

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】ASP.NET内幕 - IIS处理模型

介绍 微软的Active ServerPages&#xff0c;即ASP&#xff0c;自1996年首次发布以来&#xff0c;为Web开发者构建Web应用提供了一个丰富、复杂的框架。过去的几年它的基础架构发展的如此迅速&#xff0c;成为目前大家了解的ASP.NET&#xff0c;已经不再象它的前身。ASP.NET是构…

沉淀一年零八个月,我也拿到了博客专家

回忆 第一篇文章的发布是在 2018.08.30&#xff0c;虽然注册 CSDN 已有三年多了&#xff0c;但一直都是白嫖大佬们的文章&#xff0c;没有自己写东西&#xff0c;回想起刚开始写博客&#xff0c;最开始并不是在 CSDN 的&#xff0c;在我大二上学期的时候&#xff0c;网上冲浪发…

JAVA-入门(内含jdk配置)

title: java入门 date: 2019-07-21 19:50:19 tags: java学习 top: 1 JAVASE学习 1.java入门 More info: Writing //超链接 2.java开发环境配置 第一步是配置本地开发环境&#xff0c;学习最基本的桌面开发&#xff0c;下面以win10为例配置Java开发环境&#xff0c;即&#…

【转】EF三种编程方式的区别Database first ,Model first ,code first

首先对于EF中先出现的datebase first和model first两种编程方式&#xff0c;其的区别根据字面意思很容易能够理解。 datebase first就是代表数据库优先&#xff0c;那么前提就是先创建数据库。 model first就是代表model优先&#xff0c;那么前提也就是先创建model&#xf…

【转】学习Entity Framework 中的Code First

这是上周就写好的文章&#xff0c;是在公司浩哥的建议下写的&#xff0c;本来是部门里面分享求创新用的&#xff0c;这里贴出来分享给大家。 最近在对MVC的学习过程中&#xff0c;接触到了Code First这种新的设计模式&#xff0c;感觉很新颖&#xff0c;并且也体验到了这种方式…