由于安全角色导致的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
问题
我应该进行哪些代码更改,以便即使出现错误对于上述错误,ErrorDetails.txt捕获错误
Principal user (Id=e9e3a98d-a93e-e411-80bc-000c2908bc67, type=8) is missing prvAssignnew_documentsaccess privilege (Id=7ecaf3da-77c8-4ee3-9b29-e5a4455cd952)
?为什么它还没有发生?
首先:回答您的问题:
跟踪日志仅包含在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记录具有分配权限?