2012-04-04 93 views
0

我在嘗試獲取CRM2011合同的GUID時遇到問題。首先,我有一個創建實體記錄的工作流程,它比啓動插件更新合同。CRM 2011獲取實體記錄的GUID(合同更新)

RenewContractRequest req = new RenewContractRequest(); 
req.IncludeCanceledLines = true; 
req.ContractId = new Guid("1767AD4E-CAF4-E011-8D97-1CC1DEF1B5FF"); 
req.Status = 1; 
RenewContractResponse resp = (RenewContractResponse)service.Execute(req); 

然而,當我試圖做到這一點:當我設置合同ID到一個新的GUID下面看到它正常工作,

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"])["contractid"]; 

RenewContractRequest req = new RenewContractRequest(); 
req.ContractId = getContract_id; 
req.IncludeCanceledLines = true; 
req.Status = 1; 
RenewContractResponse resp = (RenewContractResponse)service.Execute(req); 

我得到一個異常給定的鍵沒有出現在字典中,我的理解是,它沒有識別出我設置的GUID?這可能是一件非常愚蠢的事情,我希望有人能幫助我。

+0

哪行引發異常?哪本字典中沒有關鍵字? – surfen 2012-04-04 16:10:52

回答

0

嗨,大家好非常感謝你的幫助。

我已經想通了自己,我已經使用查詢表達式來檢索Id(GUID)和具體合同的數量。由於我將來會有很多合同,我相信這是獲得Id的更好方式。

+0

嗨羅本,你能分享你如何使用查詢表達式嗎?我也需要同樣的事情。 – Nirman 2013-10-24 09:48:19

0

試試這個:

var contract = ((Contract)context.InputParameters["Target"]); 
Guid getContract_id = contract.ContractId; 
2

我不認爲在第一行的語法將工作: -

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"])["contractid"]; 

你可以做到這一點更簡單地使用以下行: -

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"]).Id; 

當你在創建契約後觸發此事件(因此,Id是您正在創建的創建實體的Id e事件)。

在儘管檢索實體,然後設置一個屬性可以通過屬性集合進行總體而言: -

Entity myEntity = (Entity)context.InputParameters["Target"]; 
Guid myId = (Guid)entity.Attributes["myIdName"]; 
+0

這樣獲得一個'Entity'類型的實例會有一個非空的'Id'成員,所以我冒昧地更新了你的答案。我希望你會同意,如果沒有,請免費刪除更改。 – 2012-10-27 15:06:31

0

首先,這不是分配在CRM主鍵,只是讓CRM是個好主意爲你而做。 其次,也許你的插件適用於預先創建,並且預創建意味着該記錄在數據庫中尚不存在,但是如果您將該插件更改爲發佈,則可以獲取新創建記錄的GUID。

使用:

Entity myContarct= ((Entity)context.InputParameters["Target"]); 

GUID contractId = myContract.Id; 
0
Guid getContract_id = context.PrimaryEntityId; 

此外,如果您有理由這樣做,在CRM中分配主鍵(實體ID)並不一定是壞主意。

相關問題