Аккаунт с ошибкой с идентификатором = "xxxxxx" не существует - PullRequest
0 голосов
/ 30 мая 2018

У меня есть рабочий процесс Custo, который создает учетную запись и возможности.

Иногда у меня возникает такая ошибка: Учетная запись с Id = "xxxxxx" не существует.

Я не знаю, чтонеправильно в моем коде, зная, что я нахожу учетную запись в CRM.
Вот шаги моего кода плагина:

  1. Найдите учетную запись по num (если она не существует, я создаюих)
  2. Получить учетную запись = Учетная запись
  3. Создать возможность с Opportunity ["parentaccountid"] = Учетная запись;
  4. Сообщение об ошибке!

Код:

//Get opportunity
Guid id = retrieveOpportunity<string>("opportunity", "new_numero", numero, service);
Entity eOpportunity;
if (id != Guid.Empty)
{
    eOpportunity = new Entity("opportunity", id);
}
else
{
    eOpportunity = new Entity("opportunity");
}

//Get account
EntityReference eAccount = retrieveAccount<string>(accountCode, "account", "new_code", service);
if (eAccount == null)
{
    eAccount = new Entity("account", "new_code", accountCode);
    eAccount["name"] = "name";
    UpsertRequest usMessage = new UpsertRequest()
    {
        Target = eAccount
    };
    //create account
    UpsertResponse usResponse = (UpsertResponse)this._service.Execute(usMessage);
    eOpportunity["parentaccountid"] = usResponse.Target;
}
else
{
    eOpportunity["parentaccountid"] = eAccount;
}

UpsertRequest req = new UpsertRequest()
{
    Target = eOpportunity
}; 
//upsert opportunity
UpsertResponse resp = (UpsertResponse)service.Execute(req);

if (resp.RecordCreated)
    tracer.Trace("New opportunity");
else
    tracer.Trace("Opportunity updated");

Иногда существует несколько рабочих процессов, которые запускаются одновременно и выполняют одно и то же (создавая другие возможности)

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Всякий раз, когда вы пытаетесь использовать созданную запись в той же транзакции, конвертируйте плагин в асинхронный режим - это будет работать.

0 голосов
/ 01 июня 2018

Вы не показали нам весь плагин, так что это всего лишь предположение, но вы, вероятно, делитесь своим IOrganizationService на уровне класса, что вызывает условия гонки в вашем коде, и один поток создает новую учетную запись вдругой контекст, затем его служба перезаписывается другим потоком, который находится в другой транзакции базы данных, у которой нет вновь созданной учетной записи, и он выдает ошибку.

Не разделяйте службу IOrganziationService между потоками!

...