zoukankan      html  css  js  c++  java
  • Dynamic CRM 2013学习笔记(四十三)流程6

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

     

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

    image

     

    需要引用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,像插件一样注册,注册完后,就可以在添加流程步骤里找到它了:

    image

     

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

    image

     

    注意,如果你修改了项目,重新编译后,你需要重启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学习笔记 系列汇总

  • 相关阅读:
    C#--跨线程更新UI--实时显示POST请求传过来的数据
    C#--序列化--JSON和对象互转方法
    C#--winform--Label标签的文字居中
    C#--自定义控件-panel控件(渐变色,文字的绘制)
    C#--自定义控件-开发LED指示灯控件(带闪烁效果)
    艾而特--ModbusTcp通讯测试
    C#--各种方法总结(静态,构造,析构,虚方法,重写方法,抽象,扩展)
    C#--特性的运用试验
    C#--特性基础
    C#--无法将lambda表达式转换为类型‘Delegate’,原因是它不是委托类型
  • 原文地址:https://www.cnblogs.com/fengwenit/p/4317152.html
Copyright © 2011-2022 走看看