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

C# 如何使用C检查Dynamics CRM中的两个选项集值#,c#,dynamics-crm-2011,dynamics-crm,C#,Dynamics Crm 2011,Dynamics Crm,我有一个插件,根据两个选项字段的值触发运行更新。如果值为“是”,则插件将运行 我尝试使用entity.FormattedValues[“fieldname”].toString()从Two Optionset字段获取文本值。但是没有起作用 我不认为QueryExpression不适合我的情况 这是我的全部代码: if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] i

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

我尝试使用
entity.FormattedValues[“fieldname”].toString()
从Two Optionset字段获取文本值。但是没有起作用

我不认为QueryExpression不适合我的情况

这是我的全部代码:

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);
        }
if(context.InputParameters.Contains(“目标”)&&context.InputParameters[“目标”]是实体)
{
实体实体=上下文。输入参数[“目标”]作为实体;
if(entity.LogicalName!=“事件”)
回来
string str=entity.FormattedValues[“new_createticket”].ToString();
如果(str==“是”)
{
实体票证=新实体(“新问题票证”);
票证[“新主题”]=entity.GetAttributeValue(“标题”);
Guid TICKTID=服务。创建(票证);
实体[“new_troubleticketid”]=新实体参考(“new_troubleticket”,ticketid);
实体[“new_createticket”]=false;
}
服务更新(实体);
}
如果您有任何解决方案,请与我分享
致以最诚挚的问候

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

因此:


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

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

试一试


您应该在操作后的
更新
上注册
插件。在插件上下文中,
目标实体
您将只获得更新的字段。要获取自定义业务逻辑所需的其他字段,您有两个选项

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

取自上述Url:

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

现在来谈谈您的代码/逻辑问题。 在CRM中,您应该正确地创建了
Two选项
,我的意思是

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

1. Label=No and Value=0
2. Label= Yes and Values=1
如果您已为
new\u createticket
设置了Text='Yes'和value=1,则将代码更改为该值

 //string str = entity.FormattedValues["new_createticket"].ToString();
 Entity entity = context.InputParameters["Target"] as Entity;
现在是棘手的部分,上面的
实体
可能包含
新的‌​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;
  }
Entity updatedEntity=\u service.Retrieve(Entity.LogicalName、Entity.Id、new ColumnSet(“new\u”)‌​ea‌​(标题)
if(updatedEntity.GetAttribute‌​‌​价值(“新的”‌​ea‌​teticket“==真)
{
实体票证=新实体(“新问题票证”);
票证[“新主题”]=updatedEntity.GetAttributeValue(“标题”);
Guid TICKTID=服务。创建(票证);
updatedEntity[“new_troubleticketid”]=新实体引用(“new_troubleticket”,ticketid);
updatedEntity[“new_createticket”]=false;
}

如果您确认
new\u createticket
是一个双选项字段,并且在更新时您正在检索该字段或将其传递到Post实体图像中,则上述代码应该可以正常工作。

u不能将其用于布尔类型。为了做到这一点,您必须使用这个
实体.GetAttributeValue(“new_createticket”)==true
。但是它仍然不起作用。if
entity.GetAttribute‌​价值(“新的”‌​teticket“==true
不起作用意味着字段不是双选项,或者实体中存储的值为null或false。@FikriHailal,我已经做了很久了。。。。它确实可以工作,假设您的字段是一个双选项字段,当然,正如Guido所说,如果您正在执行更新消息,您确定要在实体映像中发送属性吗?如果不是,那么您将收到的值为空。谢谢,您的答案是我的解决方案。你也给了我一个关于CRM插件的新知识。特别是关于检索。
 //string str = entity.FormattedValues["new_createticket"].ToString();
 Entity entity = context.InputParameters["Target"] as Entity;
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;
  }