Risolvere i problemi comuni relativi a più tabelle
Questo articolo consente di risolvere e risolvere i problemi comuni in più tabelle, ad esempio opportunità, offerta, ordine o fattura in Microsoft Dynamics 365 Sales.
Problema 1- Nel modulo di contesto può essere visualizzato nel selettore di modulo
Il modulo Nel contesto viene usato per visualizzare e personalizzare il pannello laterale in Deal Manager e nella nuova interfaccia per contatti, opportunità, lead e account.
Causa
Se nell'ambiente è presente una personalizzazione che imposta formActivationState su Active per queste tabelle, nell'elenco a discesa Modulo contesto viene visualizzato l'elenco a discesa del selettore del modulo e consente agli utenti di selezionare questo modulo per visualizzare i dettagli del record.
Risoluzione
Se l'aspetto di In Context Form causa confusione, è possibile disattivare il Modulo nel contesto, come illustrato nello screenshot seguente.
Problema 2 - Errore o comportamento imprevisto durante l'uso delle tabelle
Sintomi
Durante l'uso di tabelle (ad esempio opportunità, offerta, ordine, fattura, prodotto offerta e ordine), si osserva un comportamento imprevisto o un errore in Dynamics 365 for Sales. Di seguito sono riportati alcuni degli errori che possono verificarsi durante l'utilizzo delle opportunità e possono essere applicati ad altre tabelle:
- "Extended Amount is wrong after revising quote"- this error might occur due to a custom plug-in.
- "Errore durante il salvataggio dell'opportunità" - Questo errore potrebbe verificarsi a causa di JavaScript personalizzato.
- "Errore durante la chiusura dell'opportunità" - Questo errore potrebbe verificarsi a causa di un flusso di lavoro personalizzato.
Causa
Questi problemi possono verificarsi a causa di una personalizzazione non corretta dell'applicazione.
Risoluzione
È necessario verificare le personalizzazioni non corretta e risolverle. Eseguire i metodi di verifica seguenti per identificare la personalizzazione che causa il problema e quindi risolvere:
- Disattivare un plug-in personalizzato
- Disabilitare JavaScript personalizzato
- Disattivare un processo di flusso di lavoro personalizzato
Disattivare un plug-in personalizzato
Vai a Impostazioni>Personalizzazione>Personalizza il sistema.
Selezionare Sdk Message Processing Steps (Passaggi per l'elaborazione dei messaggi sdk).
Viene visualizzato un elenco dei passaggi di elaborazione dei messaggi SDK disponibili.
Selezionare l'icona Filtro , selezionare la colonna Primary Object Type Code (Sdk Message Filter) e quindi selezionare la tabella per cui si verifica l'errore.
Selezionare i passaggi di elaborazione dei messaggi SDK provenienti dalle soluzioni di proprietà dell'utente.
Note
Per visualizzare i passaggi di elaborazione dei messaggi DELL'SDK personalizzati:
Passare a Impostazioni>Soluzioni e quindi aprire la soluzione.
Selezionare SDK Message Processing Steps (Passaggi di elaborazione messaggi SDK). Verificare che i valori siano selezionati nel modo seguente: Tipo di componente al passaggio di elaborazione messaggi SDK e Visualizza a tutti.
Seleziona Disattiva.
Pubblicare le personalizzazioni.
Verificare il problema e, in caso contrario, il problema riguarda i passaggi di elaborazione dei messaggi dell'SDK personalizzati. Risolvere il problema.
Note
Se si verifica il problema, attivare i passaggi di elaborazione dei messaggi dell'SDK disattivati ora e provare a disabilitare JavaScript personalizzato o disattivare un processo del flusso di lavoro personalizzato.
Disabilitare JavaScript personalizzato
Aprire l'editor di moduli della tabella in cui si verifica l'errore. In questo esempio si seleziona la tabella come Opportunità e il modulo predefinito della soluzione.
Selezionare Proprietà modulo nell'editor di moduli.
Verrà visualizzata la finestra di dialogo Proprietà modulo.
Nella scheda Eventi selezionare il controllo OnLoad dall'elenco a discesa Eventi.
Scegliere i file JavaScript personalizzati provenienti dalla soluzione di proprietà dell'utente.
Note
Per visualizzare javaScript personalizzato:
- Passare a Impostazioni>Soluzioni e quindi aprire la soluzione.
- Selezionare WebResources. Verificare che i valori siano selezionati come: Tipo di componente in WebResources e Visualizza su tutti.
- Selezionare l'icona Filtro per abilitare le opzioni di filtro per le colonne. Selezionare Tipo e impostare il filtro come Script (JScript).
Seleziona Modifica In questo esempio è stato selezionato il file JavaScript personalizzato eg_opportunity da modificare.
Deselezionare l'opzione Abilitato e selezionare OK.
Pubblicare le personalizzazioni.
Verificare il problema e, in caso contrario, il problema riguarda javaScript personalizzato. Risolvere il problema.
Note
Se si verifica il problema, abilitare il codice JavaScript disabilitato ora e provare a Disattivare un plug-in personalizzato o Disattivare un processo di flusso di lavoro personalizzato.
Disattivare un processo di flusso di lavoro personalizzato
Vai a Impostazioni>Personalizzazione>Personalizza il sistema.
Selezionare Processi. Questi processi includono flusso di lavoro, processo aziendale e regola business.
Viene visualizzato un elenco dei processi disponibili.
Selezionare l'icona Filtro , selezionare la colonna Entità primaria e quindi selezionare la tabella per cui si verifica l'errore.
Scegliere i processi provenienti dalle soluzioni di proprietà dell'utente.
Note
Per visualizzare i processi personalizzati:
- Passare a Impostazioni>Soluzioni e quindi aprire la soluzione.
- Selezionare Processi. Verificare che i valori siano selezionati come: Tipo di componente in Processi e Visualizza a tutti.
Seleziona Disattiva.
Pubblicare le personalizzazioni.
Verificare il problema e, in caso contrario, il problema riguarda i processi personalizzati. Risolvere il problema.
Note
Se il problema si verifica, attivare i processi disattivati ora e provare a Disattivare un plug-in personalizzato o Disabilitare JavaScript personalizzato.
Problema 3 - Gestione personalizzata dei plug-in tramite una variabile condivisa
Sintomi
- Le operazioni di creazione e aggiornamento delle tabelle Opportunity, Quote, Order e Invoice attivano gli aggiornamenti nelle tabelle padre.
- Il recupero dei dettagli sulle tabelle Opportunità, Offerta, Ordine e Fattura attiva internamente il servizio Calcolo prezzi, che successivamente attiva plug-in personalizzati creati dai clienti.
Risoluzione
I plug-in personalizzati eseguono operazioni di creazione, aggiornamento e salvataggio nelle tabelle Opportunity, Quote, Order e Invoice. Le operazioni di creazione e aggiornamento in queste tabelle attivano internamente il servizio Calcolo prezzi, che aggiorna quindi i campi o gli attributi correlati al prezzo associati delle tabelle padre.
È possibile identificare o distinguere gli aggiornamenti nelle tabelle Opportunità, Offerta, Ordine o Fattura o Opportunità padre, Offerta, Ordine o Fattura tramite il servizio di calcolo dei prezzi interno o usando il proprio plug-in personalizzato. La variabile InternalSystemPriceCalculationEvent
condivisa booleana , accessibile tramite IPluginExecutionContext
, è disponibile all'interno del codice plug-in. Qualsiasi evento di creazione o aggiornamento elaborato tramite il servizio Calcolo prezzi imposta il valore della variabile InternalSystemPriceCalculationEvent
su true
. Il valore predefinito di InternalSystemPriceCalculationEvent
è false
. È possibile accedere a questa variabile dal codice plug-in personalizzato per controllare il flusso della logica di business esistente.
Note
Per eseguire operazioni plug-in personalizzate usando una variabile condivisa, assicurarsi che il servizio Di calcolo prezzi predefinito sia disabilitato.
Codice di esempio
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the tracing service
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
// Obtain the execution context from the service provider.
IPluginExecutionContext executionContext = (IPluginExecutionContext)
serviceProvider.GetService(typeof(IPluginExecutionContext))
bool isInternalSystemPriceCalculationEvent = false;
//Check existence of shared variable and fetch the value from executionContext
if (executionContext.ParentContext != null && executionContext.ParentContext.SharedVariables.ContainsKey("InternalSystemPriceCalculationEvent"))
{
isInternalSystemPriceCalculationEvent = (bool)executionContext.ParentContext.SharedVariables["InternalSystemPriceCalculationEvent"];
}
if (isInternalSystemPriceCalculationEvent)
{
//TO DO - Add or skip custom business logic
}
}