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

Dynamics crm 2011 正在检查CRM 2011自定义工作流活动中的空值,dynamics-crm-2011,crm,Dynamics Crm 2011,Crm,我试图在CRM 2011自定义工作流活动中使用调用实体的一些属性执行一些逻辑。我在确定特定属性是否为null时遇到了问题。我尝试了GetAttributeValue和Attributes集合的所有组合,但当我试图访问的属性的值为空时,似乎总是会得到指定的强制转换无效或对象引用未设置为对象错误的实例。有人知道访问可能为null的属性的正确方法吗?在本例中,我使用的是Guid/实体引用类型的属性。您可以随时检查属性集合是否包含要查找的特定属性,但您甚至不必这样做。所有不可为null的类型(Guid、

我试图在CRM 2011自定义工作流活动中使用调用实体的一些属性执行一些逻辑。我在确定特定属性是否为null时遇到了问题。我尝试了GetAttributeValue和Attributes集合的所有组合,但当我试图访问的属性的值为空时,似乎总是会得到指定的强制转换无效或对象引用未设置为对象错误的实例。有人知道访问可能为null的属性的正确方法吗?在本例中,我使用的是Guid/实体引用类型的属性。

您可以随时检查属性集合是否包含要查找的特定属性,但您甚至不必这样做。所有不可为null的类型(Guid、DateTime等)都作为可为null的类型存储在Attributes集合中,这可能是您的问题。尝试这样的方法(假设是晚绑定):

var isValid=entity.GetAttributeValue(“new_isValid”)

CRM从不返回不可为空的值。即使是您认为为null的东西(bool、DateTime、int等)也会作为其可为null的等价物返回。如果值不为null,则不可为null的强制转换仍将成功,但如果值为null,则会出现null引用错误

对象a=新布尔值?(真);
布尔值=((布尔)a);//作品
对象b=新布尔?();
bool值=((bool)b);//空引用错误

这种语法最终对我有效:

//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;
  }

这对检测空值有效,但对于非空值,我得到的指定强制转换无效。@user1603734这是因为它们是可空类型,而不是
bool
DateTime
int
,等等。但是
bool?
(也称为“可空”),“DateTime?”和“int?”。那么如何使其能够同时处理空值和非空值呢?这似乎是我一直遇到的问题,检测一个的语法会导致另一个出错。