2010-03-31 55 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

相關問題