需求:创建一个workflow ,每隔三个月执行一次对满足要求的CRM数据进行更新。
经过调查实践发现CRM系统中可自定义的workflow不能进行无限的循环,最多只能执行7次。
只能在VS创建自定义workflow实现无限循环,集成到CRM.
实现步骤:
- 创建自定义workflow activity ,实现对CRM数据更新。
- 创建自定义workflow,实现整个流程。
- 集成自定义workflow到CRM.
创建自定义workflow activity
- 启动 Microsoft Visual Studio 2010。
- 在"文件"菜单上,单击"新建",然后单击"项目"。
- 在"新建项目"对话框的"已安装的模板"窗格中,选择"Visual C#"下的"工作流",然后选择"活动库"。
- 指定解决方案的名称和位置,然后单击"确定"。
- 导航到"项目"菜单并选择"属性"。在"应用程序"选项卡上,指定".NET Framework 4"作为目标框架。
- 添加对 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Workflow.dll 程序集的引用。
- 删除项目中的 Activity1.xaml 文件。
- 将类文件 (.cs) 添加到项目中。在解决方案资源管理器中,右键单击项目,选择"添加",然后单击"类"。在"添加新项"对话框中,键入类的名称,然后单击"添加"。
- 打开类文件,然后添加以下 using 指令:
protected override void Execute(CodeActivityContext context)
- 编译项目以创建程序集 (.dll)。
若要使用在 Microsoft Dynamics CRM 之外创建或修改的 XAML 工作流,请确保:
- 在 Microsoft Visual Studio 中的"文件"菜单上,选择"新建",然后单击"项目"。
- 在"已安装模板"下展开"Visual C#",然后单击"工作流"。
- 单击"活动库",选择".NET Framework 4",为项目指定名称和位置,然后单击"确定"。
- 在"解决方案资源管理器"中,右键单击"活动库",然后单击"添加引用"。
- 单击"浏览",并找到 Microsoft.Xrm.Sdk.dll 和 Microsoft.Xrm.Sdk.Workflow.dll 文件。选择这些文件并将其添加到项目。
- 进行工作流的定制。
集成自定义workflow到CRM.
使用插件注册工具来注册自定义工作流活动程序集到CRM。
- 构建 Plug-in Registration 工具。您可在 SDK\Tools\PluginRegistration 文件夹中找到该工具的源代码。若要构建和使用插件注册工具,您必须首先安装 Windows Identity Foundation。
- 用户帐户必须具有系统定制员或系统管理员角色。
导入自定义的workflow
%TrainingKit%\Labs\WorkflowVS2010\Sources\Assets\WorkflowXamlTool.
打开 WorkflowXamlTool.sln, 修改workflow name and primaryentity ,执行solution.
var newWF = new Entity("workflow");
newWF.Attributes.Add("name", "On test 10311");
newWF.Attributes.Add("type", new OptionSetValue(1));
newWF.Attributes.Add("scope", new OptionSetValue(4));
newWF.Attributes.Add("category", new OptionSetValue(0));
newWF.Attributes.Add("primaryentity", "abc_dummy");
newWF.Attributes.Add("xaml", content2);
newWF.Attributes.Add("ondemand", true);
try
{
_serviceProxy.Create(newWF);
MessageBox.Show("Workflow successfully imported.", "Import", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (FaultException ex)
{
}
选择自定义xaml 文件,导入。
如何更新workflow activity dll
- 停止MSCRMAsyncService服务
- 执行iisreset – stop
- 替换dll 文件到C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly.
- 执行iisreset – start
- 开启MSCRMAsyncService服务
如何调试workflow activity
Attach 进程CrmAsyncService.exe,执行workflow.
Workflow activity如何更新数据
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(wfContext.UserId);
InfluencerContext context = new InfluencerContext(service);
context.ClearChanges();
context.Attach(influencer);
context.UpdateObject(influencer);
context.SaveChanges();