2016-12-02 107 views
0

我想在C#插件代碼中檢查CRM表單字段值是否爲空。檢查CRM表單字段值是否爲空

Entity ent; 

if(ent.Attributes["telephone2"].ToString()==string.Empty) 
{ 
    Console.WriteLine(""); 
} 

ent.Attributes [ 「telephone2」]。的ToString()這是投擲KeyNotFoundException當telephone2字段的值爲空。現在,我需要檢查的telephone2價值,它拋出異常

回答

-1

之前,我會做這樣的:

Entity contact = new Entity("contact"); 
if (contact.Contains("telephone2") && !string.IsNullOrEmpty(contact.GetAttributeValue<string>("telephone2")) 
{ 
    // telephone 2 is not null 
} 

編輯:更多的信息來證明這個簡短的答案

我發現有nullempty之間的差異

想象一下這樣的情景:

  • 您有聯繫人的更新插件。
  • 這跟有名字(「約翰」)和姓(「史密斯」)設置
  • 你更新名字

現在,當你閱讀使用GetAttributeValue輸入參數,你贏了」 t知道姓氏屬性是否爲空,或者是否爲空字符串。因此,有必要檢查entity.attributes是否包含姓

Entity contact = pluginContext.InputParameters["Target"] as Entity; 
var lastName = contact.getAttribute<string>("lastname"); 
// -> lastName is an empty string 

var lastNameInInputParameters = contact.Contains("lastname"); 
// -> lastNameInInputParameters is false 

如果一個屬性是空的InputParameters這並不意味着該屬性具有空值,它只是意味着用戶沒有改變這字段在此更新

+0

我已經更新了我的答案,包括我爲什麼使用這種方法 – jasonscript

3

從實體獲取字段值的首選方法是使用GetAttributeValue<T>方法。

在動態CRM系統永遠不會返回nullstring.Empty值,因此檢查這些值在屬性本無濟於事了。剛纔看了這樣的價值觀:

string phoneNumber = ent.GetAttributeValue<string>("telephone2"); 

if (phoneNumber != null) 
{ 
    // do something... 
} 
+0

更多信息,我發現有null'和'empty''之間的差異。例如,如果你在聯繫人上有一個更新插件。如果使用'GetAttributeValue'讀取輸入參數,則不會知道該屬性是否爲空,或者該屬性的值是否爲空字符串。因此需要檢查'entity.attributes'是否包含此屬性 – jasonscript

+0

我已更新我的答案以包含更多信息 – jasonscript

+0

@jasonscript:這是正確的。存在於InputParameters集合中的目標實體不是通過查詢系統返回的,而是代表用戶的輸入。這裏可以通過將屬性的值設置爲null或空字符串將字符串設置爲null。同樣,可以將'EntityReference'屬性設置爲'null'或具有'Guid.Empty'值的'EntityReference'實例。 –