当我们在流程里添加步骤时,有一些默认的步骤,像创建、更新、发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了。下面将详细介绍如何创建一个自定义的流程活动。

1. 打开vs2012,新建一个项目:

需要引用CRM 的二个dll :  Microsoft.Xrm.Sdk;  Microsoft.Xrm.Sdk.Workflow;

2. 删除默认的 Activity1. xaml ,新建一个类:

using System; 
using System.Activities;
using Microsoft.Xrm.Sdk; 
using Microsoft.Xrm.Sdk.Workflow; 
 
namespace CustomActivityLibrary 
{ 
    public class CustomActityLibrary : CodeActivity 
    { 
        [Input(" My contact")] 
        [ReferenceTarget(" contact")] 
        [Default("{ 575A8B41-F8D7-4DCE-B2EA-3FFDE936AB1B}", "contact")]         
        public InArgument < EntityReference > inContact { get; set; } 
        
        protected override void Execute( CodeActivityContext context) 
        {  
            ITracingService tracingService = context.GetExtension < ITracingService >(); 
            IWorkflowContext mycontext = context.GetExtension < IWorkflowContext >(); 
            IOrganizationServiceFactory serviceFactory = context.GetExtension < IOrganizationServiceFactory >(); 
            IOrganizationService crmService = serviceFactory.CreateOrganizationService( mycontext.UserId); 
            Contact myContact = new Contact(); 
            myContact.ContactId = inContact.Get( context). Id; 
            PhoneCall myPhoneCall = new PhoneCall(); 
            myPhoneCall.Subject = "Call this new contact"; 
            myPhoneCall.RegardingObjectId = new EntityReference( Contact.EntityLogicalName, (Guid) myContact.ContactId); 
            crmService.Create( myPhoneCall); 
            tracingService.Trace(" PhoneCall created.");
        }
    }
}

注意这里的代码用到了Linq,要在CRM里使用Linq,用下面的方法先生成一个类,并引用到项目里:

crmsvcutil.exe /url:http:// localhost/ Organization1/ XRMServices/ 2011/ Organization.svc /out:GeneratedCode.cs

crmsvcutil.exe 在SDK/Bin下面,这个生成的类包括所有的实体类,并支持Linq。

3. 生成的dll,像插件一样注册,注册完后,就可以在添加流程步骤里找到它了:

4. 选择这个自定义的步骤,然后点击 设置属性 按钮

注意,如果你修改了项目,重新编译后,你需要重启windows服务 Microsoft CRM Asynchronous Processing Service。有时在重新发布这个修改的dll时可能还要重启IIS。当然实时工作流不需要开启windows服务 Microsoft CRM Asynchronous Processing Service。

前后一共写了6篇流程,说明怎样在CRM 2013 里使用流程。业务人员现在可以很灵活地实现指定的业务逻辑。 对话(Dialog)是同步并且是可以交互的流程;工作流可以是同步也可以是异步;操作(Action)可以当作是一个实时的工作流。以前开发人员需要加一个按钮和实体字段(Flag)来触发插件来实现的功能,现在就可以考虑用操作了;另外操作还是一个很好的方式把javascript的逻辑移到插件里,以保护IP。

Dynamic CRM 2013学习笔记 系列汇总

转载于:https://www.cnblogs.com/fengwenit/p/4317152.html

Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动相关推荐

  1. Dynamic CRM 2013学习笔记(四十二)流程5 - 实时/同步工作流(Workflow)用法图解...

    实时工作流跟插件一样,也是用事件执行管道来执行,能在pre,post或核心操作中执行.跟插件一样,不能在创建之前和删除之后执行.如果执行过程中有异常发生,会取消并回滚整个操作.实时工作流里所有的活动和 ...

  2. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理...

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  3. Dynamic CRM 2013学习笔记(十八)根据主表状态用JS控制子表自定义按钮

    有时要根据主表的审批状态来控制子表上的按钮要不要显示,比如我们有一个需求审批通过后就不能再上传文件了. 首先打开Visual Ribbon Editor, 如下图,我们可以利用Enable Rules ...

  4. Dynamic CRM 2013学习笔记(一)插件输入实体参数解析

    1. 问题描述 最近新建了一个post事件的插件,传入的参数处理如下: 1: if (context.InputParameters.Contains("Target") & ...

  5. Dynamic CRM 2013学习笔记(二十二)插件里调用WCF服务

    1. 添加service: 2.调用WCF BasicHttpBinding myBinding = new BasicHttpBinding(); myBinding.Name = "Ba ...

  6. fetchxml 汇总_Dynamic CRM 2013学习笔记(十七)JS读写各种类型字段方法及技巧

    我们经常要对表单里各种类型的字段进行读取或赋值,下面列出各种类型的读写方法及注意事项: 1. lookup 类型 清空值 var state = Xrm.Page.getAttribute(" ...

  7. Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍

    开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...

  8. 2022Java学习笔记七十三(异常处理:运行时异常、编译时异常、异常的默认处理的流程)

    2022Java学习笔记七十三(异常处理:运行时异常.编译时异常.异常的默认处理的流程) 一.异常体系 1.Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题 2.R ...

  9. Python学习笔记(十三):异常处理机制

    Python学习笔记(十三):异常处理机制 关于Python的异常处理机制 Python学习笔记(十三):异常处理机制 一.异常处理机制 常见异常类型 二.异常处理 try...except 异常类的 ...

最新文章

  1. 斯坦福2019秋季课程CS224W
  2. 存在于实数域的微观粒子
  3. labview在2048中添加时间滚动条_Axure 教程:不可见滚动条的页面滚动效果
  4. VB程序逆向常用的函数
  5. 几种流行的AJAX框架:jQuery,Mootools,Dojo,Ext JS的对比
  6. Spark笔记:复杂RDD的API的理解(下)
  7. html5 自定义 datepicker,如何使用 React 构建自定义日期选择器(3)
  8. matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc
  9. 开课吧:数据分析的价值体现在哪些方面?
  10. debug安装包安装在别人手机上闪退?
  11. python字符串长度排序_python-对混合类型和不同长度的字符串进行排序
  12. 拓端tecdat|R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
  13. RabbitMQ-理解消息通信-虚拟主机和隔离
  14. html入门教程博客,HTML基础教程
  15. Vue源码学习1--获取源码和查找入口文件
  16. 卡刷su+android7,supersu最新版卡刷包
  17. S MT 精密电阻 对照 表
  18. 清洁机器人--屏幕显示方案之屏幕的那些事
  19. Python 时间标准化
  20. vue中image 的:src 与 src

热门文章

  1. DB2数据库V8.2版本远程连接方法
  2. Ubuntu中Netbeans的中文问题彻底解决
  3. 存储过程和函数——概述||创建存储过程||调用存储过程||查看存储过程||删除存储过程
  4. 常用基础参数SurvivorRatio讲解 || NewRatio讲解 || MaxTenuringThreshold讲解
  5. VSCode 自定义html5模板
  6. Web.xml 文件与server.xml 文件使用总结
  7. 创建CSS和处理的一些方法
  8. jQuery中wrap、wrapAll和wrapInner用法以及区别
  9. Git 技术篇-GitHub免费私有库设置方法实例演示,GitHub私有库时代来临
  10. 23种设计模式(下)