我查看了很多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;
}
}