由于安全角色导致的CRM 2013异常处理

本文关键字:CRM 2013 异常处理 角色 于安全 安全 | 更新日期: 2023-09-27 18:24:15

我有一个插件,它在更新Incident实体时启动。它在另一个表中创建一个新记录(new_documentaccess)。此new_documentaccess记录需要具有与偶发事件实体相同的所有者。

现在,我明白了,我不能像实体上的任何其他字段一样,通过简单的赋值来设置所有者字段。

所以,我写了以下内容。

public void CreateDocumentAccess(Incident incident)
{
    new_documentsaccess documentAccess = new new_documentsaccess();
    documentAccess.new_CaseId = incident.ToEntityReference();
    documentAccess.new_name = incident.OwnerId.Name;
    Guid recordId = crmService.Create(documentAccess);
    var request = new AssignRequest{
            Assignee = new EntityReference(SystemUser.EntityLogicalName, incident.OwnerId.Id),
            Target = new EntityReference(new_documentsaccess.EntityLogicalName, recordId)};
    crmService.Execute(request);
}

然而,当我使用进行调试时,在执行过程中出现了以下错误

抛出异常时中断:为公共语言运行时异常启用。

在线上抛出

    var request = new AssignRequest{
            Assignee = new EntityReference(SystemUser.EntityLogicalName, incident.OwnerId.Id),
            Target = new EntityReference(new_documentsaccess.EntityLogicalName, recordId)};

主要用户(Id=e9e3a98d-a93e-e411-80bc-000c2908bc67,类型=8)为缺少prvAssignnew_documentsacess权限(Id=7ecaf3da-77c8-ee3-9b29-e5a455cd952)"}

我的插件代码如下

try
{
    CreateDocumentAccess(Incident incident);
}
catch (FaultException<OrganizationServiceFault> ex)
{
throw new InvalidPluginExecutionException("An error occurred while creating the document access.", ex);
}
catch (Exception ex)
{
  TracingService.Trace("ExecutePreIncidentUpdate: {0}", ex.ToString());
  throw;
}

如果我只是使用前端以用户身份运行它,我会得到以下错误。

正在退出插件PreIncidentUpdate.Execute(),相关Id:4e7e4c3c-3cef-46ab-8d08-a6d0dbca34c7,发起用户:be179876-9b39-e411-80bb-000c2908bc67

问题

  1. 我应该进行哪些代码更改,以便即使出现错误对于上述错误,ErrorDetails.txt捕获错误Principal user (Id=e9e3a98d-a93e-e411-80bc-000c2908bc67, type=8) is missing prvAssignnew_documentsaccess privilege (Id=7ecaf3da-77c8-4ee3-9b29-e5a4455cd952)

  2. 为什么它还没有发生?

由于安全角色导致的CRM 2013异常处理

首先:回答您的问题:
跟踪日志仅包含在InvalidPluginExecutionException中。您的第二个捕获正在被使用,并且正在抛出捕获的异常,而不是"InvalidPluginExecutionException"

更改此项:

catch (Exception ex)
{
  TracingService.Trace("ExecutePreIncidentUpdate: {0}", ex.ToString());
  throw;
}

对于这样的事情,应该将跟踪日志拉到ErrorDetails附件中。

catch (Exception ex)
{
  TracingService.Trace("ExecutePreIncidentUpdate: {0}", ex.ToString());
  throw new InvalidPluginExecutionException("An error has occurred");
}

其次:原因
您收到的错误表明用户没有分配新文档访问记录的权限。

当你注册一个插件并添加一个新步骤时;您可以选择在哪个用户的上下文中运行它。默认情况下,此选项设置为"呼叫用户"。

您能否确认调用用户所处的安全角色对new_documentaccess记录具有分配权限?