У меня есть пользовательский плагин CRM, который зарегистрирован (через инструмент регистрации плагинов CRM) на мероприятии Create Job. «Создать» - это сообщение, а «задание» - основной объект.
После создания новой работы я хочу взять эту сущность и автоматически назначить ей номер проекта. Я всегда устанавливал «Стадию выполнения конвейера событий» как «Постоперацию». Я пробовал оба режима выполнения (асинхронный и синхронный).
Асинхронный всегда выдает мне ошибку по линии "Entity job with ID '' does not exist"
Синхронный никогда не выдает ошибку, но ни один код в моем инструменте не выполняется.
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 к нему.