Résoudre les problèmes courants liés à plusieurs tables
Cet article vous aide à résoudre et résoudre les problèmes courants sur plusieurs tables telles que l’opportunité, le devis, la commande ou la facture dans Microsoft Dynamics 365 Sales.
Problème 1 : dans le formulaire contextuel peut apparaître dans le sélecteur de formulaire
Le formulaire contextuel est utilisé pour afficher et personnaliser le panneau latéral dans le gestionnaire de transaction, et dans la nouvelle interface pour les contacts, les opportunités, les prospects et les comptes.
Cause
Si votre environnement a une personnalisation qui définit formActivationState sur Active pour ces tables, le formulaire de contexte apparaît dans la liste déroulante sélecteur de formulaire et permet aux utilisateurs de sélectionner ce formulaire pour afficher les détails de l’enregistrement.
Résolution
Si l’apparence de In Context Form entraîne une confusion, vous pouvez désactiver le formulaire de contexte comme illustré dans la capture d’écran suivante.
Problème 2 - Erreur ou comportement inattendu lors de l’utilisation des tables
Symptômes
Lorsque vous travaillez sur des tables (telles que les opportunités, devis, commande, facture, produit de devis et produit de commande), vous observez un comportement inattendu ou une erreur dans Dynamics 365 for Sales. Voici quelques-unes des erreurs que vous pouvez rencontrer lors de l’utilisation des opportunités, et elles peuvent s’appliquer à d’autres tables :
- « Montant étendu est incorrect après la révision d’un devis » : cette erreur peut se produire en raison d’un plug-in personnalisé.
- « Erreur lors de l’enregistrement de l’opportunité » : cette erreur peut se produire en raison de JavaScript personnalisé.
- « Erreur lors de la fermeture de l’opportunité » : cette erreur peut se produire en raison d’un flux de travail personnalisé.
Cause
Ces problèmes peuvent se produire en raison d’une personnalisation incorrecte de l’application.
Résolution
Vous devez vérifier les personnalisations incorrectes et les résoudre. Effectuez les méthodes de vérification suivantes pour identifier la personnalisation à l’origine du problème, puis résolvez :
- Désactiver un plug-in personnalisé
- Désactiver javaScript personnalisé
- Désactiver un processus de flux de travail personnalisé
Désactiver un plug-in personnalisé
Accédez à Paramètres>Personnalisation>Personnaliser le système.
Sélectionnez Étapes de traitement des messages du Kit de développement logiciel (SDK).
Une liste des étapes de traitement des messages du Kit de développement logiciel (SDK) disponibles s’affiche.
Sélectionnez l’icône Filtrer , sélectionnez le code de type d’objet principal de la colonne (Filtre de messages sdk), puis sélectionnez la table pour laquelle l’erreur se produit.
Sélectionnez les étapes de traitement des messages du Kit de développement logiciel (SDK) provenant des solutions détenues par vous.
Note
Pour afficher les étapes de traitement des messages de votre Kit de développement logiciel (SDK) personnalisé :
Accédez à Solutions de paramètres>, puis ouvrez la solution.
Sélectionnez Étapes de traitement des messages du KIT SDK. Vérifiez que les valeurs sont sélectionnées comme suit : Type de composant à l’étape de traitement des messages du Kit de développement logiciel (SDK) et Afficher tout.
Sélectionnez Désactiver.
Publier les personnalisations
Vérifiez le problème et, s’il ne se produit pas, il s’agit des étapes de traitement des messages du KIT de développement logiciel (SDK) personnalisées. Résolvez le problème.
Note
Si le problème se produit, activez les étapes de traitement des messages du SDK que vous avez désactivées maintenant et essayez de désactiver javaScript personnalisé ou de désactiver un processus de flux de travail personnalisé.
Désactiver javaScript personnalisé
Ouvrez l’éditeur de formulaire de la table dans laquelle l’erreur se produit. Dans cet exemple, nous sélectionnons le tableau comme Opportunités et le formulaire de solution par défaut.
Sélectionnez Propriétés du formulaire dans l’éditeur de formulaire.
La boîte de dialogue Propriétés du formulaire s’ouvre.
Sous l’onglet Événements , sélectionnez le contrôle OnLoad dans la liste déroulante Événements .
Choisissez les fichiers JavaScript personnalisés provenant de la solution détenue par vous.
Note
Pour afficher votre code JavaScript personnalisé :
- Accédez à Solutions de paramètres>, puis ouvrez la solution.
- Sélectionnez WebResources. Vérifiez que les valeurs sont sélectionnées comme suit : Type de composant vers WebResources et Affichage à tous.
- Sélectionnez l’icône Filtrer pour activer les options de filtre pour les colonnes. Sélectionnez Type et définissez le filtre en tant que script (JScript).
Sélectionnez Modifier. Dans cet exemple, nous avons sélectionné le fichier JavaScript personnalisé eg_opportunity à modifier.
Désactivez l’option Activé et sélectionnez OK.
Publier les personnalisations
Vérifiez le problème et, s’il ne se produit pas, il s’agit du code JavaScript personnalisé. Résolvez le problème.
Note
Si le problème se produit, activez le code JavaScript que vous avez désactivé maintenant et essayez de désactiver un plug-in personnalisé ou de désactiver un processus de flux de travail personnalisé.
Désactiver un processus de flux de travail personnalisé
Accédez à Paramètres>Personnalisation>Personnaliser le système.
Cliquez sur Processus. Ces processus incluent flux de travail, flux de processus métier et règle métier.
Une liste de processus disponibles s’affiche.
Sélectionnez l’icône Filtrer, sélectionnez l’entité principale de colonne, puis sélectionnez la table pour laquelle l’erreur se produit.
Choisissez les processus qui proviennent des solutions détenues par vous.
Note
Pour afficher vos processus personnalisés :
- Accédez à Solutions de paramètres>, puis ouvrez la solution.
- Cliquez sur Processus. Vérifiez que les valeurs sont sélectionnées en tant que : Type de composant dans processus et Affichage à tous.
Sélectionnez Désactiver.
Publier les personnalisations
Vérifiez le problème et, s’il ne se produit pas, il s’agit des processus personnalisés. Résolvez le problème.
Note
Si le problème se produit, activez les processus que vous avez désactivés maintenant et essayez de désactiver un plug-in personnalisé ou désactiver un code JavaScript personnalisé.
Problème 3 - Gestion personnalisée des plug-ins à l’aide d’une variable partagée
Symptômes
- Créer et mettre à jour des opérations sur les tables Opportunité, Devis, Commande et Facture déclenchent des mises à jour sur leurs tables parentes.
- La récupération de détails sur les tables Opportunité, Devis, Commande et Facture déclenche en interne le service Calcul du prix, qui déclenche par la suite des plug-ins personnalisés créés par les clients.
Résolution
Les plug-ins personnalisés exécutent des opérations de création, de mise à jour et d’enregistrement sur les tables Opportunité, Devis, Commande et Facture. Les opérations de création et de mise à jour sur ces tables déclenchent en interne le service Calcul des prix, qui met ensuite à jour les champs ou attributs associés aux prix de leurs tables parentes.
Vous pouvez identifier ou différencier les mises à jour dans les tables Opportunité, Devis, Commande ou Facture ou dans les tables parentes Opportunité, Devis, Commande ou Facture en utilisant le service interne de calcul des prix ou en utilisant votre propre plug-in personnalisé. La variable partagée booléenne InternalSystemPriceCalculationEvent
, qui est accessible par le biais de IPluginExecutionContext
, est disponible dans le code du plug-in. Tout événement de création ou de mise à jour traité à l’aide du service de calcul du prix définira la valeur de la variable InternalSystemPriceCalculationEvent
sur true
. La valeur par défaut de InternalSystemPriceCalculationEvent
est false
. Vous pouvez accéder à cette variable à partir de votre code de plug-in personnalisé pour contrôler le flux de votre logique métier existante.
Note
Pour effectuer des opérations de plug-in personnalisées à l’aide d’une variable partagée, assurez-vous que le service de calcul des prix prêt à l’emploi est désactivé.
Exemple de code
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
}
}