最新消息:ww12345678 的部落格重装上线,希望大家继续支持。

D365 财务和供应链中跨公司数据的双向写入集成 / Dual-write integration for Cross-Company data in D365 Finance and SCM

网络文摘 William 838浏览 0评论
  Dual-write does not work with the cross company data sharing policies in D365 FinOps (there are so many names but I am using this name for reference ?). Brief overview about cross company data sharing policy first to set the base for the readers, the Cross-Company data sharing lets you have your data accessible from multiple legal entities (companies in D365 FinOps). For example, if you setup a policy for vendors to be crossed-company then whenever you create a new vendor it will be created in all data sharing legal entities. https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/sysadmin/cross-company-data-sharing Now, What happened when you a table under cross-company data sharing (e.g. VendTable) and want to sync vendors through dual-write? Since, VendTable is one of the data sources for Vendors data entity (dual-write entity map) and we know dual-write does not work well with cross-company data sharing by design. You get following error message when you try to Run the entity map.

"Copying pre-existing data completed with errors. For additional details, go to initial sync details tab."

The error message is confusing and does not reflect the actual issue behind the scene - you will never be able to figured it out what is wrong until you raise it with MS dual-write team and share the activity Id of the job with them to investigate the telemetry (you don't have access to check this one ?) then they share the root cause. However, You can also investigate by putting a breakpoint in method validateDataSharingEnabledForEntityTableBeforDualWriteEnable() of class SysDataSharingValidation.  

/// <summary>

    /// Validates that cross company data sharing is not enabled when enabling Dual Write.

    /// </summary>

    /// <param name = "_entityName">The name of the entity containing the table being enabled</param>

    /// <param name = "_tableName">Table in entity</param>

    /// <param name = "_dataAreaId">Company info</param>

    [SubscribesTo(classStr(BusinessEventsRegistrationBase), staticdelegatestr(BusinessEventsRegistrationBase, onTableEnabled))]

    public static voidvalidateDataSharingEnabledForEntityTableBeforDualWriteEnable(str _entityName, str _tableName, DataAreaId _dataAreaId)

    {

        SysDataSharingOrganization sysDataSharingOrganizationTable;

        SysDataSharingRuleEnabledsysDataSharingRuleEnabledTable;

 

        select firstonly SharedTableName from sysDataSharingRuleEnabledTable

                wheresysDataSharingRuleEnabledTable.SharedTableName == _tableName

                    join DataSharingPolicy, DataSharingCompany from sysDataSharingOrganizationTable

                         where sysDataSharingRuleEnabledTable.DataSharingPolicy == sysDataSharingOrganizationTable.DataSharingPolicy

                &&  sysDataSharingOrganizationTable.DataSharingCompany == _dataAreaId;

 

        if (sysDataSharingRuleEnabledTable)

        {

            throwerror(strFmt("@DataSharing:CrossCompanySharingError", _entityName, sysDataSharingOrganizationTable.DataSharingPolicy));

        }

    }

 
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址