我有一个插件,根据两个选项字段的值触发在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);
}
如果您有任何解决方案,请与我分享 最好的问候
答案 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_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
是双选项字段,则上述代码应该可以正常工作,并且在更新时,您要么正在检索它,要么将其传递到实体后图像中。
答案 1 :(得分:-3)
我不确定,但尝试使用.equals()方法而不是相等运算符。
所以:
if (str.equals("Yes")) {
// DO ANYTHING
}
但是,您仍然应该使用等于运算符==
作为整数。