为什么我会收到错误消息:“不允许修改‘SYSTEM’或‘INTEGRATION’用户”,当我添加一个可选的默认值时?

问题描述

我正在将一些数据库从 SSMS 迁移到 CRM Online。问题是,SSMS 数据库中有 systemuser,它们在 CRM Online 中被删除,或者更糟的是 systemuser 有一个新的 GUID。在这种情况下,我试图寻找相似之处。我发现,来自两个系统的系统用户在“内部电子邮件地址”字段中具有相同的值。所以我在我的 Dynamics CRM Destination 中使用了它。并为“可选认值”添加一个值。

InternalEmailAddress

然后这个错误代码出来了: CRM 服务调用返回错误:不允许修改“SYstem”或“INTEGRATION”用户

在另一个站点上,我可以使用全名,这是我使用“可选认值”所做的。

Fullname

这给了我这个错误代码: CRM 服务调用返回错误:systemuser With Id = 11111-111-AAAA-BBBB-123456789 不存在

CRM 服务调用返回错误:发生意外错误

当我没有在“可选认值”中写入任何内容时,我收到此错误消息:KingswaySoft.IntegrationToolkit.DynamicsCrm.LookupFailureException:“managerid”字段的文本查找失败,实体“systemuser”不包含记录'fullname' 字段的值为 ''(适用于 Microsoft Dynamics 365 的 SSIS 集成工具包,v11.1.0.7311 - DtsDebugHost,v15.0.2000.93)

有人知道问题和解决方案吗? 我将不胜感激。

解决方法

我的第一个错误是,我试图在“internalEmailAddress”中提供 GUID。为了解决这个问题,我做了一个 LEFT JOIN,在那里我得到了所有 Territory 和他们的 SystemUsers。 我的 SQL 查询:

SELECT Territory.*,ModifiedBy.InternalEMailAddress as M_EMail,CreatedBy.InternalEMailAddress as C_EMail,ManagerId.InternalEMailAddress as Manager_Email
FROM TerritoryBase as Territory
LEFT JOIN SystemUser as ModifiedBy
ON Territory.ManagerId = ModifiedBy.SystemUserId
LEFT JOIN SystemUser as CreatedBy
ON Territory.CreatedBy = CreatedBy.SystemUserId
LEFT JOIN SystemUser as ManagerId
ON Territory.ManagerId = ManagerId.SystemUserId

然后在 Destination 中,我分配了如下列:

Source             Destination
C_Email            CreatedBy
M_Email            ModifiedBy
Manager_Email      ManagerId

文本查找编辑器就像: InternalEmailAddress(E-Mail from SystemUser)

这解决了问题,但我仍然收到此错误: CRM 服务调用返回错误:不允许修改“SYSTEM”或“INTEGRATION”用户。

此错误代码的问题是,我在“ManagerId”字段中的区域中有多个 SystemUser,而在线 CRM 中不存在这些系统用户。并且由于我设置了“默认选项值”,因此所有缺少的 SystemUser 都分配给了 1 个 SystemUser。而在 CRM 中,您不能将 1 个 SystemUser 分配给更多 Territory 的 ManagerId 字段。因此,如果用户不存在,最终结果是不填写该字段。

但是如果您需要将 SystemUser 分配给 ManagerId 字段,那么您应该使用“派生列”手动分配 SystemUser。