我正在尝试使用来自调用实体的某些属性在CRM 2011自定义工作流活动中执行某些逻辑。我在确定特定属性是否为空时遇到问题。我已经尝试过看似GetAttributeValue和Attributes集合的所有组合,但是当属性I的值为null时,我似乎总是得到一个Specified Cast无效或对象引用未设置为Object的实例错误#39;我试图访问。有没有人知道访问可能为null的属性的正确方法?在此示例中,我正在使用Guid / Entity Reference类型的属性。
答案 0 :(得分:0)
您始终可以检查属性集合是否包含您要查找的特定属性,但您甚至不必这样做。所有非可空类型(Guid,DateTime等)都作为可空类型存储在Attributes集合中,这可能是您的问题。尝试这样的事情(假设后期限制):
var isValid = entity.GetAttributeValue<bool?>("new_IsValid");
CRM永远不会返回不可为空的值。即使是你认为为null的东西(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
答案 1 :(得分: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;
}