CRM 2011:如何更新Create插件中的记录?

Thd*_*hdK 5 plugins crm dynamics-crm dynamics-crm-2011

我在如何更新刚刚使用其他数据创建的记录方面遇到了严重问题.

案例:我有短信活动.在创建短信记录.插件会自动发送短信.第三方短信提供商负责发送并返回状态字符串.根据这些字符串,必须更新sms的状态.

这是我的一些代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

每次执行插件时,插件中都出现错误.有人可以帮助并解释我在这里做错了什么吗?

谢谢!

Ren*_*ont 12

由于您的插件是同步执行的,因此如果您使用执行阶段,则应该很容易更新您的实体.

在这种情况下,您可以执行以下操作:

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));
Run Code Online (Sandbox Code Playgroud)

这样,您只需从Attributes dictionnary中添加或更新一个键,它就会被保存,好像该值直接来自表单.

  • 您不必使用任何Update方法.在预操作中,尚未在数据库中保存任何内容.但是在执行插件后,您可以在属性字典中找到的所有内容都会自动保存.因此,如果您只是在其中添加内容,它会将其视为任何其他属性,并以相同的方式保存它. (3认同)