2017-09-13 93 views
0

我有代碼檢索價值從查找CRM插件使用C#。這很簡單,從查找中讀取guid,然後將其顯示爲例外。給定的鍵是不存在的字典查找客戶關係管理C#插件

//Get ParentCaseID 
Guid HeaderId = ((EntityReference)entity["new_LookupTransactionHeader"]).Id; 

throw new InvalidPluginExecutionException(HeaderId.ToString()); 

在這段代碼我只是想從查找的GUID,但是當我運行該插件我得到的錯誤是這樣的。

給定的關鍵是不存在的字典

+1

一些問題:是'new_LookupTransactionHeader'的大小寫正確查找字段的邏輯名稱是它包括了?在查詢的'ColumnSet'中?實體對象的'Attributes'屬性包含什麼?您是否嘗試過調試代碼?我還建議閱讀CRM SDK的文檔。 – Alex

回答

1

的代碼應該是自explenatory:

if(entity.Contains("new_LookupTransactionHeader")){ 
    Guid HeaderId = ((EntityReference)entity["new_LookupTransactionHeader"]).Id; 
    throw new InvalidPluginExecutionException(HeaderId.ToString()); 
} 
else 
{ 
    throw new InvalidPluginExecutionException("There is no value in field new_LookupTransactionHeader."); 
} 
1
Guid HeaderId; 

if (entity.Attributes.Contains("new_LookupTransactionHeader")) 
{ 
Guid HeaderId= ((EntityReference)entity["new_LookupTransactionHeader"]).Id; 
} 

其餘的可以自己添加,如果包含返回假,它不存在

3

使用entity["attribute"]索引器訪問底層Attribute屬性是一個AttributeCollection對象,其行爲非常像Dictionary<string, object>

在這種情況下,字典中不包含你的關鍵new_LookupTransactionHeader - 這可能是因爲你質疑從CRM中的數據,和值在CRM null,在這種情況下,CRM省略從字典中的值(即使你特別要求在ColumnSet)。

在嘗試訪問它之前,您可以檢查該字典是否存在於字典中,例如, entity.Attributes.HasKey("new_LookupTransactionHeader")

您也可以使用entity.GetAttributeValue<EntityReference>("new_LookupTransactionHeader"),這將返回null如果鍵犯規存在(而不是拋出一個異常

+0

+1與我的回答相比,此答案提供了更廣泛的問題背景,而不僅僅是解決方案。只有補充:當字段的值爲空或字段不存在時(例如,名稱中有拼寫錯誤),字典不包含關鍵字。結果相同的兒子,調試時可能會引起混淆。 – jcjr

+0

我要補充的是,如果這是該類型的默認值,則返回null,因此對於類似'decimal'的類型,您應該使用'decimal?' – Sxntk

+0

@sxntk是的,相關閱讀https://woodsworkblog.wordpress.com/ 2017/06/25 /使用最365實體級-IN-A-後期綁定時尚/ –

相關問題