In uno dei progetti di implementazione recentemente, abbiamo utilizzato il fileIntegrazione del cliente F&SCM (F&O) tramite CDSfunzionalità, disponibili come funzionalità in Common Data Service (CDS). I progetti di integrazione dei dati o integratore di dati (per amministratori) è un framework (disponibile come parte dell'integrazione dei dati di Common Data Service) utilizzato per facilitare l'integrazione dei dati tra Dynamics 365 for Finance and Operations (Fin&SCM, noto anche come F&O) e Dynamics 365 for Sales.
Tramite Power Query o query basate su M, possono esserci anche altre origini dati a cui è possibile connettersi per l'integrazione dei dati. In questo caso, stiamo mappando gli account in Vendite con i clienti in FinOps.
Configura progetti di integrazione dati:
Il prerequisito per impostare i progetti di integrazione dati è innanzitutto impostare i set di connessione. I set di connessione rappresentano la struttura attraverso la quale è possibile connettere varie origini dati. Ad esempio, nel set di connessioni riportato di seguito, abbiamo configurato un set di connessioni che faciliterà l'integrazione dei dati tra i conti in Dynamics 365 for Sales e i clienti in Finance and Operations. Assicurarsi che i set di connessione puntino alle persone giuridiche corrette.Fig 1 – Set di connessione
Dopo aver impostato i set di connessione, impostare i progetti di integrazione dei dati e assicurarsi che la mappatura sia impostata correttamente. Inoltre, assicurarsi che la mappatura dei campi sia impostata correttamente una volta impostata accuratamente l'integrazione dei dati.
Scenario:
Lo scenario consiste nel mappare gli account in Sales ai clienti in FinOps. Inoltre, gli indirizzi e i dettagli di contatto di questi account in Vendite vengono mappati con l'indirizzo principale o il tipo di contatto principale in FinOps. L'altro requisito è avere la possibilità di creare indirizzi non primari e contatti non primari in FinOps. I progetti di integrazione dei dati sfruttano le funzionalità di gestione dei dati di FinOps per gestire l'integrazione dei dati. Ciò significa anche che in FinOps vengono attivate diverse entità di dati dal quadro di gestione dei dati. In questo caso per i clienti l'entità di integrazione dei dati che viene attivata èEntità CustCustomerV3.
Nota:L'entità di integrazione in CDS utilizzata per i clienti èEntità CustCustomerV2. È necessario eliminare il fileEntità CustCustomerV2SottoGestione dati -> Entità dati. L'entità dei datiEntità CustCustomerV2deve essere prima eliminato e aggiunto esplicitamenteEntità CustCustomerV3(come nell'aggiornamento 31 della piattaforma).
LogisticaCodice Postale:
Sostituisci il gestore post-evento per modificare gli indirizzi non primari dopo la creazione dell'indirizzo. In caso di LogisticsPostalAddress, di seguito è riportato il codice X++ per modificare i dettagli nel controllo della griglia.
Leggi anche:iOS 16 Nessun servizio o continui a cercare servizio? Come risolvere
[PostHandlerFor(formStr(LogisticsPostalAddress), formMethodStr(LogisticsPostalAddress, updateControls))]
public static void LogisticsPostalAddress_Post_updateControls(XppPrePostArgs args)
{
FormRun sender = args.getThis();
//Retrieve the two form data sources used in LogisticsPostalAddress form
FormDataSource logisticsPostalAddress_ds, logisticsLocation_ds;
FormDataObject IsPrimaryDet;
LogisticsPostalAddress logisticsPostalAddress;
DirPartyLocationRole dirPartyLocationRole;
LogisticsLocation logisticsLocation;
DirPartyLocation dirPartyLocation;
CustTable custTable;
logisticsPostalAddress_ds = sender.dataSource("LogisticsPostalAddress");
logisticsLocation_ds = sender.dataSource("LogisticsLocation");
//LogisticsPostalAddress and logisticsLocation details retrieved
logisticsPostalAddress = logisticsPostalAddress_ds.cursor();
logisticsLocation = logisticsLocation_ds.cursor();
//Retrieve the location details
select firstonly dirPartyLocation
where dirPartyLocation.Location == logisticsLocation.RecId;
if(dirPartyLocation)
{
//Retrieve the customer details from the address grid
custTable = CustTable::findByPartyRecId(dirPartyLocation.Party);
//Check if the customer record is externally maintained
if(custTable && custTable.IsExternallyMaintained)
{
//Validate if the address is non-primary
if(!dirPartyLocation.IsPrimary)
{
//Edit the Postal Address details like City, State, Zip Code
logisticsPostalAddress_ds.allowEdit(true);
//Edit the name or description details in the Address
logisticsLocation_ds.allowEdit(true);
//Enable the purpose group
sender.control(sender.controlId(formControlStr(LogisticsPostalAddress,PurposeGroup))).enabled(true);
//IsPrimary toggle control disabled for non-Primary addresses
sender.control(sender.controlId(formControlStr(LogisticsPostalAddress,IsPrimary))).enabled(false);
}
}
}
}LogisticaElettronicaCodice Indirizzo:
[FormDataSourceEventHandler(formDataSourceStr(LogisticsContactInfoGrid, LogisticsElectronicAddress), FormDataSourceEventType::SelectionChanged)]
public static void LogisticsElectronicAddress_OnSelectionChanged(FormDataSource sender, FormDataSourceEventArgs e)
{
LogisticsElectronicAddress LogisticsElectronicAddress;
LogisticsLocation logisticsLocation;
DirPartyLocation dirPartyLocation;
CustTable custTable;
FormRun element;
FormControl advancedButton, deleteContactInfoButton;
// Retrieve the form buttons
element = sender.formRun();
advancedButton = element.design(0).controlName("DetailContactInfo");
deleteContactInfoButton = element.design(0).controlName("DeleteContactInfo") ;
// Retrieve the datasource fields objects
FormDataSource LogisticsElectronicAddress_ds = sender.formRun().dataSource("LogisticsElectronicAddress");
FormDataObject typeObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, Type));
FormDataObject LocatorObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, Locator));
FormDataObject LocatorExtensionObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, LocatorExtension));
FormDataObject DescriptionObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, Description));
FormDataObject CountryRegionCodeObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, CountryRegionCode));
FormDataObject IsPrimaryObject = LogisticsElectronicAddress_ds.object(fieldNum(LogisticsElectronicAddress, IsPrimary));
// Retrieve customer record from the LogisticsElectronicAddress grid record
LogisticsElectronicAddress = LogisticsElectronicAddress_ds.cursor();
logisticsLocation = LogisticsLocation::find(LogisticsElectronicAddress.Location);
select firstonly dirPartyLocation where DirPartyLocation.Location == LogisticsLocation.RecId;
if (dirPartyLocation)
{
custTable = CustTable::findByPartyRecId(dirPartyLocation.Party);
// If the customer is externally maintained
if (CustTable && CustTable.IsExternallyMaintained)
{
// if contact information is not primary, make the fields in the grid editable
typeObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
LocatorObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
LocatorExtensionObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
DescriptionObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
CountryRegionCodeObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
//IsPrimaryObject.allowEdit(!LogisticsElectronicAddress.IsPrimary);
// if contact information is primary
// disable the advanced button so users cannot edit details in that screen
advancedButton.enabled(!LogisticsElectronicAddress.IsPrimary);
// disable the delete button
deleteContactInfoButton.enabled(!LogisticsElectronicAddress.IsPrimary);
}
}
}Chiavi di configurazione:
LedgerBasic è la chiave di configurazione necessaria per l'abilitazione di CustCustomerV3Entity. Questa opzione è abilitata (per impostazione predefinita) in Dynamics 365 for Finance and Operations.
Collegamento GitHub:
Il repository del codice viene caricato su github e di seguito è riportato il collegamento al progetto Visual Studio.
Nota:
Il progetto risiede sul livello var.
https://github.com/nav21n/d365finops/tree/master/samples/CDSIntegration
Un file modello viene caricato anche su github. Importa il modello e crea il modello e il progetto. Il nome del file del modello è: D365DMOSamples. Utilizzare la riga di comando per importare il file del modello.
Nome file modello:D365DMO Campioni
Comando per importare il file del modello. Questo passaggio successivo deve essere eseguito prima di costruire il modello e il progetto. In questo caso, ho scelto C:Model_Backups come directory di origine per il file del modello.![]()
Fig 2 – Importa file modello
