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;
}