Hello,
We are trying to integrate Customer shipping address between BusinessCentral & Sales (CRM) for that we have created table mapping for "Ship-to Address" table from BusinessCentral with customeraddress table from dataverse. but when we do full sync, we are getting error as "The caption Address is ambiguous between multiple fields on the table CRM Customeraddress"
below is the codeunit for refrance, not sure what is wrong.
.
codeunit 50101 CDSDataverseEvent { [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Setup Defaults", 'OnGetCDSTableNo', '', false, false)] local procedure HandleOnGetCDSTableNo(BCTableNo: Integer; var CDSTableNo: Integer; var handled: Boolean) begin if BCTableNo = DATABASE::"Ship-to Address" then begin CDSTableNo := DATABASE::"CRM Customeraddress"; handled := true; end; end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"Lookup CRM Tables", 'OnLookupCRMTables', '', true, true)] local procedure HandleOnLookupCRMTables(CRMTableID: Integer; NAVTableId: Integer; SavedCRMId: Guid; var CRMId: Guid; IntTableFilter: Text; var Handled: Boolean) begin if CRMTableID = Database::"CRM Customeraddress" then Handled := LookupCDSCustomerAddress(SavedCRMId, CRMId, IntTableFilter); end; local procedure LookupCDSCustomerAddress(SavedCRMId: Guid; var CRMId: Guid; IntTableFilter: Text): Boolean var CDSCustomerAddress: Record "CRM Customeraddress"; OriginalCDSCustomerAddress: Record "CRM Customeraddress"; OriginalCDSCustomerAddressList: Page "CDS CustomerAddress List"; //ToDo - create a list page for CustomerAddress eg. CDS Lab Book List begin if not IsNullGuid(CRMId) then begin if CDSCustomerAddress.Get(CRMId) then OriginalCDSCustomerAddressList.SetRecord(CDSCustomerAddress); if not IsNullGuid(SavedCRMId) then if OriginalCDSCustomerAddress.Get(SavedCRMId) then OriginalCDSCustomerAddressList.SetCurrentlyCoupledCDSCustomerAddress(OriginalCDSCustomerAddress); end; CDSCustomerAddress.SetView(IntTableFilter); OriginalCDSCustomerAddressList.SetTableView(CDSCustomerAddress); OriginalCDSCustomerAddressList.LookupMode(true); if OriginalCDSCustomerAddressList.RunModal = ACTION::LookupOK then begin OriginalCDSCustomerAddressList.GetRecord(CDSCustomerAddress); //CRMId := CDSCustomerAddress.CustomerAddressId; //ToDo check primary key CRMId := CDSCustomerAddress.Name; exit(true); end; exit(false); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"CRM Setup Defaults", 'OnAddEntityTableMapping', '', true, true)] local procedure HandleOnAddEntityTableMapping(var TempNameValueBuffer: Record "Name/Value Buffer" temporary); begin AddEntityTableMapping('Ship-to Address', DATABASE::"CRM Customeraddress", TempNameValueBuffer); end; local procedure AddEntityTableMapping(CRMEntityTypeName: Text; TableID: Integer; var TempNameValueBuffer: Record "Name/Value Buffer" temporary) begin TempNameValueBuffer.Init(); TempNameValueBuffer.ID := TempNameValueBuffer.Count 1; TempNameValueBuffer.Name := CopyStr(CRMEntityTypeName, 1, MaxStrLen(TempNameValueBuffer.Name)); TempNameValueBuffer.Value := Format(TableID); TempNameValueBuffer.Insert(); end; local procedure InsertIntegrationTableMapping(var IntegrationTableMapping: Record "Integration Table Mapping"; MappingName: Code[20]; TableNo: Integer; IntegrationTableNo: Integer; IntegrationTableUIDFieldNo: Integer; IntegrationTableModifiedFieldNo: Integer; TableConfigTemplateCode: Code[10]; IntegrationTableConfigTemplateCode: Code[10]; SynchOnlyCoupledRecords: Boolean) begin IntegrationTableMapping.CreateRecord(MappingName, TableNo, IntegrationTableNo, IntegrationTableUIDFieldNo, IntegrationTableModifiedFieldNo, TableConfigTemplateCode, IntegrationTableConfigTemplateCode, SynchOnlyCoupledRecords, IntegrationTableMapping.Direction::Bidirectional, 'CDS'); end; procedure InsertIntegrationFieldMapping(IntegrationTableMappingName: Code[20]; TableFieldNo: Integer; IntegrationTableFieldNo: Integer; SynchDirection: Option; ConstValue: Text; ValidateField: Boolean; ValidateIntegrationTableField: Boolean) var IntegrationFieldMapping: Record "Integration Field Mapping"; begin IntegrationFieldMapping.CreateRecord(IntegrationTableMappingName, TableFieldNo, IntegrationTableFieldNo, SynchDirection, ConstValue, ValidateField, ValidateIntegrationTableField); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"CDS Setup Defaults", 'OnAfterResetConfiguration', '', true, true)] local procedure HandleOnAfterResetConfiguration(CDSConnectionSetup: Record "CDS Connection Setup") var IntegrationTableMapping: Record "Integration Table Mapping"; IntegrationFieldMapping: Record "Integration Field Mapping"; CDSCustomerAddress: Record "CRM Customeraddress"; ShipToAddress: Record "Ship-to Address"; begin InsertIntegrationTableMapping( IntegrationTableMapping, 'Customeraddress', DATABASE::"Ship-to Address", DATABASE::"CRM Customeraddress", CDSCustomerAddress.FieldNo(Name), CDSCustomerAddress.FieldNo(ModifiedOn), '', '', true); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo(Address), CDSCustomerAddress.FieldNo(Line1), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo("Address 2"), CDSCustomerAddress.FieldNo(Line2), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo(City), CDSCustomerAddress.FieldNo(City), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo(County), CDSCustomerAddress.FieldNo(StateOrProvince), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo("Post Code"), CDSCustomerAddress.FieldNo(PostalCode), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); InsertIntegrationFieldMapping('Customeraddress', ShipToAddress.FieldNo("Country/Region Code"), CDSCustomerAddress.FieldNo(Country), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); //InsertIntegrationFieldMapping('LabBook', LabBook.FieldNo(Title), CDSLabBook.FieldNo(cr703_Title), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); //InsertIntegrationFieldMapping('LabBook', LabBook.FieldNo(Author), CDSLabBook.FieldNo(cr703_Author), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); //InsertIntegrationFieldMapping('LabBook', LabBook.FieldNo(Hardcover), CDSLabBook.FieldNo(cr703_Hardcover), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); //InsertIntegrationFieldMapping('LabBook', LabBook.FieldNo("Page Count"), CDSLabBook.FieldNo(cr703_PageCount), IntegrationFieldMapping.Direction::Bidirectional, '', true, false); end; }