当我们在流程里添加步骤时,有一些默认的步骤,像创建、更新、发邮件等,但如果你想加一个里面没有的步骤,比如发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学习笔记 系列汇总

Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动的更多相关文章

  1. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  2. Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮

    上次介绍了 Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 现在开始介绍如何配置审批流,首先在form上添加三个按钮,Submit, Agree, Reject: 1. ...

  3. Dynamic CRM 2013学习笔记(三十八)流程1 - 操作(action)开发与配置详解

    CRM 2013 里流程有4个类别:操作(action).业务流程(business process flow).对话(dialog)和工作流(workflow).它们都是从 setting –> ...

  4. Dynamic CRM 2013学习笔记(三十九)流程2 - 业务流程(Business Process Flows)用法详解

    业务流程(Business Process Flows)是CRM 2013 里一个新的流程,它提供了可视化的流程表现.业务人员创建有效.流线型的业务流程让最终用户知道当前在哪.下一步要做什么,用户可以 ...

  5. Dynamic CRM 2013学习笔记(十三)附件上传 / 上传附件

    上传附件可能是CRM里比较常用的一个需求了,本文将介绍如何在CRM里实现附件的上传.显示及下载.包括以下几个步骤: 附件上传的web页面 附件显示及下载的附件实体 调用上传web页面的JS文件 实体上 ...

  6. Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示

    CRM的项目,审批流是一个必须品.为了更方便灵活地使用.配置审批流,我们自定义了一整套审批流.首先来看下它的效果: 1. 审批模板 这是一个最简单的审批流,首先指定审批实体,及相关字段,再配置流程节点 ...

  7. Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据

    有一个实体的子表数据量太大,于是客户想用execel来导入实体数据.首先想到的是用系统自带的Import Data,客户嫌太麻烦,比如lookup字段要做map等. 下面是具体的实现步骤: 一.定义e ...

  8. Dynamic CRM 2013学习笔记(四十六)简单审批流的实现

    前面介绍过自定义审批流: Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示 Dynamic CRM 2013学习笔记(二十一)自定义审批流2 - 配置按钮 Dynamic ...

  9. Dynamic CRM 2013学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...

  10. Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置

    上次介绍了<Dynamic CRM 2013学习笔记(十九)自定义审批流1 - 效果演示> 以及如何配置自定义审批流的按钮:<Dynamic CRM 2013学习笔记(二十一)自定义 ...

随机推荐

  1. logging日志模块

    为什么要做日志: 审计跟踪:但错误发生时,你需要清除知道该如何处理,通过对日志跟踪,你可以获取该错误发生的具体环境,你需要确切知道什么是什么引起该错误,什么对该错误不会造成影响. 跟踪应用的警告和错误 ...

  2. free pascal 错误代码表

    free pascal 错误代码表 为了方便对照检查运行时错误代码,这里把所有的错误代码的含义整理出来.(最大序号为232,中间不一定连续.user.pdf P175) Run-time errors ...

  3. 获取ServletContext

    ServletConfig       config.getServletContext(): GenericServlet      this.getServletContext(); HttpSe ...

  4. HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)

    根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ...

  5. Python 包的相对导入讲解

    [Python 包的相对导入讲解] 参考:http://www.dai3.com/python-import.html

  6. delphi对象赋值

     Delphi的对象之间赋值主要要注意几个方面的问题:   1.对象之间的 :=赋值只是地址赋值,即是将当前对象的地址赋值到变量中,定义的变量可以是不用初始化的,在内存中两个变量指向的是同一地址空间: ...

  7. (转)MVC,MVP 和 MVVM 的图示

    作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身 ...

  8. 使用引脚模拟PWM波控制引脚

    /********************************* 代码功能:输出PWM波控制引脚 使用函数: 创作时间:2016*10*07 作者邮箱:jikexianfeng@outlook.c ...

  9. C#动态执行字符串(动态创建代码)

    在编写C#程序的时候,有时我们需要动态生成一些代码并执行.然而C#不像JavaScript有一个Eval函数,可以动态的执行代码.所有这些功能都要我们自己去完成.如下是实例. 动态创建代码: usin ...

  10. 解决 webx.ml 中The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 问题

    在Eclipse 的项目  上,点击鼠标右键 选中 ,并 Finish 即可.