如何确定CRM 2011中的工作流模式?

时间:2014-02-10 11:14:45

标签: c# dynamics-crm-2011 dynamics-crm crm

我想确定Microsoft CRM 2011中工作流的启动方式(后台/异步)或(实时/按需)?在两个OOB工作流条件和自定义工作流活动中?

基于以下链接,我可以看到Microsoft在CRM 2013 SDK中引入了一个新属性( IWorkflowContext.WorkflowMode )来公开它。我想在CRM 2011中获得相同的信息。

http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.workflow.iworkflowcontext.workflowmode(v=crm.6).aspx

3 个答案:

答案 0 :(得分:2)

我认为在工作流设计器中区分按需和触发的工作流是不可能的。

在自定义工作流活动中,如果工作流由触发器启动,则只有Target输入参数:

var context = activityContext.GetExtension<IWorkflowContext>();
if (context.InputParameters.Contains("Target"))
{
    // Started by a trigger
}
else
{
    // Started on demand
}

除此之外,您还可以通过Target类型确定哪种触发器启动了工作流程。此信息也可在context.MessageName中使用,其中包含更新消息时的字符串“Update”。

if (context.MessageName == "Update")
    // this is an update message
var context = activityContext.GetExtension<IWorkflowContext>();
if (context.InputParameters.Contains("Target"))
{
    if (context.InputParameters["Target"].GetType() == typeof(Entity))
    {
        // create and update are Entity
    }
    else if (context.InputParameters["Target"].GetType() == typeof(EntityReference))
    {
        // delete and some other operations are EntityReference
    }       
}
else
{
    // Started on demand
}

更新了哪些特定字段可以通过Target包含的属性来确定。
这可以用于确定触发工作流的字段。
如果创建消息触发了工作流,则Target将包含所有字段(用户输入的字段)。为了确保工作流是由字段更新触发的,您可以结合使用context.MessageName并检查Target包含哪些属性。

答案 1 :(得分:1)

您在CRM 2011中不存在您所寻求的功能.CRM 2011中的所有工作流程都是异步运行的,因此不需要IWorkflowContext.WorkflowMode

您无法使CRM 2011同步运行OOTB工作流程。如果要在事务期间执行代码(CRM 2013可以使用同步工作流的方式),则必须在插件中对逻辑进行编码。

答案 2 :(得分:0)

我认为您可以通过在实体上添加“隐藏”字段并创建一对“处理程序”工作流来实现您的目标,这些工作流填充此字段然后激活您的“实际”工作流程。

第1步。 在实体上创建一个字段以保存指示启动器的值

第2步。 将“实际”工作流程创建为子流程

第3步。 创建按需(仅)工作流程:
  一个。在“启动器”字段中设置实体的值,指示工作流程是手动运行的 湾调用子工作流程

第4步。 创建一个按需未选择的工作流程:
  一个。在“启动器”字段中设置实体的值,指示工作流程已自动化   湾调用子工作流程

步骤5.显示结果
一个。创建一个显示此值和/或的“管理”表单 湾使字段隐藏在用户表单上,并根据需要通过js和/或显示 C。创建一个包含显示此字段和/或的视图 d。创建包含此字段和/或的报告 即检查代码中此字段的值

除非有特定值,否则此字段不会包含在用户表单或视图中。

通过使用自定义字段并通过“处理程序”工作流填充它,您将能够实现您的OOB目标。 (即如果您考虑使用Web GUI创建自定义字段和工作流“OOB”。)

通过以编程方式检查此字段的值,您将实现自定义工作流目标。