如何使用 C# 在 Dynamics CRM 中检查两个选项集的值

How to Check Two Option Set Value in Dynamics CRM Using C#

我有一个插件根据两个选项字段的值在更新时触发 运行。如果值为 "Yes",则插件将 运行。

我尝试使用 entity.FormattedValues["fieldname"].toString() 从两个选项集字段中获取文本值。但是没用。

我认为 QueryExpression 不适合我的 case.CMIIW

这是我的完整代码:

if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
        {
            Entity entity = context.InputParameters["Target"] as Entity;

            if (entity.LogicalName != "incident")
                return;

            string str = entity.FormattedValues["new_createticket"].ToString();

            if (str == "Yes")
            {
                Entity ticket = new Entity("new_troubleticket");
                ticket["new_subject"] = entity.GetAttributeValue<String>("title");
                Guid ticketid = service.Create(ticket);

                entity["new_troubleticketid"] = new EntityReference("new_troubleticket", ticketid);
                entity["new_createticket"] = false;
            }

            service.Update(entity);
        }

如果您有任何解决方案,请与我分享 最好的问候

我不确定,但请尝试使用 .equals() 方法而不是相等运算符。

所以:

if (str.equals("Yes")) {
  // DO ANYTHING
}

但是,对于整数,您仍应使用相等运算符 ==

格式化值用于显示目的,但您需要的实际布尔值作为属性存在。

尝试

if(entity["fieldname"] == true)

您应该 Register 您的插件 Update,Post-Operation。在插件上下文中,Target Entity 你只会得到更新的字段。获取自定义业务逻辑所需的其他字段您有两个选择。

1.  Retrieve the Entity by Guid with all the required attributes
2.  Register a Post-Entity Image to get all the attributes.

https://msdn.microsoft.com/en-us/library/gg309673.aspx#bkmk_preandpost

摘自上文Url:

与通过 RetrieveRequest 或 RetrieveMultipleRequest 请求在插件代码中获取实体属性相比,注册 pre 或 post 图像以访问实体属性值可提高插件性能。

现在来解决您的 code/logic 问题。 在 CRM 中,您应该已经正确创建了 Two-Option,我的意思是

默认情况下,当我们创建数据类型Two Options的字段时,它有两个选项

1. Label=No and Value=0
2. Label= Yes and Values=1

如果您为 new_createticket 设置了文本 ='Yes' 和值 =1,则将您的代码更改为此

 //string str = entity.FormattedValues["new_createticket"].ToString();
 Entity entity = context.InputParameters["Target"] as Entity;

下面是比较棘手的部分,上面的entity可能包含new_cr‌​ea‌​teticket字段,如果改了,不改就不会出现了。在这里你可以这样做

Entity updatedEntity = _service.Retrieve(entity.LogicalName,entity.Id,new ColumnSet("new_cr‌​ea‌​teticket","title"))
if (updatedEntity.GetAttribute‌​‌​Value<bool>("new_cr‌​ea‌​teticket") == true)
  {
     Entity ticket = new Entity("new_troubleticket");
     ticket["new_subject"] = updatedEntity.GetAttributeValue<String>("title");
     Guid ticketid = service.Create(ticket);

updatedEntity["new_troubleticketid"] = new EntityReference("new_troubleticket", ticketid);
    updatedEntity["new_createticket"] = false;
  }

如果您验证 new_createticket 是一个双选项字段,上面的代码应该可以正常工作,并且在更新时您要么检索它,要么在 Post 中传递它-实体图片​​.