2014-04-04 25 views
4

使用此代碼,我可以在C#中設置CRM實體的狀態和狀態。在一個請求中創建並設置CRM實體的狀態

SetStateRequest appointmentRequest = new SetStateRequest 
{ 
    State = new OptionSetValue(3), //Scheduled 
    Status = new OptionSetValue(5), //Busy 
    EntityMoniker = new EntityReference("appointment", myEntity.Id) 
}; 

crmsvc.Execute(appointmentRequest); 

我在兩個請求創建一個使用

crmsvc.Create(myEntity); 

這同一個實體這樣做在此之前幾行似乎啞,所以我去尋找一種方式來做到這一點的一個請求。

發現了這個問題I need to set the State and StatusCode of a custom entity它似乎狀態碼可以在保存之前設置,但我找不到任何樣品與狀態。

試着這樣做,但它這麼想的工作

myEntity["state"] = new OptionSetValue(3); 

它拋出回:

實體不包含具有Name = '狀態' 屬性。 (故障細節等於 Microsoft.Xrm.Sdk.OrganizationServiceFault):'實體' 實體不包含Name ='state'的屬性。

那麼可以在第一次保存之前設置狀態和狀態碼嗎?

+1

黑客解決方案將是在創建實體後運行工作流程,檢查特定字段以及基於該字段的狀態......請注意此評論的「黑客解決方案」部分。 – Joe

+0

@Joe我們最終可能會這樣做。謝謝。 – JensB

+0

是的,這不是很好,但它會解決你的問題。我可能會爲它創建一個同步插件,而不是運行異步工作流程。你的電話雖然。 – Joe

回答

4

正如您在list of attributes中看到的那樣,州代碼屬性對創建無效。這意味着CRM將簡單地忽略您傳遞的價值。

更改狀態始終是明確的操作。所以你不能把它合併成一個單一的電話。

但是,您可以在創建調用期間定義statuscode

另請注意,表示記錄狀態的屬性爲statecodestatuscode,並且它們的值彼此相關。

1

需要狀態碼和狀態碼來通過CRM服務設置實體的狀態。這是不直觀的,因爲狀態碼可以從狀態碼派生出來,但它是系統工作的方式。

從更抽象的角度來看有兩種方式,你可以去這樣做的狀態變化只用的StatusCode:

1)使用元數據服務來動態檢索給出的statecode在運行時你的實體的StatusCode 。然後,您可以兌現狀態碼值,以便您只需爲每個應用程序範圍的實體檢索一次。

2)生成包含實體狀態碼/狀態碼配對的自定義實體類。

對於上述任何一個選項,您都可以爲您的實體創建一個設置狀態方法,該狀態方法從您傳遞狀態碼的狀態碼派生出狀態碼。

相關問題