本文提供财务和运营应用与 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 ---
如果此错误持续发生,您无法完成初始同步,请按照以下步骤解决问题。
- 登录到财务和运营应用的虚拟机 (VM)。
- 打开微软管理终端程序。
- 在服务窗格中,请确保 Microsoft Dynamics 365 数据导入导出框架服务正在运行。 如果已停止,请重新启动,因为初始同步需要它。
初始同步错误:403 已禁止
在初始同步期间,您可能会收到以下错误消息:
([已禁止],远程服务器返回错误:(403) 已禁止。),AX 导出遇到错误
若要解决此问题,请按照以下步骤操作。
- 登录财务和运营应用。
- 在 Azure Active Directory 应用程序页面上,删除 DtAppID 客户端,然后再次添加。
               
              
            
初始同步期间自引用或循环引用失败
如果您的任何映射都有自引用或循环引用,您可能会收到错误消息。 错误分为以下几类:
解决供应商 V2–to–msdyn_vendors 表映射中的错误
如果表具有在 PrimaryContactPersonId 和 InvoiceVendorAccountNumber 列中存在值的现有行,在将供应商 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'
如果供应商表中的任何行在 PrimaryContactPersonId 和 InvoiceVendorAccountNumber 列中都具有值,请按照以下步骤完成初始同步。
- 在财务和运营应用中,从映射中删除 PrimaryContactPersonId 和 InvoiceVendorAccountNumber 列,然后保存映射。 - 在供应商 V2 (msdynvendors) 的双写入映射页面上,在表映射选项卡上,在左侧的筛选器中,选择财务和运营应用.供应商 V2。 在右侧的筛选器中,选择 Sales.Vendor。 
- 搜索 primarycontactperson 查找 PrimaryContactPersonId 源列。 
- 选择操作,然后选择删除。   
- 重复这些步骤删除 InvoiceVendorAccountNumber 列。   
- 将更改保存到映射。 
 
- 关闭供应商 V2 表的更改跟踪。 - 在数据管理工作区中,选择数据表磁贴。 
- 选择供应商 V2 表。 
- 在操作窗格上,选择选项,然后选择更改跟踪。   
- 选择禁用更改跟踪。   
 
- 运行供应商 V2 (msdyn_vendors) 映射的初始同步。 初始同步应会成功运行,没有任何错误。 
- 运行 CDS 联系人 V2 (contacts) 映射的初始同步。 如果要同步供应商表上的主要联系人列,则必须同步此映射,因为还必须对联系人行进行初始同步。 
- 将 PrimaryContactPersonId 和 InvoiceVendorAccountNumber 列重新添加到供应商 V2 (msdyn_vendors) 映射,然后保存映射。 
- 再次运行供应商 V2 (msdyn_vendors) 映射的初始同步。 由于更改跟踪已关闭,所有行都将同步。 
- 重新打开供应商 V2 表的更改跟踪。 
解决客户 V3–to–Accounts 表映射中的错误
如果表具有在 ContactPersonID 和 InvoiceAccount 列中存在值的现有行,在将客户 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'
如果客户表中的任何行在 ContactPersonID 和 InvoiceAccount 列中都具有值,请按照以下步骤完成初始同步。 您可以对任何现成的表(如客户和联系人)使用此方法。
- 在财务和运营应用中,从客户 V3 (accounts) 映射中删除 ContactPersonID 和 InvoiceAccount 列,然后保存映射。 - 在客户 V3 (accounts) 的双写入映射页面,在表映射选项卡上,在左侧的筛选器中,选择财务和运营应用.客户 V3。 在右侧的筛选器中,选择 Dataverse.Account。 
- 搜索 contactperson 查找 ContactPersonID 源列。 
- 选择操作,然后选择删除。   
- 重复这些步骤删除 InvoiceAccount 列。   
- 将更改保存到映射。 
 
- 关闭客户 V3 表的更改跟踪。 - 在数据管理工作区中,选择数据表磁贴。 
- 选择客户 V3 表。 
- 在操作窗格上,选择选项,然后选择更改跟踪。   
- 选择禁用更改跟踪。   
 
- 运行客户 V3 (Accounts) 映射的初始同步。 初始同步应会成功运行,没有任何错误。 
- 运行 CDS 联系人 V2 (contacts) 映射的初始同步。 - 注释 - 有两个名称相同的映射。 请确保在详细信息选项卡上选择具有以下描述的映射:FO.CDS 供应商联系人 V2 与 CDS.Contacts 之间同步的双写入模板。需要新包 [Dynamics365SupplyChainExtended]。 
- 将 InvoiceAccount 和 ContactPersonId 列重新添加到客户 V3 (Accounts) 映射,然后保存映射。 InvoiceAccount 列和 ContactPersonId 列现在又成为了实时同步模式的一部分。 在下一步中,您将执行这些列的初始同步。 
- 再次运行客户 V3 (Accounts) 映射的初始同步。 由于更改跟踪已关闭,财务和运营应用中 InvoiceAccount 和 ContactPersonId 的数据将同步到 Dataverse。 
- 要将 InvoiceAccount 和 ContactPersonId 的数据从 Dataverse 同步到财务和运营应用,必须使用数据集成项目。 - 在 Power Apps 中,在 Sales.Account 和财务和运营应用.客户 V3 表之间创建数据集成项目。 数据方向必须是从 Dataverse 到财务和运营应用。 因为 InvoiceAccount 是使用双写入的新属性,您可能需要跳过此属性的初始同步。 有关详细信息,请参阅将数据集成到 Dataverse。 - 下图显示了一个更新 CustomerAccount 和 ContactPersonId 的项目。   
- 将公司条件添加到 Dataverse 一端的筛选器中,以仅让与筛选条件匹配的行在财务和运营应用中更新。 要添加筛选器,请选择筛选器按钮。 然后,在编辑查询对话框中,您可以添加筛选器查询,如 _msdyn_company_value eq '<guid>'。 - [注意]如果筛选器按钮未出现,请创建支持票证,让数据集成团队在您的租户上启用筛选器功能。 - 如果您没有为 _msdyn_company_value 输入筛选器查询,那么所有行都将同步。   
 - 行的初始同步现已完成。 
- 在财务和运营应用中,为客户 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 多个查找时,初始同步失败。 有关详细信息,请参阅使用查询检索相关表记录。
若要解决此问题,请按照以下步骤操作:
- 从双重写入实体映射中删除可选查找字段,以使查找数目为 10 个或更少。
- 保存映射并执行初始同步。
- 当第一步的初始同步成功时,添加剩余的查找字段并删除您在第一步中同步的查找字段。 请确保查找字段数为 10 个或更少。 保存映射并运行初始同步。
- 重复这些步骤,直到同步了所有查找字段为止。
- 将所有查找字段添加回映射,保存映射,然后使用跳过初始同步运行映射。
此流程启用实时同步模式的映射。
当事方邮寄地址和当事方电子地址初始同步期间的已知问题
尝试运行当事方邮寄地址和当事方电子地址的初始同步时,您可能会收到以下错误消息:
在 Dataverse 中找不到当事方编号。
对财务和运营应用中的 DirPartyCDSEntity 设置了一个范围,用于筛选人员和组织类型的当事方。 因此,CDS 当事方 - msdyn_parties 映射的初始同步将不会同步其他类型的当事方,包括法人和运营单位。 针对 CDS 当事方邮寄地址 (msdyn_partypostaladdresses) 或当事方联系人 V3 (msdyn_partyelectronicaddresses) 运行初始同步时,您可能会收到错误。
我们正在努力修复以删除财务和运营实体上的当事方类型范围,以便所有类型的当事方都可以成功同步 Dataverse。
运行客户或联系人数据初始同步时是否存在任何性能问题?
如果您已运行客户数据初始同步并且在一直运行客户映射,然后运行联系人数据初始同步,则插入和更新联系人地址的 LogisticsPostalAddress 和 LogisticsElectronicAddress 表期间可能会出现性能问题。 针对 CustCustomerV3Entity 和 VendVendorV2Entity 跟踪了相同的全球邮政地址和电子地址表,并且双重写入会尝试生成更多查询以将数据写入另一端。 如果您已运行客户初始同步,则在运行联系人数据初始同步时停止相应的映射。 对供应商数据执行相同操作。 完成初始同步后,您可以跳过初始同步来运行所有映射。
无法同步具有零值的浮点数据类型
对于价格字段(例如固定付款金额或以交易币种表示的金额)值为零的记录,初始同步可能失败。 在此情况下,您将收到类似于以下示例的错误消息:
验证输入参数时出错:Microsoft.OData.ODataException:无法将文字 '000000' 转换为预期类型 'Edm.Decimal'...
此问题与数据管理模块中的源数据格式下的语言区域设置值有关。 将语言区域设置字段的值更改为 en-us,然后重试。