当我们在流程里添加步骤时,有一些默认的步骤,像创建、更新、发邮件等,但如果你想加一个里面没有的步骤,比如发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. 自动生成form Scripts

    运行脚本: begin xxx_plsql_generator_pkg2.form_view_iud_p(p_block_name =>'CONTRACT_T' ,p_table_name =& ...

  2. LESS 学习记录(简单入门)

    什么是 LESS LESS是一种动态样式语言,属于 CSS 预处理语言的一种.它使用类似 CSS 的语法,但是 赋予了动态语言的特性,比如变量.继承.运算.函数等,方便 CSS 的编写和维护. 使用 ...

  3. 开发中model,entity和pojo的区别

    Entity接近原始数据,Model接近业务对象- Entity:是专用于EF的对数据库表的操作, Model:是为页面提供数据和数据校验的,所以两者可以并存 POJO:POJO是Plain Ordi ...

  4. C# byte数组转换成List<String>

    byte[] bys=buffer; string[] AllDataList=  Encoding.Default.GetString(bys).Split(Environment.NewLine. ...

  5. 设置PATH变量

    一不小心把PATH变量清空了,所有的命令都执行不了了,提示“xxx: command not found”,解决办法:在命令行输入export PATH=/usr/local/sbin:/usr/lo ...

  6. B站运维团队成长的血泪史

    胡凯,bilibili运维负责人,曾经就职于金山软件.金山网络.猎豹移动,负责运维相关工作.Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台.   95后二次元新人 ...

  7. C#的 构造函数 和 方法重载

    构造函数(一本正经的讲构造函数 如果想看不正经的往下翻看方法重载) 方法名称与类名相同,没有返回值类型,连void都没有 用作给类的对象初始化 一个类中可以有多个构造 如果手动添加一个构造,系统不会自 ...

  8. node.js 基础学习笔记1

    1. node -v 查看版本 node -e --js代码 node --进入编辑模式 Ctrl+C 退出编译模式 var http=require('http') http.createServe ...

  9. CentOS7安装mysql5.7.11

    开始安装 yum update yum install wget wget http://repo.mysql.com/mysql57-community-release-el7-7.noarch.r ...

  10. DB2不记录事务日志

    1. DB2大数据处理不记录事务日志步骤:  建表需要添加属性“NOT LOGGED INITIALLY”  在大批量更改操作的同一个事务开始时执行:“ALTER TABLE tabname ACTI ...