如何使用 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_createticket
字段,如果改了,不改就不会出现了。在这里你可以这样做
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;
}
如果您验证 new_createticket
是一个双选项字段,上面的代码应该可以正常工作,并且在更新时您要么检索它,要么在 Post 中传递它-实体图片.
我有一个插件根据两个选项字段的值在更新时触发 运行。如果值为 "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_createticket
字段,如果改了,不改就不会出现了。在这里你可以这样做
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;
}
如果您验证 new_createticket
是一个双选项字段,上面的代码应该可以正常工作,并且在更新时您要么检索它,要么在 Post 中传递它-实体图片.