2013-09-25 87 views
0

我正嘗試在CRM 2011自定義工作流程活動中執行某些邏輯,並使用來自調用實體的一些屬性。我在確定某個特定屬性是否爲null時遇到問題。我已經嘗試了GetAttributeValue和Attributes集合的所有組合,但似乎總是會在屬性I存在空值時,始終將指定的Cast轉換爲無效或對象引用未設置爲Object錯誤的實例正在嘗試訪問。有誰知道訪問可能爲空的屬性的正確方法嗎?在這個例子中,我正在處理Guid/Entity Reference類型的屬性。在CRM 2011自定義工作流程中檢查空值活動

回答

0

您可以隨時檢查屬性集合是否包含您正在查找的特定屬性,但您甚至不必這樣做。所有非空類型(Guid,DateTime等)都以可爲空的類型存儲在Attributes集合中,這可能是您的問題。嘗試是這樣的(假設後期綁定):

var isValid = entity.GetAttributeValue<bool?>("new_IsValid");

CRM永遠不會返回一個非空值。即使你認爲是空的(bool,DateTime,int等)也會返回它們的可空對應值。如果值不爲null,則不可爲空的轉換仍然會成功,但如果值爲null,則會給您一個空引用錯誤;

object a = new bool?(true); 
bool value = ((bool)a); // Works 
object b = new bool?(); 
bool value = ((bool)b); // Null Ref Error 
+0

這個工作對檢測空值,但與非空值,我得到一個特定的轉換無效錯誤。 – user1603734

+0

@ user1603734這是因爲它們是Nullable類型,而不是'bool','DateTime','int'等等,但是'bool?'(又名'Nullable '),'DateTime?'和'int?'。 – Daryl

+0

那麼我怎樣才能使它能夠處理null和非null值呢?這似乎是我不斷遇到的問題,檢測一個語法會導致另一個錯誤。 – user1603734

0

這句法結束了對我的工作:

//if current outside counsel not null, grab GUID value 
    if (thisCase.lgl_outsidecounselid != null) 
    { 
    currentOCGUID = thisCase.lgl_outsidecounselid.Id; 
    } 
//it's null, set Guid to Guid.empty 
    else 
    { 
    currentOCGUID = Guid.Empty; 
    } 
相關問題