如何在Dynamic CRM 2011中使用自定义Workflow

原文链接: http://www.cnblogs.com/csswuxi/archive/2012/11/02/2751342.html

需求:创建一个workflow ,每隔三个月执行一次对满足要求的CRM数据进行更新。

经过调查实践发现CRM系统中可自定义的workflow不能进行无限的循环,最多只能执行7次。

只能在VS创建自定义workflow实现无限循环,集成到CRM.

实现步骤:

  1. 创建自定义workflow activity ,实现对CRM数据更新。
  2. 创建自定义workflow,实现整个流程。
  3. 集成自定义workflow到CRM.

     

创建自定义workflow activity

  1. 启动 Microsoft Visual Studio 2010
  2. "文件"菜单上,单击"新建",然后单击"项目"
  3. "新建项目"对话框的"已安装的模板"窗格中,选择"Visual C#"下的"工作流",然后选择"活动库"
  4. 指定解决方案的名称和位置,然后单击"确定"
  5. 导航到"项目"菜单并选择"属性"。在"应用程序"选项卡上,指定".NET Framework 4"作为目标框架。
  6. 添加对 Microsoft.Xrm.Sdk.dll Microsoft.Xrm.Workflow.dll 程序集的引用。
  7. 删除项目中的 Activity1.xaml 文件。
  8. 将类文件 (.cs) 添加到项目中。在解决方案资源管理器中,右键单击项目,选择"添加",然后单击""。在"添加新项"对话框中,键入类的名称,然后单击"添加"
  9. 打开类文件,然后添加以下 using 指令:

    using System.Activities;

    using Microsoft.Xrm.Sdk;

    using Microsoft.Xrm.Sdk.Workflow;

  10. 使该类继承自 CodeActivity 类:

    public class SampleCustomActivity : CodeActivity

  11. 通过添加Execute方法为类添加功能:

    protected override void Execute(CodeActivityContext context)

    {

    //Activity code

    Update Data here

    }

  12. 编译项目以创建程序集 (.dll)

 

 

创建自定义workflow

若要使用在 Microsoft Dynamics CRM 之外创建或修改的 XAML 工作流,请确保:

  • 您的用户帐户在 Microsoft Dynamics CRM 中具有 Deployment Administrator 权限。
  1. 在 Microsoft Dynamics CRM 服务器上启用了声明性工作流。                     PowerShell$setting.AllowDeclarativeWorkflows="True"
    								

创建工作流项目

  1. 在 Microsoft Visual Studio 中的"文件"菜单上,选择"新建",然后单击"项目"。
  2. 在"已安装模板"下展开"Visual C#",然后单击"工作流"。
  3. 单击"活动库",选择".NET Framework 4",为项目指定名称和位置,然后单击"确定"。
  4. 在"解决方案资源管理器"中,右键单击"活动库",然后单击"添加引用"。
  5. 单击"浏览",并找到 Microsoft.Xrm.Sdk.dllMicrosoft.Xrm.Sdk.Workflow.dll 文件。选择这些文件并将其添加到项目。
  6. 进行工作流的定制。

集成自定义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

  1. 停止MSCRMAsyncService服务

  2. 执行iisreset – stop
  3. 替换dll 文件到C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly.
  4. 执行iisreset – start
  5. 开启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();

 

转载于:https://www.cnblogs.com/csswuxi/archive/2012/11/02/2751342.html

猜你喜欢

转载自blog.csdn.net/weixin_30938149/article/details/94998584