检查CRM 2011自定义工作流活动中的空值

时间:2013-09-25 18:21:45

标签: dynamics-crm-2011 crm

我正在尝试使用来自调用实体的某些属性在CRM 2011自定义工作流活动中执行某些逻辑。我在确定特定属性是否为空时遇到问题。我已经尝试过看似GetAttributeValue和Attributes集合的所有组合,但是当属性I的值为null时,我似乎总是得到一个Specified Cast无效或对象引用未设置为Object的实例错误#39;我试图访问。有没有人知道访问可能为null的属性的正确方法?在此示例中,我正在使用Guid / Entity Reference类型的属性。

2 个答案:

答案 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;
  }