解决初始同步过程中的问题

本文提供财务和运营应用与 Dataverse 之间的双写入集成的疑难解答信息。 具体来说,提供可以帮助您解决初始同步期间可能发生的问题的信息。

重要

本文解决的某些问题可能需要系统管理员角色或 Microsoft Azure Active Directory (Azure AD) 租户管理员凭据。 介绍每个问题的每一节说明了是否需要特定角色或凭据。

在财务和运营应用中检查初始同步错误

启用映射模板后,映射的状态应为正在运行。 如果状态为未运行,在初始同步期间将发生错误。 要查看错误,请选择双写入页面上的初始同步详细信息选项卡。

初始同步详细信息选项卡上的错误。

您无法完成初始同步:400 错误请求

解决此问题所需的角色:系统管理员

当您尝试运行映射和初始同步时,您可能会收到以下错误消息:

([错误请求],远程服务器返回错误:(400) 错误请求。),AX 导出遇到错误。

以下是完整错误消息的示例。

Dual write Initial Sync completed with status: Error. Following are the details:
Executed leg: From AX Financial dimensions to CRM msdyn_dimensionattributes
with exported records count: 0, ImportRecordsErrorCount: 0,
ImportRecordsInsertedCount: 0 and ImportRecordsUpdatedCount: 0
ErrorsDetails:
Dual write Initial sync failed
Message: ([Bad Request], The remote server returned an error: (400) Bad Request.), AX export encountered an error
Stacktrace: at
Microsoft.Dynamics.Integrator.QueryGenerator.AxClient.\<ExportAxPackage\>d__16.MoveNext()
in X:\\bt\\1024532\\repo\\src\\Core\\QueryGenerator\\AxClient.cs:line 265
\--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.D365.ServicePlatform.Context.ServiceContext.Activity.\<ExecuteAsync\>d__11\`2.MoveNext()
\--- End of stack trace from previous location where exception was thrown ---

如果此错误持续发生,您无法完成初始同步,请按照以下步骤解决问题。

  1. 登录到财务和运营应用的虚拟机 (VM)。
  2. 打开微软管理终端程序。
  3. 服务窗格中,请确保 Microsoft Dynamics 365 数据导入导出框架服务正在运行。 如果已停止,请重新启动,因为初始同步需要它。

初始同步错误:403 已禁止

在初始同步期间,您可能会收到以下错误消息:

([已禁止],远程服务器返回错误:(403) 已禁止。),AX 导出遇到错误

若要解决此问题,请按照以下步骤操作。

  1. 登录财务和运营应用。
  2. Azure Active Directory 应用程序页面上,删除 DtAppID 客户端,然后再次添加。

Azure AD 应用程序列表中的 DtAppID 客户端。

初始同步期间自引用或循环引用失败

如果您的任何映射都有自引用或循环引用,您可能会收到错误消息。 错误分为以下几类:

解决供应商 V2–to–msdyn_vendors 表映射中的错误

如果表具有在 PrimaryContactPersonIdInvoiceVendorAccountNumber 列中存在值的现有行,在将供应商 V2 映射到 msdyn_vendors 时,您可能会遇到初始同步错误。 发生这些错误是因为 InvoiceVendorAccountNumber 在供应商映射中是一个自引用列,PrimaryContactPersonId 是一个循环引用。

您收到的错误消息将为以下形式。

无法解析字段的 GUID:<字段>。 未找到查找值:<值>。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/<entity>?$select=<field>&$filter=<field> eq <value>

下面举了一些示例加以说明:

  • 无法解析字段的 GUID:msdyn_vendorprimarycontactperson.msdyn_contactpersonid。 未找到查找值:000056。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/contacts?$select=msdyn_contactpersonid.contactid&$filter=msdyn_contactpersonid eq '000056'
  • 无法解析字段的 GUID:msdyn_invoicevendoraccountnumber.msdyn_vendoraccountnumber。 未找到查找值:V24-1。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/msdn_vendors?$select=msdyn_vendoraccountnumber,msdyn_vendorid&$filter=msdyn_vendoraccountnumber eq 'V24-1'

如果供应商表中的任何行在 PrimaryContactPersonIdInvoiceVendorAccountNumber 列中都具有值,请按照以下步骤完成初始同步。

  1. 在财务和运营应用中,从映射中删除 PrimaryContactPersonIdInvoiceVendorAccountNumber 列,然后保存映射。

    1. 供应商 V2 (msdynvendors) 的双写入映射页面上,在表映射选项卡上,在左侧的筛选器中,选择财务和运营应用.供应商 V2。 在右侧的筛选器中,选择 Sales.Vendor

    2. 搜索 primarycontactperson 查找 PrimaryContactPersonId 源列。

    3. 选择操作,然后选择删除

      删除 PrimaryContactPersonId 列。

    4. 重复这些步骤删除 InvoiceVendorAccountNumber 列。

      删除 InvoiceVendorAccountNumber 列。

    5. 将更改保存到映射。

  2. 关闭供应商 V2 表的更改跟踪。

    1. 数据管理工作区中,选择数据表磁贴。

    2. 选择供应商 V2 表。

    3. 在操作窗格上,选择选项,然后选择更改跟踪

      选择更改跟踪选项。

    4. 选择禁用更改跟踪

      选择“禁用更改跟踪”。

  3. 运行供应商 V2 (msdyn_vendors) 映射的初始同步。 初始同步应会成功运行,没有任何错误。

  4. 运行 CDS 联系人 V2 (contacts) 映射的初始同步。 如果要同步供应商表上的主要联系人列,则必须同步此映射,因为还必须对联系人行进行初始同步。

  5. PrimaryContactPersonIdInvoiceVendorAccountNumber 列重新添加到供应商 V2 (msdyn_vendors) 映射,然后保存映射。

  6. 再次运行供应商 V2 (msdyn_vendors) 映射的初始同步。 由于更改跟踪已关闭,所有行都将同步。

  7. 重新打开供应商 V2 表的更改跟踪。

解决客户 V3–to–Accounts 表映射中的错误

如果表具有在 ContactPersonIDInvoiceAccount 列中存在值的现有行,在将客户 V3 映射到客户时,您可能会遇到初始同步错误。 发生这些错误是因为 InvoiceAccount 在供应商映射中是一个自引用列,ContactPersonID 是一个循环引用。

您收到的错误消息将为以下形式。

无法解析字段的 GUID:<字段>。 未找到查找值:<值>。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/<entity>?$select=<field>&$filter=<field> eq <value>

下面举了一些示例加以说明:

  • 无法解析字段的 GUID:primarycontactid.msdyn_contactpersonid。 未找到查找值:000056。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/contacts?$select=msdyn_contactpersonid.contactid&$filter=msdyn_contactpersonid eq '000056'
  • 无法解析字段的 GUID:msdyn_billingaccount.accountnumber。 未找到查找值:1206-1。 请尝试使用此 URL 检查引用数据是否存在:https://focdsdevtest2.crm.dynamics.com/api/data/v9.0/accounts?$select=accountnumber.account&$filter=accountnumber eq '1206-1'

如果客户表中的任何行在 ContactPersonIDInvoiceAccount 列中都具有值,请按照以下步骤完成初始同步。 您可以对任何现成的表(如客户联系人)使用此方法。

  1. 在财务和运营应用中,从客户 V3 (accounts) 映射中删除 ContactPersonIDInvoiceAccount 列,然后保存映射。

    1. 客户 V3 (accounts) 的双写入映射页面,在表映射选项卡上,在左侧的筛选器中,选择财务和运营应用.客户 V3。 在右侧的筛选器中,选择 Dataverse.Account

    2. 搜索 contactperson 查找 ContactPersonID 源列。

    3. 选择操作,然后选择删除

      删除 ContactPersonID 列。

    4. 重复这些步骤删除 InvoiceAccount 列。

      删除 InvoiceAccount 列。

    5. 将更改保存到映射。

  2. 关闭客户 V3 表的更改跟踪。

    1. 数据管理工作区中,选择数据表磁贴。

    2. 选择客户 V3 表。

    3. 在操作窗格上,选择选项,然后选择更改跟踪

      选择更改跟踪选项。

    4. 选择禁用更改跟踪

      选择“禁用更改跟踪”。

  3. 运行客户 V3 (Accounts) 映射的初始同步。 初始同步应会成功运行,没有任何错误。

  4. 运行 CDS 联系人 V2 (contacts) 映射的初始同步。

    注释

    有两个名称相同的映射。 请确保在详细信息选项卡上选择具有以下描述的映射:FO.CDS 供应商联系人 V2 与 CDS.Contacts 之间同步的双写入模板。需要新包 [Dynamics365SupplyChainExtended]。

  5. InvoiceAccountContactPersonId 列重新添加到客户 V3 (Accounts) 映射,然后保存映射。 InvoiceAccount 列和 ContactPersonId 列现在又成为了实时同步模式的一部分。 在下一步中,您将执行这些列的初始同步。

  6. 再次运行客户 V3 (Accounts) 映射的初始同步。 由于更改跟踪已关闭,财务和运营应用中 InvoiceAccountContactPersonId 的数据将同步到 Dataverse。

  7. 要将 InvoiceAccountContactPersonId 的数据从 Dataverse 同步到财务和运营应用,必须使用数据集成项目。

    1. 在 Power Apps 中,在 Sales.Account财务和运营应用.客户 V3 表之间创建数据集成项目。 数据方向必须是从 Dataverse 到财务和运营应用。 因为 InvoiceAccount 是使用双写入的新属性,您可能需要跳过此属性的初始同步。 有关详细信息,请参阅将数据集成到 Dataverse

      下图显示了一个更新 CustomerAccountContactPersonId 的项目。

      更新 CustomerAccount 和 ContactPersonId 的数据集成项目。

    2. 将公司条件添加到 Dataverse 一端的筛选器中,以仅让与筛选条件匹配的行在财务和运营应用中更新。 要添加筛选器,请选择筛选器按钮。 然后,在编辑查询对话框中,您可以添加筛选器查询,如 _msdyn_company_value eq '<guid>'

      [注意]如果筛选器按钮未出现,请创建支持票证,让数据集成团队在您的租户上启用筛选器功能。

      如果您没有为 _msdyn_company_value 输入筛选器查询,那么所有行都将同步。

      添加筛选器查询。

    行的初始同步现已完成。

  8. 在财务和运营应用中,为客户 V3 表重新打开更改跟踪。

具有 10 个以上查找字段的映射的初始同步失败

当您尝试对客户 V3 - 帐户销售订单映射或包含 10 个以上查找字段的任何映射运行初始同步失败时,您可能会收到以下错误消息:

CRMExport:包执行完成。 错误说明 5:尝试从 https://xxxxx//datasets/yyyyy/tables/accounts/items?$select=accountnumber, address2_city, address2_country, ... (msdyn_company/cdm_companyid eq 'id')&$orderby=accountnumber asc 获取数据失败。

由于查询具有查找限制,因此当实体映射包含 10 多个查找时,初始同步失败。 有关详细信息,请参阅使用查询检索相关表记录

若要解决此问题,请按照以下步骤操作:

  1. 从双重写入实体映射中删除可选查找字段,以使查找数目为 10 个或更少。
  2. 保存映射并执行初始同步。
  3. 当第一步的初始同步成功时,添加剩余的查找字段并删除您在第一步中同步的查找字段。 请确保查找字段数为 10 个或更少。 保存映射并运行初始同步。
  4. 重复这些步骤,直到同步了所有查找字段为止。
  5. 将所有查找字段添加回映射,保存映射,然后使用跳过初始同步运行映射。

此流程启用实时同步模式的映射。

当事方邮寄地址和当事方电子地址初始同步期间的已知问题

尝试运行当事方邮寄地址和当事方电子地址的初始同步时,您可能会收到以下错误消息:

在 Dataverse 中找不到当事方编号。

对财务和运营应用中的 DirPartyCDSEntity 设置了一个范围,用于筛选人员组织类型的当事方。 因此,CDS 当事方 - msdyn_parties 映射的初始同步将不会同步其他类型的当事方,包括法人运营单位。 针对 CDS 当事方邮寄地址 (msdyn_partypostaladdresses)当事方联系人 V3 (msdyn_partyelectronicaddresses) 运行初始同步时,您可能会收到错误。

我们正在努力修复以删除财务和运营实体上的当事方类型范围,以便所有类型的当事方都可以成功同步 Dataverse。

运行客户或联系人数据初始同步时是否存在任何性能问题?

如果您已运行客户数据初始同步并且在一直运行客户映射,然后运行联系人数据初始同步,则插入和更新联系人地址的 LogisticsPostalAddressLogisticsElectronicAddress 表期间可能会出现性能问题。 针对 CustCustomerV3EntityVendVendorV2Entity 跟踪了相同的全球邮政地址和电子地址表,并且双重写入会尝试生成更多查询以将数据写入另一端。 如果您已运行客户初始同步,则在运行联系人数据初始同步时停止相应的映射。 对供应商数据执行相同操作。 完成初始同步后,您可以跳过初始同步来运行所有映射。

无法同步具有零值的浮点数据类型

对于价格字段(例如固定付款金额或以交易币种表示的金额)值为零的记录,初始同步可能失败。 在此情况下,您将收到类似于以下示例的错误消息:

验证输入参数时出错:Microsoft.OData.ODataException:无法将文字 '000000' 转换为预期类型 'Edm.Decimal'...

此问题与数据管理模块中的源数据格式下的语言区域设置值有关。 将语言区域设置字段的值更改为 en-us,然后重试。