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

时间:2016-08-16 09:28:34

标签: c# dynamics-crm-2011 dynamics-crm

我有一个插件,根据两个选项字段的值触发在Update上运行。如果值为“是”,则插件将运行。

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

我不认为QueryExpression不适合我的情况.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);
        }

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

2 个答案:

答案 0 :(得分:1)

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

取自Above Url:

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

现在出现你的代码/逻辑问题。 在CRM中,你应该正确创建Two-Option,我的意思是

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

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

如果您设置了文字=&#39;是&#39; new_createticket的值和值为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是双选项字段,则上述代码应该可以正常工作,并且在更新时,您要么正在检索它,要么将其传递到实体后图像中。

答案 1 :(得分:-3)

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

所以:

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

但是,您仍然应该使用等于运算符==作为整数。