Id =“xxxxxx”的错误帐户不存在

时间:2018-05-30 16:12:27

标签: c# dynamics-crm dynamics-crm-online dynamics-crm-365

我有一个创建帐户和机会的客户工作流程。

有时我会遇到此错误:ID =“xxxxxx”的帐户不存在。

我不知道在我的代码中知道我在CRM中找到帐户有什么问题 以下是我的插件代码的步骤:

  1. 按num查找帐户(如果它不存在,我创建它们)
  2. 获取帐户=帐户
  3. 使用商机创建机会[“parentaccountid”] =帐户;
  4. 错误讯息!
  5. 代码:

    //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 :(得分:1)

您还没有向我们展示整个插件,所以这只是一个猜测,但您可能在类级别共享您的IOrganizationService,这会导致代码中的竞争条件,并且一个线程创建在不同的上下文中的新帐户,然后其服务被另一个线程覆盖,该线程处于不同的数据库事务中,该事务没有新创建的帐户并且它出错。

不要跨线程分享您的IOrganziationService!

答案 1 :(得分:0)

每当您尝试在同一事务中使用创建的记录时,请将插件转换为异步模式-这将起作用。