【发布时间】:2019-05-13 20:59:38
【问题描述】:
我有一个 CRM 自定义插件(通过 CRM 插件注册工具)在 Create Job 事件中注册。 “创建”是消息,“工作”是主要实体。
在创建新工作时,我想获取该实体并自动为其分配一个项目编号。我总是将“事件管道执行阶段”设置为操作后。我尝试了两种执行模式(异步和同步)。
异步总是按照"Entity job with ID '' does not exist" 的方式向我抛出错误
Synchronous 永远不会引发错误,但我的工具中没有任何代码正在执行。
public void Execute(IServiceProvider serviceProvider)
{
var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var orgService = factory.CreateOrganizationService(null);
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
Entity ent = (Entity)context.InputParameters["Target"];
IOrganizationService service = factory.CreateOrganizationService(null);
if (ent.LogicalName == "cmc_job")
{
try
{
ent["cmc_jobnumber"] = "0000001";
ent["cmc_name"] += " - DEMO";
service.Update(ent);
}
catch (Exception e)
{
Console.Write(e.Message);
}
}
我也尝试过service.Create(entity),但我也倾向于遇到错误。这些错误通常与重复记录有关。此外,我已确保停用与创建工作相关的任何现有流程。
如何在创建实体后立即正确更新实体字段?哪种做法最好?
旁注:我决定使用 CRM 自定义插件而不是自定义流程的原因是因为我需要查询出最大的现有项目编号,然后将其加 1。
【问题讨论】:
标签: c# dynamics-crm dynamics-crm-2016