Dynamic CRM 2013学习笔记(三十八)流程1

CRM 2013 里流程有4个类别:操作(action)、业务流程(business process flow)、对话(dialog)和工作流(workflow)。它们都是从 setting –> Process 进入,然后点击New按钮来创建:

Dynamic CRM 2013学习笔记(三十八)流程1

这篇主要介绍操作:什么是操作、什么时候使用操作、如何创建以及如何调用

 

一、什么是操作

操作是CRM 2013 新增加的一个功能,用来扩展系统的标准功能。业务人员可以用它来实现业务逻辑,然后开发人员可以在系统事件里(比如update,create)来使用它。业务人员可以写业务逻辑,就像以前在工作流时一样。如果业务逻辑改变了,业务人员可以直接在操作里修改,而不需要开发人员的参与。 它可以针对某个实体,也可以是全局的(也就是不针对任何实体),也是在执行管道的30阶段执行,参与到数据库事物中,可以将多个步骤或者操作包含到操作中,支持输入和输出参数,支持在这个消息的Pre或者Post阶段调用其他的插件或者工作流,支持在C#或者JavaScript中调用它,但是它不支持在工作流中直接被调用,也不支持设定触发的范围,设置触发范围为组织级或者用户级。

 

二、什么时候使用操作

如果你想在一些条件下执行待定的一些步骤,比如一个case被打开多少天并且没有其它操作;我们能根据case打开的天数来实现业务逻辑,然后在case记录里执行它。我们可以发邮件到高级service manager,改变proirity,把case分配到队列里,所以的这些步骤都可以在一个流程里。在以前的版本里,我们用工作流来实现。

 

三、怎么创建操作

1. settings –> process, 点击New 按钮创建操作

Dynamic CRM 2013学习笔记(三十八)流程1

 

2. 点击ok后,会弹出下面的界面:

Dynamic CRM 2013学习笔记(三十八)流程1

 

3. 可以定义输入,输出参数,是否回滚等:

Dynamic CRM 2013学习笔记(三十八)流程1

4. 添加步骤

  • 发送邮件:

Dynamic CRM 2013学习笔记(三十八)流程1

  • 更新实体:

Dynamic CRM 2013学习笔记(三十八)流程1

 

  • 创建队列:

Dynamic CRM 2013学习笔记(三十八)流程1

 

  • 赋值:

Dynamic CRM 2013学习笔记(三十八)流程1

 

最终效果图如下:

Dynamic CRM 2013学习笔记(三十八)流程1

 

四、如何调用

1. 插件调用

消息里不是我们以前常用的update,create之类了。

Dynamic CRM 2013学习笔记(三十八)流程1

public class ActionsSample :IPlugin 
{ 
    string priority = string.Empty; 
    public void Execute( IServiceProvider serviceProvider) 
    { 
        IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService( typeof( IPluginExecution Context)); 
        EntityReference caseRecord = context.InputParameters[" Target"] as EntityReference; 
        EntityReference EscalatedBy = context.InputParameters[" EscalatedBy"] as EntityReference; 
        priority = context.OutputParameters[" Priority"]. ToString(); }
 
    } 
}

 

也可以在update或create之类的消息里,用下面的方法调用操作:

OrganizationRequest req = new OrganizationRequest("new_Escalat");
 
req["EscalatedBy"] = new EntityReference("systemuser", context.InitiatingUserId);
 
req["Target"] = new EntityReference(context.PrimaryEntityName, context.PrimaryEntityId);
 
OrganizationResponse response = service.Execute(req);

 

 

2. JS调用

 

 

 

 

 

 

 

 

界面上添加一个按钮,然后调用下面的function:

var requestXML = new XMLHttpRequest(); 
requestXML.onreadystatechange = ShowResponse; 
function Escalate() {// function for the command bar 
    var recordId = Xrm.Page.data.entity.getId(); var userId = Xrm.Page.context.getUserId();
    EscalateRequest( userId, recordId); 
}
 
function EscalateRequest( EscalatedById, CaseId) { 
    var postUrl = Xrm.Page.context.getClientUrl() + "/ XRMServices/ 2011/ Organization. svc/ web";
    // WebService Url var requestText = ""; requestText + = "< s:Envelope xmlns:s =\" http:// schemas.xmlsoap.org/ soap/ envelope/\" >"; 
    requestText + = " < s:Body >"; requestText + = " < Execute xmlns =\" http:// schemas.microsoft.com/ xrm/ 2011/ Contracts/ Services\" xmlns:i =\" http:// www.w3. org/ 2001/ XMLSchema-instance\" >"; 
    requestText + = " < request xmlns:a =\" http:// schemas.microsoft.com/ xrm/ 2011/ Contracts\" >"; 
    requestText + = " < a:Parameters xmlns:c =\" http:// schemas. datacontract.org/ 2004/ 07/ System.Collections.Generic\" >"; 
    requestText + = " < a:KeyValuePairOfstringanyType >" 
    requestText + = " < c:key > EscalatedBy </ c:key >" 
    requestText + = " < c:value i:type =\" a:EntityReference\" >" 
    requestText + = " < a:Id >" + EscalatedById + "</ a:Id >" 
    requestText + = " < a:LogicalName > systemuser </ a:LogicalName >" 
    requestText + = " < a:Name i:nil =\" true\" />" 
    requestText + = " </ c:value >" 
    requestText + = " </ a:KeyValuePairOfstringanyType >" 
    requestText + = " < a:KeyValuePairOfstringanyType >" 
    requestText + = " < c:key > Target </ c:key >" 
    requestText + = " < c:value i:type =\" a:EntityReference\" >" 
    requestText + = " < a:Id >" + CaseId + "</ a:Id >" 
    requestText + = " < a:LogicalName > incident </ a:LogicalName >" 
    requestText + = " < a:Name i:nil =\" true\" />"
    requestText + = " </ c:value >" 
    requestText + = " </ a:KeyValuePairOfstringanyType >" 
    requestText + = " </ a:Parameters >" 
    requestText + = " < a:RequestId i:nil =\" true\" />" 
    requestText + = " < a:RequestName > new_Escalate </ a:RequestName >" 
    requestText + = " </ request >" 
    requestText + = " </ Execute >" 
    requestText + = " </ s:Body >" 
    requestText + = "</ s:Envelope >" 
    requestXML.open(" POST", postUrl, true);// true is for async 
    requestXML.setRequestHeader(" Accept", "application/ xml, text/ xml, */*"); 
    requestXML.setRequestHeader(" Content-Type", "text/ xml; charset = utf-8"); 
    requestXML.setRequestHeader(" SOAPAction", "http:// schemas.microsoft.com/ xrm/ 2011/ Contracts/ Services/ IOrganizationService/ Execute"); 
    requestXML.send( requestText); } 
    
function ShowResponse() { 
    var x = requestXML.responseXML.getElementsByTagName(" a:KeyValuePairOfstringany Type"); 
    for (i = 0; i < x.length; i + +) { 
        if (x[ i]. childNodes[ 0]. textContent = = "Priority") 
        { alert(" The case has been assigned to " + x[ i]. childNodes[ 1]. textContent + " priority."); } } 
}

 

 

 

 

 

 

Dynamic CRM 2013学习笔记 系列汇总

更多相关文章
  • 搞了一天,才算搞定. 第一步:定位Matlab中Java环境的ext目录   新建一个M script文件,或者直接在Matlab的交互式命令行中输入:   disp(java.lang.System.getProperty('java.ext.dirs'));  查看输出(不同的版本.安装环境不一 ...
  • 文|孙宏超这是比特币最好的时代:李嘉诚入场.美联储主席伯南克表示支持.曾经疯涨--:这也是比特币最差的时代,中美欧印相继行动比特币全球遭围堵.比特币价格大跌.被指骗局--.由易网科技主办的五道口沙龙,邀请到嘉宾:OKCoin CEO徐明星.火币网CEO李林.比特币Trade CEO张寿松.比特币中文 ...
  • 新华网平壤12月27日电(记者朱龙川)朝鲜的互联网和移动3G网络27日晚间陷入瘫痪.平壤时间27日19时30分(北京时间18时30分)许,朝鲜的互联网和移动3G网络陷入瘫痪.截至平壤时间21时30分记者发稿时,网络仍未恢复正常.
  • 11g的DDL_LOCK_TIMEOUT参数的作用,从字面上看,就是DDL获取锁的超时时间. 先看下官方文档的介绍: DDL_LOCK_TIMEOUT Property Description Parameter type Integer Default value 0 Modifiable ALT ...
  • <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> <!-- org.hibernate.dialect.MySQL ...
  •  区别一: 重定向时浏览器上的网址改变 转发是浏览器上的网址不变 区别二: 重定向实际上产生了两次请求 转发只有一次请求 重定向: 发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请 ...
一周排行
  • 如果说Uber.Lyft.Airbnb这些名字对你而言已经不那么酷了,AirPooler或许会让你重新认识此类服务的酷劲儿.没错,共享房子.共享车子神马的已经弱爆了,现在,私人飞机也该共享了. AirPooler就是 ...
  • Cracking the coding interview 9.6   Given a matrix in which each row and each column is sorted. write a meth ...
  • 随着加热器.灯泡甚至马桶等越来越多家居设备连接到互联网上,为黑客实施破坏提供了新的渠道.在黑帽安全大会上,两名黑客展示了他们如何让三星生产的最新电视机(配置了摄像头)监视用户.其中韩国大学研究员Seungjin Le ...
  • 作为B2B公司,IBM也发现Web2.0是传播信息的最快.最有说服力的做法.在这里有利可图,但也有独特的风险.文/希文互联网正经历着翻天覆地的变化——一种广受欢迎的新   兴应用方法和工具可以让用户积极主动地规划互联 ...
  • --------   API    -------- DataKit          用Node做后端,前端封装库的 框架   --------   Auth    -------- MPOAuth   ----- ...
  • 弱电 弱电一般是指直流电路或音频.视频线路.网络线路.电话线路,直流电压一般在32V以内.家用电器中的电话.电脑.电视机的信号输入(有线电视线路).音响设备(输出端线路)等用电器均为弱电电气设备. 强电和弱电从概念上 ...
  • 原题只需要一个结果,而现在需要3个结果,所以我们考虑数组作为返回值,同时,原题用到的nTimes,也应改为一个大小为3的数组.我们要如何保证最终返回的数组的3个元素就是3个灌水最多的用户呢?首先分析其所占比例,各超过 ...
  • 华强北热销的乔布斯外壳.南都记者刘凡摄南都讯 记者刘凡 在全世界的苹果粉都在沉痛悼念乔布斯去世时,深圳的山寨产业也在悄然用自己的方式纪念这位伟大的创新发明者.昨日记者在华强北看到,已有工厂制作出四款印有乔布斯头像的手 ...
  • 1.编写程序.调试代码时,是不是感觉文字的白色背景有些刺眼呢?vs2008 给我们提供了改变背景色的功能. 依次展开:工具->选项->环境->字体和颜色,可以看到下图所示设置框. 首先,在图中标记的 ...
  • 在展示动作感应技术Project Natal的同时,微软还向玩家作出保证,X360会延续长达十年之久. 微软游戏业务副总裁Shane Kim在E3大展上称:"我们确信,X360的寿命周期将一直延续到2015 ...