动态CRM SDK Context.SaveChanges权限错误

时间:2016-06-03 14:51:35

标签: c# sdk dynamics-crm-online

我查看了很多MS Dyanmics CRM博客和SO问题,并尝试了所有解决方案,但他们没有奏效。

我面临的问题如下:我正在尝试使用公司名称和公司类型遍历excel文件。然后,我找到CRM中具有匹配名称的公司,并根据excel中的公司类型设置某些自定义字段的值。当我这样做虽然代码为一家公司,它工作正常但是当我尝试为大量公司运行循环我不断得到:

  

SecLib :: CrmCheckPrivilege失败。在UserId上返回hr = -2147220943:xxxxxx和PrivilegeType:Read。

有问题的用户拥有所有权限,并且是具有读/写CAL的管理员用户。也像我指出的那样我可以为单个记录进行更新。但是当作为循环运行时,同一记录会抛出错误。

我一直无法找到解决方案,所以任何帮助都会非常感激。我在线使用MS Dynamics CRM。

这是我的代码:

while (!parser.EndOfData)
{
    counter++;

    if (counter >= 20) 
    {
        try
        {
            counter = 0;
            context.SaveChanges();
        }
        catch (Exception exc) 
        {
            while (exc != null)
            {
                System.Diagnostics.Debug.WriteLine("ERROR: " + exc.Message);
                exc = exc.InnerException;
            }
            continue;
        }
    }

    //Processing row
    string[] fields = parser.ReadFields();

    foreach (string field in fields)
    {
        //TODO: Process field
        company.Add(fields[0]);
        category.Add(fields[1]);

        var currAccs = context.CreateQuery<Account>().Where(x => x.Name.Contains(fields[0])).ToList();
        if (currAccs != null)
        {
            foreach (var currAcc in currAccs)
            {
                System.Diagnostics.Debug.WriteLine("Processing: " + currAcc.Name);
                currAcc.cir_MediaOwner = false;
                currAcc.cir_Agency = false;
                currAcc.cir_AdvertiserBrand = false;

                if (fields[1].Contains("MO"))
                {
                    currAcc.cir_MediaOwner = true;
                }

                if (fields[1].Contains("A"))
                {
                    currAcc.cir_Agency = true;
                }

                if (fields[1].Contains("B"))
                {
                    currAcc.cir_AdvertiserBrand = true;
                }

                try
                {
                    context.UpdateObject(currAcc);
                }
                catch (Exception exc)
                {
                    while (exc != null)
                    {
                        System.Diagnostics.Debug.WriteLine("ERROR: " + exc.Message);
                        exc = exc.InnerException;
                    }
                    continue;
                }
            }
        }

        break;
    }
}

1 个答案:

答案 0 :(得分:0)

您可能有一个与帐户和创建/更新消息相关的工作流程或插件步骤,并由没有适当权限的用户模仿

对于工作流程,这些选项可以选择“执行身份:工作流程的所有者”(link

对于插件步骤,这些步骤具有选项“在用户上下文中运行”,可以将其设置为修复用户(link

希望有帮助

Acosta.D