Dela via


Felsöka vanliga problem med flera tabeller

Den här artikeln hjälper dig att felsöka och lösa vanliga problem i flera tabeller som affärsmöjlighet, offert, order eller faktura i Microsoft Dynamics 365 Sales.

Problem 1 – I kontextformulär kan visas i formulärväljaren

I kontextformuläret används för att visa och anpassa sidopanelen i Deal Manager och i det nya gränssnittet för kontakter, affärsmöjligheter, leads och konton.

Orsak

Om din miljö har någon anpassning som anger formActivationState till Aktiv för dessa tabeller, visas formuläret I kontext i listrutan formulärväljare och låter användarna välja det här formuläret för att visa postinformationen.

Listrutan Formulärväljare som visar alternativet I kontextformulär.

Åtgärd

Om utseendet på I kontextformulär leder till förvirring kan du inaktivera I kontextformulär som du ser i följande skärmbild.

I kontextformulär med alternativet att inaktivera.

Problem 2 – Fel eller oväntat beteende när du arbetar med tabeller

Symptom

När du arbetar med tabeller (till exempel affärsmöjligheter, offert, order, faktura, offertprodukt och orderprodukt) ser du ett oväntat beteende eller ett fel i Dynamics 365 for Sales. Följande är några av de fel som kan uppstå när du arbetar med affärsmöjligheter, och de kan gälla för andra tabeller:

  • "Utökad mängd är fel efter att offerten har ändrats" – det här felet kan inträffa på grund av ett anpassat plugin-program.
  • "Fel vid sparande av affärsmöjlighet" – det här felet kan inträffa på grund av anpassad JavaScript.
  • "Fel vid stängning av affärsmöjlighet" – det här felet kan inträffa på grund av ett anpassat arbetsflöde.

Orsak

Dessa problem kan uppstå på grund av felaktig anpassning av programmet.

Åtgärd

Du måste verifiera de felaktiga anpassningarna och lösa dem. Utför följande verifieringsmetoder för att identifiera vilken anpassning som orsakar problemet och lös sedan:

Inaktivera ett anpassat plugin-program

  1. Gå till Inställningar>Anpassningar>Anpassa systemet.

  2. Välj Steg för Sdk-meddelandebearbetning.

    En lista över tillgängliga SDK-meddelandebearbetningssteg visas.

  3. Välj filterikonen, välj kolumnen Primär objekttypkod (Sdk-meddelandefilter) och välj sedan den tabell som felet inträffar för.

    Gå till den anpassade plugin-listan för att välja den tabell som felet inträffar för.

  4. Välj de SDK-meddelandebearbetningssteg som kommer från de lösningar som ägs av dig.

    Kommentar

    Så här visar du dina anpassade SDK-meddelandebearbetningssteg:

    1. Gå till Inställningslösningar> och öppna sedan lösningen.

    2. Välj steg för SDK-meddelandebearbetning. Kontrollera att värdena är markerade på följande sätt: Komponenttyp till SDK-steg för meddelandebearbetning och Visa till alla.

  5. Välj inaktivera.

  6. Publicera anpassningarna.

    Välj och inaktivera ohanterade anpassade plugin-program.

  7. Kontrollera problemet och om det inte inträffar är problemet med de anpassade SDK-meddelandebearbetningsstegen. Lös problemet.

Kommentar

Om problemet uppstår aktiverar du de SDK-steg för meddelandebearbetning som du inaktiverade nu och försöker inaktivera anpassad JavaScript eller inaktivera en anpassad arbetsflödesprocess.

Inaktivera anpassad JavaScript

  1. Öppna formulärredigeraren för tabellen där felet inträffar. I det här exemplet väljer vi tabellen som Affärsmöjligheter och standardlösningsformuläret.

    Öppna formulärredigeraren.

  2. Välj Formuläregenskaper i formulärredigeraren.

    Välj Formuläregenskaper i formulärredigeraren.

    Dialogrutan Formuläregenskaper öppnas.

  3. På fliken Händelser väljer du kontrollen OnLoad i listrutan Händelser .

    Välj kontrollen OnLoad i listrutan Händelser.

  4. Välj de anpassade JavaScript-filer som kommer från lösningen som ägs av dig.

    Kommentar

    Så här visar du ditt anpassade JavaScript:

    1. Gå till Inställningslösningar> och öppna sedan lösningen.
    2. Välj WebResources. Kontrollera att värdena är markerade som: Komponenttyp till WebResources och Visa till alla.
    3. Välj filterikonen för att aktivera filteralternativ för kolumner. Välj Typ och ange filtret som Skript (JScript).

    Välj Typ och ange filtret som Skript (JScript).

  5. Välj Redigera. I det här exemplet har vi valt den anpassade JavaScript-filen eg_opportunity att redigera.

    Indatainformation i dialogrutan Egenskaper för hanterare.

  6. Avmarkera alternativet Aktiverat och välj OK.

    Avmarkera alternativet Aktiverad i dialogrutan Egenskaper för hanterare.

  7. Publicera anpassningarna.

  8. Kontrollera problemet och om det inte inträffar är problemet med det anpassade JavaScript. Lös problemet.

Kommentar

Om problemet uppstår aktiverar du det JavaScript som du har inaktiverat nu och försöker inaktivera ett anpassat plugin-program eller Inaktivera en anpassad arbetsflödesprocess.

Inaktivera en anpassad arbetsflödesprocess

  1. Gå till Inställningar>Anpassningar>Anpassa systemet.

  2. Välj Processer. Dessa processer omfattar arbetsflöde, affärsprocessflöde och affärsregel.

    En lista över tillgängliga processer visas.

  3. Välj filterikonen, välj kolumnen Primär entitet och välj sedan den tabell som felet inträffar för.

    Gå till listan över anpassade processarbetsflöden för att välja den tabell som felet inträffar för.

  4. Välj de processer som kommer från de lösningar som ägs av dig.

    Kommentar

    Så här visar du dina anpassade processer:

    1. Gå till Inställningslösningar> och öppna sedan lösningen.
    2. Välj Processer. Kontrollera att värdena är markerade som: Komponenttyp till Processer och Visa till alla.
  5. Välj inaktivera.

  6. Publicera anpassningarna.

    Välj och inaktivera ohanterade processarbetsflöden.

  7. Kontrollera problemet och om det inte inträffar är problemet med de anpassade processerna. Lös problemet.

Kommentar

Om problemet uppstår aktiverar du de processer som du inaktiverade nu och försöker inaktivera ett anpassat plugin-program eller Inaktivera anpassat JavaScript.

Problem 3 – Anpassad plugin-hantering med hjälp av en delad variabel

Symptom

  • Skapa och uppdatera åtgärder för tabellerna Affärsmöjlighet, Offert, Order och Faktura utlöser uppdateringar på sina överordnade tabeller.
  • När du hämtar information om tabellerna Affärsmöjlighet, Offert, Order och Faktura utlöses tjänsten Prisberäkning, som därefter utlöser anpassade plugin-program som skapats av kunder.

Åtgärd

Anpassade plugin-program kör åtgärder för att skapa, uppdatera och spara i tabellerna Affärsmöjlighet, Offert, Order och Faktura. Åtgärderna för att skapa och uppdatera dessa tabeller utlöser internt tjänsten Prisberäkning, som sedan uppdaterar de associerade prisrelaterade fälten eller attributen för sina överordnade tabeller.

Du kan identifiera eller särskilja eventuella uppdateringar i tabellerna Affärsmöjlighet, Offert, Order eller Faktura eller överordnade tabellerna Affärsmöjlighet, Offert, Order eller Faktura med hjälp av den interna tjänsten Prisberäkning eller med hjälp av ditt eget anpassade plugin-program. Den booleska delade variabeln InternalSystemPriceCalculationEvent, som är tillgänglig via IPluginExecutionContext, är tillgänglig i plugin-koden. Alla skapande- eller uppdateringshändelser som bearbetas med hjälp av tjänsten Prisberäkning anger värdet för variabeln InternalSystemPriceCalculationEvent till true. Standardvärdet InternalSystemPriceCalculationEvent för är false. Du kan komma åt den här variabeln från din anpassade plugin-kod för att styra flödet för din befintliga affärslogik.

Kommentar

Om du vill utföra anpassade plugin-åtgärder med hjälp av en delad variabel kontrollerar du att den färdiga prisberäkningstjänsten är inaktiverad.

Exempelkod

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
    }

}