2010-03-31 31 views
0

我需要从Dynamics CRM 4工作流程中获取记录的GUID。这是在工作流程执行期间创建的记录。我想写一个接受查找的w/f程序集并返回一个包含GUID的字符串(这对我的目的来说足够了)。但是,程序集中的查找必须指定实体的类型。由于许多实体已经存在这样的要求,而且客户在未经通知的情况下创建的其他许多实体就不具备这种要求,所以这对我无效。我可以在CRM工作流程中获取记录的GUID吗?

是否有任何方法可以轻松地完成此操作,或者有任何方法为将接受任何实体类型的工作流程组件创建查找参数?

回答

1

最好的办法是创建一个后期创建插件,将GUID设置为一个自定义字段(new_myguid),然后您的工作流程一旦执行就可以读取该字段。

+0

是啊,这就是我到底去了。 – 2010-04-01 09:23:46

1

你是对的,你不能从工作流设计者本地访问一个实体标识,并且定制活动将被限制在每个输入属性的单个实体。

您可以实现Focus的建议,但是您也需要在每个实体上使用该自定义属性和插件。

我想我可能会做一个自定义活动,并有多个输入属性,所有输出到一个输出属性。

事情是这样的:

[CrmInput("Contact")] 
[CrmReferenceTarget("contact")] 
public Lookup Contact 
{ 
    get { return (Lookup)GetValue(ContactProperty); } 
    set { SetValue(ContactProperty, value); } 
} 
public static readonly DependencyProperty ContactProperty = 
    DependencyProperty.Register("Contact", typeof(Lookup), typeof(YourActivityClass)); 

[CrmInput("Account")] 
[CrmReferenceTarget("account")] 
public Lookup Account 
{ 
    get { return (Lookup)GetValue(AccountProperty); } 
    set { SetValue(AccountProperty, value); } 
} 
public static readonly DependencyProperty AccountProperty = 
    DependencyProperty.Register("Account", typeof(Lookup), typeof(YourActivityClass)); 

[CrmOutput("Entity ID")] 
public string EntityID 
{ 
    get { return (string)GetValue(EntityIDProperty); } 
    set { SetValue(EntityIDProperty, value); } 
} 
public static readonly DependencyProperty EntityIDProperty = 
    DependencyProperty.Register("EntityID", typeof(string), typeof(YourActivityClass)); 

protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 
{ 
    Lookup[] lookups = new[] { Contact, Account }; 
    foreach (Lookup lookup in lookups) 
    { 
     if (lookup != null && lookup.Value != Guid.Empty) 
     { 
      EntityID = lookup.Value.ToString(); 
      break; 
     } 
    } 

    return ActivityExecutionStatus.Closed; 
} 
+0

这将不起作用,因为实体不会提前知道。 – 2010-04-01 09:22:59

相关问题