在CRM 2011中动态设置自定义工作流活动的“ReferenceTarget”属性

时间:2012-10-15 06:11:37

标签: .net dynamics-crm-2011 workflow-activity

我有一个自定义工作流活动,它根据传递的输入参数(entityName和Name)创建记录。现在,我希望能够将创建的记录作为输出参数传递。但是要声明具有EntityReference类型的OutArgument,我必须设置ReferenceTarget属性。由于我不知道正在创建哪个实体类型,我希望能够动态设置此属性。当我尝试在'ReferenceTarget'属性中使用属性或变量时,它无法识别它。

我该怎么做?请帮忙。

[Input("Entity Name")]
public InArgument<string> EntityName { get; set; }

[Input("Name")]
public InArgument<string> Name { get; set; }

[Output("Created Record")]
[ReferenceTarget("contact")]     <<=== how do i set this dynamically??
public OutArgument<EntityReference> CreatedRecord { get; set; }

4 个答案:

答案 0 :(得分:0)

据我所知,你不能,我怀疑这是为了支持工作流编辑器的行为,它如何知道要呈现哪些选项?

当我过去遇到这种情况时,我创建了一个视觉研究模板,我可以用它来快速生成我需要的各种版本。

答案 1 :(得分:0)

最好的解决方法(不是一个简洁的工作)是创建尽可能多的输入参数,因为您怀疑可能需要将许多不同的实体类型作为ReferenceTarget传递,然后根据工作流中的条件调用自定义工作流活动并设置apt输入参数,然后在工作流程的Execute方法中,您可以检查哪个输入参数为非空白并进行相应处理。

工作流输入参数保留在开发人员内部,因此,只要您完成工作就可以了,并且可以灵活地在不同的情况下使用相同的自定义工作流活动,尤其是当您不知道实体引用的类型时必须处理。

答案 2 :(得分:0)

  

到目前为止,这实际上是不可能的,但是有解决方法。

我建议您参考要传递的所有输入参数创建一个自定义实体调用Context。并将context[""]填充为EntityReference,以将其作为输出返回。

[Output("Created Record")]
[ReferenceTarget("new_context")]
public OutArgument<EntityReference> CreatedRecord { get; set; }

//set whatever you wanted to export
var entity = new Context();
entity["new_contact"] = ? //populate contact if created as per input
entity["new_account"] = ? //populate account if created as per input
// and so on

答案 3 :(得分:-1)

//Set lookup for Account(Customer)
[RequiredArgument]
[Input("Select Account to Assign")]
[ReferenceTarget("account")]
public InArgument<EntityReference> account { get; set; }