2013-04-26 71 views
1

我正在編寫一個基本上執行相同功能的插件 - 比方說,在狀態更改時創建任務。該功能需要在2個實體上發生。CRM 2011多個實體的一個插件

除了設置實體類型字段(一個選項集)外,每一步都完全相同。這設置爲EntityAEntityB,具體取決於哪個實體觸發了該插件。

我現有的代碼執行以下操作

new_entitya entityA = (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity && context.PrimaryEntityName == "new_entitya") 
            ? ((Entity)context.InputParameters["Target"]).ToEntity<new_entitya>() 
            : null; 

現在是沒有辦法,我可以設置.ToEntity通話的基礎上PrimaryEntityName的,而不是寫new_entitya或new_entityb值的值的方法嗎?

回答

2

爲什麼要投麼?您只需檢查實體名稱並應用您需要的任何屬性即可。

var newTask = new Entity("Task"); 
newTask.Attributes.Add("subject", "foo"); 
// etc etc for other common properties 
if (context.PrimaryEntityName.Equals("new_entitya")) 
{ 
    newTask.Attributes.Add("new_optionset", valueA); 
} 
else 
{ 
    newTask.Attributes.Add("new_optionset", valueB); 
} 

我猜的缺點是,你必須保持在插件中optionset值,但似乎一個巨大的開銷不是如果只是兩個值。

+0

+1後期更好這種情況。早期綁定的包裝並不總是最好的選擇。如果你需要開始考慮使用反射,你做錯了。 – 2013-04-27 13:50:05

0

請參閱此post。基本上,你必須根據傳入的類型在飛行中建立一個通用方法。

+1

所以它應該被關閉爲重複? – 2013-04-26 18:18:07

+0

@PaulBellora是和否。這個問題的表述是CRM開發人員會問這個問題的方式,因此它會幫助他們找到它......但理論上這個問題實際上是我連接到的問題... – Daryl 2013-04-26 18:42:00