Risoluzione dei problemi di sincronizzazione in tempo reale
In questo articolo vengono fornite informazioni sulla risoluzione dei problemi di integrazione della doppia scrittura tra le app per la finanza e le operazioni e Microsoft Dataverse. In particolare, fornisce informazioni che possono aiutarti a risolvere i problemi relativi alla sincronizzazione in tempo reale.
Importante
Alcuni problemi che questo articolo tratta potrebbero richiedere il ruolo di amministratore di sistema o le credenziali di amministratore del tenant Azure Active Directory (Azure AD). Ogni sezione spiega se sono richiesti ruolo o credenziali specifici.
La sincronizzazione in tempo reale mostra un errore quando si crea una riga
È possibile che venga visualizzato il seguente messaggio di errore quando si crea una riga in un'app per la finanza e le operazioni:
[{\"error\":{\"code\":\"0x80072560\",\"message\":\"L'utente non è un membro dell'organizzazione.\"}}], Il server remoto ha restituito un errore: (403) Accesso negato."}}".
Per risolvere il problema, seguire i passaggi in Requisiti e prerequisiti di sistema. Per completare questi passaggi, gli utenti dell'applicazione di doppia scrittura che sono stati creati in Dataverse devono avere il ruolo di amministratore di sistema. Anche il team proprietario predefinito deve avere il ruolo di amministratore di sistema.
La sincronizzazione in tempo reale mostra un errore quando si tenta di salvare i dati della tabella
Ruolo richiesto per risolvere il problema: amministratore di sistema
È possibile che venga visualizzato il seguente messaggio di errore quando si tenta di salvare dati di tabella in un'app per la finanza e le operazioni:
Impossibile salvare le modifiche al database. Impossibile eseguire il commit della transazione per l'unità di lavoro. Impossibile scrivere i dati nell'entità unità di misura. Scrittura su UnitOfMeasureEntity non riuscita con messaggio di errore Impossibile sincronizzare con l'entità unità di misura.
Per risolvere il problema, è necessario assicurarsi che i dati di riferimento dei prerequisiti esistano nell'app per la finanza e le operazioni e in Dataverse. Ad esempio, se un record cliente appartiene a un gruppo di clienti specifico, assicurarsi che il record del gruppo di clienti esista in Dataverse.
Se i dati esistono in entrambe le posizioni e si conferma che il problema non è relativo ai dati, procedere nel seguente modo.
- Aprire l'entità DualWriteProjectConfigurationEntity utilizzando il componente aggiuntivo di Excel. Per utilizzare il componente aggiuntivo, abilitare la modalità di progettazione nel componente aggiuntivo di Excel per la finanza e le operazioni, quindi aggiungere DualWriteProjectConfigurationEntity a un foglio di lavoro. Per ulteriori informazioni, vedi Visualizzare e aggiornare i dati entità con Excel.
- Selezionare ed eliminare i record che presentano problemi nella mappa e nel progetto a doppia scrittura. Vi saranno due record per ogni mapping a doppia scrittura.
- Pubblicare le modifiche utilizzando il componente aggiuntivo di Excel. Questo passaggio è importante perché elimina i record dall'entità e dalle tabelle sottostanti.
Gestire gli errori dei privilegi di lettura o scrittura quando si creano i dati in un'app per la finanza e le operazioni
È possibile che venga visualizzato un messaggio di errore "Richiesta non valida" quando si creano dati in un'app per la finanza e le operazioni.
Per risolvere il problema, è necessario abilitare il privilegio mancante assegnando il ruolo di sicurezza corretto al team delle Business Unit Dynamics 365 Sales o Dynamics 365 Customer Service mappate.
Nell'app per la finanza e le operazioni, trovare la Business Unit mappata nel set di connessioni Integrazione dati.
Nell'app Customer Engagement, accedere all'ambiente, andare a Impostazioni > Sicurezza e trovare il team della Business Unit mappata.
Aprire la pagina del team per la modifica, quindi selezionare Gestisci ruoli.
Nella finestra di dialogo Gestisci ruoli del team, assegnare il ruolo che dispone del privilegio di lettura/scrittura per le tabelle pertinenti, quindi selezionare OK.
Risoluzione dei problemi di sincronizzazione in un ambiente in cui è stato recentemente modificato Dataverse
Ruolo richiesto per risolvere il problema: amministratore di sistema
È possibile che venga visualizzato il seguente messaggio di errore quando si creano dati in un'app per la finanza e le operazioni:
{"entityName":"CustCustomerV3Entity","executionStatus":2,"fieldResponses":[],"recordResponses":[{"errorMessage":"Impossibile generare il payload per l'entità CustCustomerV3Entity","logDateTime":"2019-08-27T18:51:52.5843124Z","verboseError":"Creazione del payload non riuscita con errore URI non valido: L'URI è vuoto."}],"isErrorCountUpdated":true}
Di seguito è indicato l'errore nell'app Customer Engagement:
Si è verificato un errore imprevisto del codice ISV. (ErrorType = ClientError) Eccezione imprevista dal plug-in (Execute): Microsoft.Dynamics.Integrator.DualWriteRuntime.Plugins.PostCommitPlugin: System.Exception: impossibile elaborare l'account dell'entità - Tentativo di connessione non riuscito perché la parte connessa non ha risposto correttamente dopo un periodo di tempo o connessione stabilita non riuscita perché l'host connesso non ha risposto.
Questo errore si verifica se l'ambiente Dataverse viene reimpostato in modo errato quando si tenta di creare dati nell'app per la finanza e le operazioni.
Importante
Se gli ambienti sono stati ricollegati, è necessario interrompere tutte le mappe di entità prima di continuare con i passaggi di mitigazione.
Per risolvere il problema, è necessario completare i passaggi sia in Dataverse che nell'app per la finanza e le operazioni.
Nell'app per la finanza e le operazioni segui questi passaggi:
- Aprire l'entità DualWriteProjectConfigurationEntity utilizzando il componente aggiuntivo di Excel. Per utilizzare il componente aggiuntivo, abilitare la modalità di progettazione nel componente aggiuntivo di Excel per la finanza e le operazioni, quindi aggiungere DualWriteProjectConfigurationEntity a un foglio di lavoro. Per ulteriori informazioni, vedi Visualizzare e aggiornare i dati entità con Excel.
- Selezionare ed eliminare i record che presentano problemi nella mappa e nel progetto a doppia scrittura. Vi saranno due record per ogni mapping a doppia scrittura.
- Pubblicare le modifiche utilizzando il componente aggiuntivo di Excel. Questo passaggio è importante perché elimina i record dall'entità e dalle tabelle sottostanti.
- Per aiutare a prevenire errori quando si ricollegano gli ambienti di finanza e operazioni o Dataverse, assicurarsi che non rimangano configurazioni a doppia scrittura.
In Dataverse, effettuare le seguenti operazioni:
- Accedere al proprio ambiente Dataverse (ad esempio
https://*****.crm.dynamics.com/
). - Vai a Impostazioni avanzate>Ricerca avanzata.
- Selezionare Configurazione di runtime DualWrite.
- Selezionare la colonna da visualizzare.
- Selezionare Risultati per visualizzare le configurazioni.
- Eliminare tutte le istanze.
- Accedere al proprio ambiente Dataverse (ad esempio
Nell'app per la finanza e le operazioni segui questi passaggi:
- Aprire l'entità DualWriteProjectConfigurationEntity utilizzando il componente aggiuntivo di Excel. Per utilizzare il componente aggiuntivo, abilitare la modalità di progettazione nel componente aggiuntivo di Excel per la finanza e le operazioni, quindi aggiungere DualWriteProjectConfigurationEntity a un foglio di lavoro. Per ulteriori informazioni, vedi Visualizzare e aggiornare i dati entità con Excel.
- Selezionare ed eliminare i record che presentano problemi nella mappa e nel progetto a doppia scrittura. Vi saranno due record per ogni mapping a doppia scrittura.
- Pubblicare le modifiche utilizzando il componente aggiuntivo di Excel. Questo passaggio è importante perché elimina i record dall'entità e dalle tabelle sottostanti.
- Per aiutare a prevenire errori quando si ricollegano gli ambienti di finanza e operazioni o Dataverse, assicurarsi che non rimangano configurazioni a doppia scrittura.
Errore di sincronizzazione in tempo reale dopo aver eseguito una copia completa del database
È possibile che venga visualizzato il seguente messaggio di errore dopo aver eseguito una copia completa del database da un sistema a un altro e aver tentato di eseguire un'operazione sul database:
L'organizzazione SecureConfig (???) non corrisponde all'effettiva organizzazione CRM (???).
Il messaggio di errore viene visualizzato dal plug-in di runtime a doppia scrittura per garantire che la configurazione a doppia scrittura impostata in un sistema non possa essere utilizzata in un altro sistema.
Per risolvere il problema, eliminare tutti i record nella tabella msdyn_dualwriteruntimeconfig dopo aver ripristinato il database. Per ulteriori informazioni, vedere Scollegare e ricollegare ambienti a doppia scrittura.
Problemi di sincronizzazione in tempo reale causati da una sintassi errata del filtro di query sulle mappe a doppia scrittura
Anche se l'espressione di query per un filtro di mappa a doppia scrittura è sintatticamente corretta, potrebbe non funzionare come previsto. L'espressione filtro si trova su un'entità, non su una singola origine dati di un oggetto query. Pertanto, la query SQL generata non restituisce i risultati previsti.
Ecco un esempio.
Query entity = PROJECTENTITY
Query expression = (ParentProject == "")
Ci si protebbe aspettare che i progetti senza padre vengano filtrati. Tuttavia, il filtro non funziona perché viene tradotto in una query simile all'esempio seguente.
SELECT T1.RECID,T1.MODIFIEDDATETIME,T1.RECVERSION,T1.RECID,T1.DIMENSION,
T1.LOCATION,T1.PROJECTCONTROLLER,T1.PROJECTID,T1.PROJECTMANAGER,T1.REFERENCE,
T1.SALESMANAGER,T1.SCHEDULED,T1.RECVERSION#8,T1.RECVERSION#7,
T1.RECVERSION#6,T1.RECVERSION#5,T1.RECVERSION#4,T1.RECVERSION#3,
T1.RECVERSION#2,T1.RECID#8,T1.RECID#7,T1.RECID#6,T1.RECID#5,
T1.RECID#4,T1.RECID#3,T1.RECID#2,T1.PARTITION FROM PROJECTENTITY T1
WHERE(((((((((((PARTITION=5637144576) AND (DATAAREAID=N'usmf')) AND
((PARTITION#2=5637144576) OR (PARTITION#2 IS NULL))) AND
((PARTITION#3=5637144576) OR (PARTITION#3 IS NULL))) AND
((PARTITION#4=5637144576) OR (PARTITION#4 IS NULL))) AND
((PARTITION#5=5637144576) OR (PARTITION#5 IS NULL))) AND
((PARTITION#6=5637144576) OR (PARTITION#6 IS NULL))) AND
((PARTITION#7=5637144576) OR (PARTITION#7 IS NULL))) AND
((PARTITION#8=5637144576) OR (PARTITION#8 IS NULL))) AND
((DATAAREAID#8=N'usmf') OR (DATAAREAID#8 IS NULL))) AND
(PARENTPROJECT=''))
ORDER BY T1.PROJECTID
Il risultato effettivo è che il campo parentProject
viene valutato come null
. Tuttavia, null
non corrisponde alla stringa vuota. A causa di questa mancata corrispondenza, il filtro di query non restituisce risultati validi.
Per risolvere il problema, procedere come segue.
Aggiungere una colonna calcolata che può essere aggiunta in un modello di estensione e che è supportata da una logica che converte
null
nella stringa vuota.SysComputedColumn::if(SysComputedColumn::isNullExpression(ParentProject), SysComputedColumn::returnLiteral(""), fieldName);
Utilizzare il filtro sulla nuova colonna calcolata anziché sulla colonna predefinita.
Per valutare il filtro in un ambiente di sviluppo, è possibile utilizzare il seguente codice X++ per convalidare i risultati. Eseguire questo codice come programma autonomo. È possibile utilizzarlo per valutare diversi tipi di filtri applicabili a un'entità prima di utilizzare tali filtri su mappe a doppia scrittura. La query può essere eseguita sul database per valutare le discrepanze.
var entityName = "PROJECTENTITY";
var filterExpression = '(ParentProject == "")';
Query query = new Query();
query.literals(NoYes::Yes);
QueryBuildDataSource qbd = query.addDataSource(tablename2id(entityName));
qbd.addRange(fieldname2id(qbd.table(),identifierStr(RecVersion))).value(filterExpression);
qbd.addSelectionField(fieldname2id(qbd.table(),identifierStr(RecId)));
QueryRun qRun = new QueryRun(query);
// This provides the actual sql statement to execute
var actualSqlStatement = query.getSQLStatement();
while(qRun.next())
{
var rec = qRun.get(tableName2Id(entityName));
}
I dati delle app per la finanza e le operazioni non sono sincronizzati con Dataverse
Durante la sincronizzazione in tempo reale, si potrebbe riscontrare un problema per cui solo una parte dei dati viene sincronizzata dalle app per la finanza e le operazioni in Dataverse o i dati non vengono sincronizzati affatto.
Nota
È necessario risolvere questo problema durante la fase di sviluppo.
Prima di iniziare a risolvere il problema, rivedere i seguenti prerequisiti:
- Assicurarsi che le modifiche personalizzate siano scritte in un unico ambito di transazione.
- Gli eventi aziendali e il framework a doppia scrittura non gestiscono operazioni
doinsert()
,doUpdate()
erecordset()
o record in cuiskipBusinessEvents(true)
è contrassegnato. Se il codice è all'interno di queste funzioni, la doppia scrittura non verrà attivata. - Gli eventi aziendali devono essere registrati per l'origine dati mappata. Alcune origini dati potrebbero utilizzare un outer join e potrebbero essere contrassegnate come di sola lettura nelle app per la finanza e le operazioni. Queste origini dati non vengono tracciate.
- Le modifiche verranno attivate solo se sono sui campi mappati. Le modifiche ai campi non mappati non attiveranno la doppia scrittura.
- Assicurarsi che le valutazioni dei filtri forniscano un risultato valido.
Passaggi per la risoluzione dei problemi
Rivedere i mapping dei campi nella pagina di amministrazione a doppia scrittura. Se un campo non è mappato dalle app per la finanza e le operazioni in Dataverse, non verrà tracciato. Ad esempio, nella figura seguente, il campo Descrizione è tracciato da Dataverse ma non dalle app per la finanza e le operazioni. Nessuna modifica a tale campo all'interno delle app per la finanza e le operazioni verrà tracciata.
Determinare se l'origine dati è tracciata nella definizione degli eventi aziendali. Ad esempio, nella figura seguente, nessun campo dalla tabella DefaultDimensionDAVs e dalle tabelle sottostanti verrà tracciato per le modifiche. Le origini dati che utilizzano un outer join e che sono contrassegnate come di sola lettura non vengono tracciate.
Determinare se i campi della tabella mappati vengono visualizzati nella tabella BUSINESSEVENTSDEFINITION, come mostrato nella figura seguente. Se non si trova il campo che si sta cercando nel risultato della query, il campo non verrà attivato dalla doppia scrittura.
Scenario di esempio
Nelle app per la finanza e le operazioni, è presente un aggiornamento all'indirizzo per un record di contatto, ma la modifica dell'indirizzo non è sincronizzata in Dataverse. Questo scenario si verifica perché nessun record nella tabella BusinessEventsDefinition ha la combinazione della tabella interessata e dell'entità. Nello specifico, la tabella LogisticsPostalAddress non è l'origine dati diretta per l'entità smmContactpersonCDSV2Entity. L'entità smmContactpersonCDSV2Entity ha smmContactPersonV2Entity come origine dati e smmContactPersonV2Entity, a sua volta, ha LogisticsPostalAddressBaseEntity come origine dati. La tabella LogisticsPostalAddress è l'origine dati per LogisticsPostalAddressBaseEntity.
Una situazione simile può verificarsi in alcuni modelli non standard, come i casi in cui la tabella che viene modificata nelle app per la finanza e le operazioni non è chiaramente collegata all'entità che la contiene. Ad esempio, i dati dell'indirizzo principale vengono calcolati sull'entità smmContactPersonCDSV2Entity. Il framework a doppia scrittura tenta di determinare in che modo una modifica a una tabella sottostante viene mappata alle entità. Di solito, questo approccio è sufficiente. Tuttavia, in alcuni casi, il collegamento è così complesso che è necessario essere specifici. È necessario assicurarsi che RecId della relativa tabella sia direttamente disponibile sull'entità. Quindi, aggiungere un metodo statico per monitorare la tabella per le modifiche.
Ad esempio, rivedere il metodo smmContactPersonCDSV2Entity::getEntityDataSourceToFieldMapping(). CustCustomerV3entity e VendVendorV2Entity sono stati modificati per gestire questa situazione.
Per risolvere il problema, procedere come segue.
Aggiungere un campo PrimaryPostalAddressRecId all'entità smmContactPersonV2Entity. Rendere interna questa impostazione.
Aggiungere lo stesso campo all'entità smmContactPersonCDSV2Entity.
Aggiungere il seguente metodo alla classe smmContactPersonCDSV2Entity.
public static container getEntityDataSourceToFieldMapping(container mapping) { mapping += [[tablestr(smmContactPersonCDSV2Entity), tablenum(LogisticsPostalAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryPostalAddressRecId)]]; return mapping; }
Sincronizzare il database e creare l'applicazione.
Interrompere tutte le mappe a doppia scrittura che vengono create sull'entità smmContactPersonCDSV2Entity.
Avviare la mappa. Dovrebbe venire visualizzata la nuova tabella (LogisticsPostalAddress in questo esempio) che si è iniziato a monitorare utilizzando la colonna RefTableName per la riga in cui il valore refentityname è uguale a smmContactPersonCDSV2Entity nella tabella BusinessEventsDefinition.
Errore durante la creazione di un record in cui vengono inviati più record da un'app per la finanza e le operazioni a Dataverse nello stesso batch
Per qualsiasi transazione, un'app per la finanza e le operazioni crea dati in un batch e li invia come batch a Dataverse. Se due record vengono creati come parte della stessa transazione e fanno riferimento l'uno all'altro, è possibile che venga visualizzato un messaggio di errore simile all'esempio seguente nell'app per la finanza e le operazioni:
Impossibile scrivere i dati nell'entità aaa_fundingsources. Impossibile cercare ebecsfs_contracts con i valori {PC00...}. Impossibile cercare aaa_fundingsources con i valori {PC00...}. Scritture su aaa_fundingsources non riuscite con messaggio di errore Messaggio di eccezione: Il server remoto ha restituito un errore: (400) Richiesta non valida.
Per risolvere il problema, creare relazioni di entità nell'app per la finanza e le operazioni per indicare che le due entità sono correlate tra loro e che i relativi record vengono gestiti nella stessa transazione.
Abilitare la registrazione dettagliata dei messaggi di errore
In un'app per la finanza e le operazioni, potrebbero verificarsi errori relativi all'ambiente Dataverse. Il messaggio di errore potrebbe non contenere il testo completo del messaggio o altri dati rilevanti. Per ottenere maggiori informazioni, puoi abilitare la registrazione dettagliata impostando il flag IsDebugMode che è presente sull'entità DualWriteProjectConfigurationEntity in tutte le configurazioni di progetto nelle app per la finanza e le operazioni.
- Aprire l'entità DualWriteProjectConfigurationEntity utilizzando il componente aggiuntivo di Excel. Per utilizzare il componente aggiuntivo, abilitare la modalità di progettazione nel componente aggiuntivo di Excel per la finanza e le operazioni, quindi aggiungere DualWriteProjectConfigurationEntity a un foglio di lavoro. Per ulteriori informazioni, vedi Visualizzare e aggiornare i dati entità con Excel.
- Impostare il flag IsDebugMode su Sì sul progetto.
- Eseguire lo scenario.
- I log dettagliati sono disponibili nella tabella DualWriteErrorLog. Per cercare i dati utilizzando il browser della tabella, utilizzare il seguente URL:
https://XXXaos.cloudax.dynamics.com/?mi=SysTableBrowser&tableName=DualWriteErrorLog
. - Per acquisire più log in modalità di debug, installare l'aggiornamento in KB 4595434 (Correzione per i valori vuoti propagati nella sincronizzazione in tempo reale a doppia scrittura).
Errore durante l'aggiunta di un indirizzo per un cliente o un contatto
Potrebbe venire visualizzato il seguente messaggio di errore quando si tenta di aggiungere un indirizzo per un cliente o un contatto nelle app per la finanza e le operazioni o Dataverse:
Impossibile scrivere dati sull'entità msdyn_partypostaladdresses.Writes per DirPartyPostalAddressLocationCDSEntity operazione non riuscita con messaggio di errore Richiesta non riuscita con codice di stato BadRequest e codice di errore CDS: 0x80040265 messaggio di risposta: si è verificato un errore nel plug-in. Esiste già un record con valori di attributo ID posizione. La chiave dell'entità Chiave ID posizione richiede che questo set di attributi contenga valori univoci. Selezionare valori univoci e riprovare.
Per risolvere il problema, installare la versione del pacchetto di orchestrazione a doppia scrittura (2.2.2.60) in modo che le chiavi sulla tabella Indirizzo siano definite come mostrato nella tabella seguente.
Proprietà | Valore |
---|---|
Nome visualizzato | Chiave posizione |
Nome | msdyn_locationkey |
Campi | msdyn_locationid, parentid |
Stato | Attive |
Processo di sistema | Vuoto |
Errore durante l'aggiunta di un cliente in Dataverse
È possibile che venga visualizzato il seguente messaggio di errore quando si tenta di aggiungere un cliente in Dataverse:
"RecordError0":"Scrittura non riuscita per entità Clienti V3 con eccezione sconosciuta - Record di parte non trovato per il tipo di parte "Organizzazione""}.
Quando un cliente viene creato in Dataverse, viene generato un nuovo numero di parte. Il messaggio di errore viene visualizzato quando il record cliente, insieme alla parte, viene sincronizzato nelle app per la finanza e le operazioni, ma esiste già un record cliente con un numero di parte diverso.
Per risolvere il problema, trovare il cliente tramite la ricerca della parte. Se il cliente non esiste, creare un nuovo record cliente. Se il cliente esiste, utilizzare la parte esistente per creare il nuovo record cliente.
Errore durante la creazione di un nuovo cliente, fornitore o contatto in Dataverse
Potrebbe venire visualizzato il seguente messaggio di errore quando si tenta di creare un nuovo cliente, fornitore o contatto in Dataverse:
Impossibile aggiornare il tipo di una parte da "DirOrganization" a "DirPerson", dovrebbe essere eseguita invece l'eliminazione della parte esistente seguita da un inserimento con il nuovo tipo.
In Dataverse, è presente una sequenza numerica sulla tabella msdyn_party. Quando viene creato un account in Dataverse, viene creata una nuova parte (ad esempio Party-001 del tipo Organizzazione). Questi dati vengono inviati all'app per la finanza e le operazioni. Se l'ambiente Dataverse viene ripristinato o l'ambiente di finanza e operazioni è collegato a un ambiente Dataverse diverso e quindi viene creato un nuovo record contatto in Dataverse, viene creato un nuovo valore di parte che inizia con Party-001. Questa volta, il record della parte creato sarà Party-001 del tipo Persona. Quando questi dati vengono sincronizzati, le app per la finanza e le operazioni mostrano il messaggio di errore precedente, perché il record della parte Party-001 del tipo Organizzazione esiste già.
Per risolvere il problema, modificare la sequenza numerica automatica per il campo msdyn_partynumber della tabella msdyn_party in Dataverse in una sequenza numerica automatica diversa.
Problema di prestazioni relativo ai mapping dei clienti o dei contatti
Potrebbe essere possibile migliorare marginalmente le prestazioni della sincronizzazione in tempo reale per clienti e contatti personalizzando il metodo getEntityDataSourceToFieldMapping (nell'entità CustCustomerV3Entity) e il metodo getEntityDataSourceToFieldMapping (nell'entità smmContactPersonCDSV2Entity). Queste personalizzazioni riducono il numero di record nella tabella BusinessEventsDefinition. Questa riduzione del numero di record, a sua volta, riduce il numero di eventi generati.
Il metodo getEntityDataSourceToFieldMapping nell'entità CustCustomerV3Entity garantisce che un aggiornamento dell'indirizzo elettronico o dell'indirizzo postale del cliente attivi eventi aziendali, in modo che i dati aggiornati vengano inviati a Dataverse. Se non si utilizzano tutti i campi e non si ha bisogno delle informazioni in doppia scrittura, commentare le righe appropriate nel metodo. Ogni tabella e campo tracciato aggiunto in questo metodo aggiunge un record nella tabella BusinessEventsDefinition per la combinazione della tabella tracciata e dell'entità tracciata.
public static container getEntityDataSourceToFieldMapping(container mapping)
{
mapping += [
[tablestr(DirPartyBaseEntity), tablenum(LogisticsPostalAddress), fieldstr(CustCustomerV3Entity, AddressRecordId)],
[identifierstr(DirPartyBaseEntity), tablenum(LogisticsElectronicAddress), fieldstr(CustCustomerV3Entity, PrimaryContactURLRecordId)],
[identifierstr(DirPartyBaseEntity1), tablenum(LogisticsElectronicAddress), fieldstr(CustCustomerV3Entity, PrimaryContactPhoneRecordId)],
[identifierstr(DirPartyBaseEntity2), tablenum(LogisticsElectronicAddress), fieldstr(CustCustomerV3Entity, PrimaryContactEmailRecordId)],
[identifierstr(DirPartyBaseEntity3), tablenum(LogisticsElectronicAddress), fieldstr(CustCustomerV3Entity, PrimaryContactFaxRecordId)],
[identifierstr(DirPartyBaseEntity4), tablenum(DirPartyLocation), fieldstr(CustCustomerV3Entity, DirPartyLocationRecordId)],
[identifierstr(DirPartyBaseEntity5), tablenum(LogisticsPostalAddress), fieldstr(CustCustomerV3Entity, InvoiceAddressRecordId)],
[identifierstr(DirPartyBaseEntity6), tablenum(LogisticsPostalAddress), fieldstr(CustCustomerV3Entity, DeliveryAddressRecordId)],
[identifierStr(DirPartyBaseEntity7), tablenum(DirPartyTable), fieldstr(CustCustomerV3Entity, PartyRecordId)]];
return mapping;
}
Analogamente, il metodo getEntityDataSourceToFieldMapping nell'entità smmContactPersonCDSV2Entity garantisce che un aggiornamento dell'indirizzo elettronico o dell'indirizzo postale del contatto attivi eventi aziendali, in modo che i dati aggiornati vengano inviati a Dataverse. Nel metodo, è possibile commentare le righe per tutti i campi che non si utilizzano.
public static container getEntityDataSourceToFieldMapping(container mapping)
{
mapping += [
[tablestr(DirPartyBaseEntity), tablenum(LogisticsPostalAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryPostalAddressRecId)],
[identifierStr(DirPartyBaseEntity), tablenum(DirPartyTable), fieldstr(smmContactPersonCDSV2Entity, PrimaryAddressLocation)],
[identifierStr(DirPartyBaseEntity1), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactEmailRecordId)],
[identifierStr(DirPartyBaseEntity2), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactFaxRecordId)],
[identifierStr(DirPartyBaseEntity3), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactPhoneRecordId)],
[identifierStr(DirPartyBaseEntity4), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactFacebookRecordId)],
[identifierStr(DirPartyBaseEntity5), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactTwitterRecordId)],
[identifierStr(DirPartyBaseEntity6), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactURLRecordId)],
[identifierStr(DirPartyBaseEntity7), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactLinkedInRecordId)],
[identifierStr(DirPartyBaseEntity8), tablenum(LogisticsElectronicAddress), fieldstr(smmContactPersonCDSV2Entity, PrimaryContactTelexRecordId)],
[identifierStr(DirPartyBaseEntity9), tablenum(DirPartyTable), fieldstr(smmContactPersonCDSV2Entity, PartyRecordId)]];
return mapping;
}
Dopo aver aggiornato i metodi, effettuare le seguenti operazioni.
- Sincronizzare il database e creare l'applicazione.
- Interrompere tutte le mappe a doppia scrittura sulle entità smmContactPersonCDSV2Entity e CustCustomerV3Entity.
- Avviare le mappe. Dovrebbero essere visibili meno record nelle entità smmContactPersonCDSV2Entity and CustCustomerV3Entity e nella tabella BusinessEventsDefinition e le prestazioni potrebbero migliorare leggermente.