0

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

4

2 回答 2

0

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

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

CRM 从不返回不可为空的值。即使您认为为 null 的事物(bool、DateTime、int 等)也会作为它们的可为 null 等效项返回。如果值不为空,则不可为空的强制转换仍然会成功,但如果值为空,它会给你一个空引用错误;

object a = new bool?(true);
bool value = ((bool)a); // Works 
object b = new bool?();
bool value = ((bool)b); // Null Ref Error
于 2013-09-25T18:34:12.107 回答
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;
  }
于 2013-09-27T18:38:36.343 回答