Dynamics CRM 2016在创建阶段20插件时不允许更改状态属性
本文关键字:不允许 属性 状态 插件 2016 CRM 创建 Dynamics | 更新日期: 2023-09-27 18:24:06
我使用的是Dynamics CRM 2016沙盒组织。在操作前事件管道中设置状态代码和状态代码值时出现此错误。"在创建阶段20插件时不允许更改状态属性。"
由于一些业务需求,我无法更新我的插件以进行后期操作。它在CRM 20152013中运行良好。
要设置预创建事件的状态和状态,可以使用下面的代码。我已经在CRM 2015的SalesOrder实体上测试了这一点,预验证阶段。当创建新订单时,它将销售订单状态直接设置为挂起。
您必须确保设置了状态值和状态值的正确组合。
Int32 statusVal = 2;
Int32 stateVal = 0;
if (((Entity)context.InputParameters["Target"]).Contains("statuscode"))
{
((Entity)context.InputParameters["Target"])["statuscode"] = new OptionSetValue(statusVal);
}
else {
((Entity)context.InputParameters["Target"]).Attributes.Add("statuscode", new OptionSetValue(statusVal));
}
if (((Entity)context.InputParameters["Target"]).Contains("statecode"))
{
((Entity)context.InputParameters["Target"])["statecode"] = new OptionSetValue(stateVal);
}
else
{
((Entity)context.InputParameters["Target"]).Attributes.Add("statecode", new OptionSetValue(stateVal));
}
如果您想使用具有实体id的创建后事件,可以尝试使用SetStateRequest。
请确保状态值和状态值的组合有效。
public static void SetStatusOfObject(IOrganizationService service, string entityName, Guid entityId, int state, int status)
{
SetStateRequest updateStatus = new SetStateRequest();
updateStatus.EntityMoniker = new EntityReference(entityName, entityId);
updateStatus.State = new OptionSetValue(state);
updateStatus.Status = new OptionSetValue(status);
service.Execute(updateStatus);
}