Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动
当我们在流程里添加步骤时,有一些默认的步骤,像创建、更新、发邮件等,但如果你想加一个里面没有的步骤,比如发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。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?