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;
现在是棘手的部分,上面的实体可能包含新的eateticket
字段,如果已更改,但如果未更改,则不会出现。在这里你可以这样做
Entity updatedEntity = _service.Retrieve(entity.LogicalName,entity.Id,new ColumnSet("new_createticket","title"))
if (updatedEntity.GetAttributeValue<bool>("new_createticket") == 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价值(“新的”eateticket“==真)
{
实体票证=新实体(“新问题票证”);
票证[“新主题”]=updatedEntity.GetAttributeValue(“标题”);
Guid TICKTID=服务。创建(票证);
updatedEntity[“new_troubleticketid”]=新实体引用(“new_troubleticket”,ticketid);
updatedEntity[“new_createticket”]=false;
}
如果您确认new\u createticket
是一个双选项字段,并且在更新时您正在检索该字段或将其传递到Post实体图像中,则上述代码应该可以正常工作。u不能将其用于布尔类型。为了做到这一点,您必须使用这个实体.GetAttributeValue(“new_createticket”)==true
。但是它仍然不起作用。ifentity.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_createticket","title"))
if (updatedEntity.GetAttributeValue<bool>("new_createticket") == 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;
}