Dynamics CRM 2015-Custom Workflow Activity
CRM的Workflow给我们的流程处理带来不少便利,但是这种自带的Workflow并不是万能的,中间某一step不能支持,往往会牵一发而动全身,可能造成整个Workflow Steps的重新设计。幸好CRM还提供了其它的方案来实现这类需求,这里要说的就是Custom Workflow Activity。
下面用个具体的实例来说明下,现在有Entity A,B,C,D,它们的关系是,A上有对B的Lookup字段BLookup,B上有C的Lookup字段CLookup,C上有D的Lookup字段DLookup,希望由A的某个字段的变动触发Workflow,发送邮件,而邮件的接收人是D上的某个User字段的值。配置过Workflow的人都知道,CRM的Workflow是不能跨多层去指定这个User的,所以这里我们可以借助Custom Workflow Activity来实现。
首先在Visual Studio Project的配置上,Custom Workflow跟Plugin是相似的,需要额外引用一些dll,比如microsoft.xrm.sdk.workflow.dll,System.Activities.dll等

接着是指定类的继承,与Plugin需要继承IPlugin相似,这里需要继承CodeActivity(System.Activities.dll)

再然后,就是指定输入参数和输出参数了,毕竟我们是要根据一定的规则去获取最终的User。
指定输入参数:

指定输出参数:

指定输入输出Attribute,并使用InArgument<Type>和OutArgument<Type>,在这里需要注意的是,Custom Workflow仅支持如下的Type

还有一点就是,有一些特殊的类型,需要指定额外的Attribute:EntityReference,需要指定ReferenceTarget;OptionSetValue,需要指定AttributeTarget。
最后就是方法实现
protected override void Execute(CodeActivityContext executionContext)
{
try
{
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory factory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = factory.CreateOrganizationService(null);
//service.Execute 获取user
ReferringOfficer.Set(executionContext, user);
}
catch{...}
}
Project完工之后,可以使用Plugin注册Tool注册这个,不用添加任何Step。而Debug Custom Workflow,也是跟Plugin相似的套路,这里就不再多赘述了。
之后就可以在CRM自带的Workflow->Add Step中看到这个Custom Workflow了,配置好输入信息,并在Send Email Step中,配置返回值作为邮件的To,就达到了我们想要的效果了。
在使用Custom Workflow的时候,一定要注意返回值是空的情况,毕竟我们不能保证所有的数据都是完整的,比如D上的User是空,那么这个时候,需要注意配置默认值,也就是我在上面截图中的[Default]。
Dynamics CRM 2015-Custom Workflow Activity的更多相关文章
- 在标准实体特殊消息上注册插件及Dynamics CRM 2015中计算字段的使用
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复157或者20151005可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的 插件系列博客教程 讲述了 ...
- Dynamics CRM 2013 SP1 升级到Dynamics CRM 2015
首先截图一下我要升级的Dynamics CRM 2013版本如下图,可以看到是打了SP1后的CRM 2013. 运行CRM 2015简体中文版的安装文件CRM2015-Server- ...
- 在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话
背景 在On-premises部署的Dynamics CRM中实现通过网页拨通客户电话的功能 要点 3CX 提供了开箱即用的Dynamics CRM Solution,只需要在Microsoft Dy ...
- Dynamics CRM 2015 Online Update1 UI界面的更新变化
听说出 Dynamics CRM 2015 Online Update1了,立马跑去申请了个30天试用版简单的看了下,UI上的变化还是让人耳目一新的,也可能是被CRM2013的UI蹂躏太久了没 ...
- Microsoft Dynamics CRM 2015 and Microsoft Dynamics CRM 2016 Performance and Scalability Documentation
摘要: 本人微信公众号:微软动态CRM专家罗勇 ,回复285或者20181126可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me ...
- Dynamics CRM 2015 New Feature (9): Services Changes
Dynamics CRM 2015 为开发者加入了一些新的Service Request以及一个帮助类库XrmTooling,它支持连接各种环境下的CRM,比方:Online,O365,On Prem ...
- Dynamics CRM 2015/2016新特性之三十二:新增乐观并发处理
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复215或者20160328可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复216或者20160329可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Microsoft Dynamics CRM 2015 服务器系统的性能维护,追踪, 也可以用到任务管理器哟...
Microsoft Dynamics CRM 2015 的追踪是一个很有用的function,它能为我们的CRM调试,评估 提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状态 ...
- Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action
今天我们再来看看Bound/Unbound Custom Action吧,什么是Custom Action?不知道的小伙伴们就out了,Dynamics CRM 2013就有了这个功能啦.和WhoAm ...
随机推荐
- sql数据库中查询第几条到第几条的数据
通用方法: select top 500 * from (select top 1000 * from UserSearchDatas order by ID) a order by ID desc ...
- NSString总结
[from]http://www.jianshu.com/p/7994b0ad6b88 问题:NSString到底是不是字符串? NSString 是 OC中专门处理字符串的对象!提供了转换大小写,拼 ...
- 分布式事务 & 两阶段提交 & 三阶段提交
可以参考这篇文章: http://blog.csdn.net/whycold/article/details/47702133 两阶段提交保证了分布式事务的原子性,这些子事务要么都做,要么都不做. 而 ...
- css清除浮动大全,共8种方法
我看的网页的网址:http://hi.baidu.com/kongcheng2012/item/2b1250d4452e802538f6f705 为什么浮动这么难? 因为浮动会使当前标签产生向上浮的效 ...
- Python爬虫框架Scrapy安装使用步骤
一.爬虫框架Scarpy简介Scrapy 是一个快速的高层次的屏幕抓取和网页爬虫框架,爬取网站,从网站页面得到结构化的数据,它有着广泛的用途,从数据挖掘到监测和自动测试,Scrapy完全用Python ...
- MVC 与 MVVM
MVC View直接访问Model,View包含Model信息,包括业务逻辑. MVC模型里Model不变,Model不依赖于View,但是 View依赖于Model.因为View实现了一些业务逻辑, ...
- 如何在Eclipse中配置python开发环境
考虑到网上关于Eclipse中配置Python开发环境的文章千篇一律,故写此文以总结. 本文主要内容是:三种Pydev配置方法和一种PyDev卸载方法. 本文的前提是你已经安装了Eclipse和pyt ...
- robotium从入门到放弃 三 基于apk的自动化测试
1.apk重签名 在做基于APK的自动化测试的过程中,需要确保的一点是,被测试的APK必须跟测试项目具有相同的签名,那怎么做才能确保两者拥有相同的签名呢?下面将给出具体的实现方法. 首先将被测 ...
- mysql数据库锁定机制
前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就 成为了各种数据库的核心技术之一.本章将对MySQL中两 ...
- spring mvc rest 方式
handler中编写方式: @RequestMapping("/{userName}/ajaxUser3.do") @ResponseBody public UserInfo aj ...