我在如何更新刚刚使用其他数据创建的记录方面遇到了严重问题。
案例:我有短信活动。在创建短信记录。插件会自动发送短信。第三方短信提供商负责发送并返回状态字符串。根据这些字符串,必须更新短信的状态。
以下是我的一些代码:
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory =
(IOrganizationServiceFactory)serviceProvider.GetService(
typeof(IOrganizationServiceFactory));
IOrganizationService service =
serviceFactory.CreateOrganizationService(context.UserId);
aContext orgContext = new aContext(service);
Entity sms = (Entity)context.InputParameters["Target"];
/// logic goes here
sms.StatusCode = new OptionSetValue(statuscode); //statuscode is integer
service.Update(sms);
}
每次执行插件时插件都出错了。有人可以帮助并解释我在这里做错了什么吗?
谢谢!
答案 0 :(得分:12)
由于您的插件是同步执行的,因此如果您使用 Pre-operation 执行阶段,则应该很容易更新您的实体。
在这种情况下,你可以这样做:
Entity sms = (Entity)context.InputParameters["Target"]
// additional code to retrieve status
if(sms.Attributes.Contains("statuscode"))
sms.Attributes["statuscode"] = new OptionSetValue(statuscode);
else
sms.Attributes.add("statuscode", new OptionSetValue(statuscode));
通过这种方式,您只需添加或更新属性字典中的一个键,它就会被保存,就像值直接来自表单一样。