Esercizio - Funzioni personalizzate

Completato

Si ricopre il ruolo di sviluppatore di sistemi aziendali per CRONUS International Ltd. Si sta apprendendo come sviluppare personalizzazioni per Business Central e come programmare in AL per personalizzare le soluzioni per i clienti. Si desidera personalizzare la pagina Scheda cliente aggiungendo un'azione che adegui il limite di credito del cliente in base allo storico delle vendite precedenti del cliente stesso oppure lo azzeri se non vi sono state transazioni.

Sono stati indicati i seguenti requisiti:

  • Il limite di credito di un cliente non può superare il 50% dei ricavi totali delle vendite per il cliente negli ultimi 12 mesi.

  • Il limite di credito del cliente deve essere sempre arrotondato alle 10.000 unità.

  • Se il limite di credito viene arrotondato durante il processo, l'applicazione deve inviare una notifica all'utente.

  • Se il nuovo limite di credito non differisce dal precedente, l'applicazione deve inviare una notifica all'utente.

  • Se il cliente non ha uno storico delle vendite negli ultimi 12 mesi, il limite di credito deve essere azzerato.

  • La funzione che imposta il limite di credito deve essere disponibile per altri oggetti.

  • La pagina Scheda cliente deve includere un'azione che chiama la funzione.

  • Se la funzione viene chiamata dall'azione della pagina e il limite di credito viene aumentato, la funzione deve chiedere conferma all'utente prima di aggiornare il limite di credito.

Attività

  • Creazione di una nuova estensione.

  • Creazione di un'estensione di tabella.

  • Creazione di un'estensione di pagina.

Passaggi

  1. Avviare Visual Studio Code.

  2. Creare un nuovo progetto di estensione AL. Selezionare Visualizza > Riquadro comandi... (CTRL+MAIUSC+P).

  3. Immettere AL: Go! nella casella di ricerca, quindi selezionare il comando dall'elenco.

  4. Accettare il percorso suggerito, ma modificarne il nome in CreditLimit (o inserire un altro percorso).

  5. Selezionare la piattaforma di destinazione più recente.

  6. Selezionare Microsoft cloud sandbox come endpoint di sviluppo.

  7. Scaricare i simboli dell'applicazione. Selezionare Visualizza > Riquadro comandi... (CTRL+MAIUSC+P).

  8. Immettere AL: Download symbols nella casella di ricerca e quindi selezionare il comando dall'elenco.

  9. Se richiesto, fornire le credenziali dell'organizzazione (account Microsoft 365 o account Microsoft Entra ID).

  10. Aprire il file app.json e modificare l'impostazione nome in Limite credito. Modificare l'impostazione editore in Cronus International Ltd.

  11. Modificare idRanges da 50400 a 50450.

  12. Rimuovere il file HelloWorld.al.

  13. Aggiungere una cartella denominata src

  14. Nella cartella src creare un file denominato Customer.TableExt.al.

  15. Creare una nuova estensione di tabella in questo file usando frammenti di codice. Immettere ttableext, quindi premere TAB.

  16. Modificare l'ID in 50400 e il nome in Customer.

  17. Impostare il parametro Extends su Customer per estendere la tabella Customer.

  18. Aggiungere una procedura non locale all'estensione di tabella Customer e assegnare alla stessa il nome UpdateCreditLimit.

  19. Modificare la funzione UpdateCreditLimit in modo che riceva un parametro denominato NewCreditLimit, di tipo Decimal, per riferimento.

  20. Aggiungere un'altra procedura non locale denominata CalculateCreditLimit, che restituisce un valore di tipo Decimal.

  21. Creare un nuovo file nella cartella src denominato CustomerCard.PageExt.al.

  22. Creare una nuova estensione di pagina in questo file usando frammenti di codice. Immettere tpageext, quindi premere TAB.

  23. Modificare l'ID in 50130 e il nome in CustomerCard.

  24. Impostare il parametro Extends su Customer Card.

  25. Creare una procedura locale denominata CallUpdateCreditLimit.

  26. Aggiungere un'azione al gruppo di azioni Funzione del contenitore di azioni ActionItems. Nella sezione Actions immettere addAfter("F&unctions).

  27. Aggiungere un'azione con nome UpdateCreditLimit nella sezione addafter, quindi impostare la proprietà Caption e le proprietà Tooltip su Update Credit Limit. Impostare la proprietà Image su CalculateCost.

  28. Nel trigger OnAction chiamare l'azione CallUpdateCreditLimit.

  29. Modificare la funzione CalculateCreditLimit dell'estensione della tabella. Aggiungere una variabile locale con nome Customer di tipo Record Customer.

  30. Aggiungere codice alla funzione CalculateCreditLimit per calcolare il campo Sales (LCY) per gli ultimi 12 mesi.

    Cust := Rec;
    Cust.SetRange("Date Filter",CalcDate('<-12M>',WorkDate()),WorkDate());
    Cust.CalcFields("Sales (LCY)","Balance (LCY)");
    exit(Round(Cust."Sales (LCY)" * 0.5));
    

    Uno dei requisiti è che il limite di credito di un cliente non può superare il 50% dei ricavi totali delle vendite per il cliente negli ultimi 12 mesi.

  31. Aggiungere codice alla funzione UpdateCreditLimit per arrotondare il parametro formale NewCreditLimit alle 10.000 unità, per convalidare il valore di NewCreditLimit nel campo Credit Limit (LCY) e per modificare il record.

    NewCreditLimit := Round(NewCreditLimit, 10000);
    Rec.Validate("Credit Limit (LCY)", NewCreditLimit);
    Rec.Modify();
    

    Uno dei requisiti è che il limite di credito del cliente deve essere sempre arrotondato alle 10.000 unità.

  32. Aggiungere tre etichette globali all'estensione della pagina con il testo seguente:

    • Messaggio di conferma

    • Informazioni sul limite di credito arrotondato

    • Informazioni su un limite di credito aggiornato

    Nome ConstValue
    AreYouSureQst Impostare %1 su %2?
    CreditLimitRoundedTxt Il limite di credito è stato arrotondato a %1 per rispettare i criteri aziendali.
    CreditLimitUpToDateTxt Il limite di credito è aggiornato.
  33. Aggiungere due variabili decimali alla funzione CallUpdateCreditLimit e denominarle CreditLimitCalculated e CreditLimitActual, entrambe di tipo Decimal.

  34. Aggiungere il codice seguente alla funzione CallUpdateCreditLimit:

    CreditLimitCalculated := Rec.CalculateCreditLimit();
    if CreditLimitCalculated = Rec."Credit Limit (LCY)" then begin
        Message(CreditLimitUpToDateTxt);
        exit;
    end;
    
    if GuiAllowed() then
        if not Confirm(AreYouSureQst, false, FieldCaption("Credit Limit (LCY)"),CreditLimitCalculated) then
            exit;
    
    CreditLimitActual := CreditLimitCalculated;
    Rec.UpdateCreditLimit(CreditLimitActual);
    if CreditLimitActual <> CreditLimitCalculated then
        Message(CreditLimitROundedTxt, CreditLimitActual);
    

    Se il nuovo limite di credito non differisce dal precedente, l'applicazione deve inviare una notifica all'utente.

  35. L'estensione della tabella Customer ora è simile al seguente blocco di codice:

    tableextension 50400 Customer extends Customer
    {
        procedure UpdateCreditLimit(var NewCreditLimit: Decimal)
        begin
            NewCreditLimit := Round(NewCreditLimit, 10000);
            Rec.Validate("Credit Limit (LCY)", NewCreditLimit);
            Rec.Modify();
        end;
    
        procedure CalculateCreditLimit(): Decimal
        var
            Customer: Record Customer;
        begin
            Customer := Rec;
            Customer.SetRange("Date Filter", CalcDate('<-12M>', WorkDate()), WorkDate());
            Customer.CalcFields("Sales (LCY)", "Balance (LCY)");
            exit(Round(Customer."Sales (LCY)" * 0.5));
        end;
    }
    
  36. L'estensione della pagina CustomerCard ora è simile al seguente blocco di codice:

    pageextension 50400 CustomerCard extends "Customer Card"
    {
        layout
        {
            // Add changes to page layout here
        }
    
        actions
        {
            // Add changes to page actions here
            addafter("F&unctions")
            {
                action(UpdateCreditLimit)
                {
                    ApplicationArea = All;
                    Caption = 'Update Credit Limit';
                    Image = CalculateCost;
                    ToolTip = 'Update Credit Limit';
    
                    trigger OnAction()
                    begin
                        CallUpdateCreditLimit();
                    end;
                }
            }
        }
        var
            AreYouSureQst: Label 'Are you sure that you want to set the %1 to %2?',  Comment = '%1 is Credit Limit caption and %2 is the new Credit Limit value.' ;
            CreditLimitRoundedTxt: Label 'The credit limit was rounded to %1 to comply with company policies.',  Comment = '%1 is new Credit Limit value';
            CreditLimitUpToDateTxt: Label 'The credit limit is up to date.';
    
        local procedure CallUpdateCreditLimit()
        var
            CreditLimitCalculated, CreditLimitActual : Decimal;
        begin
            CreditLimitCalculated := Rec.CalculateCreditLimit();
            if CreditLimitCalculated = Rec."Credit Limit (LCY)" then begin
                Message(CreditLimitUpToDateTxt);
                exit;
            end;
    
            if GuiAllowed() then
                if not Confirm(AreYouSureQst, false, Rec.FieldCaption("Credit Limit (LCY)"), CreditLimitCalculated) then
                    exit;
    
            CreditLimitActual := CreditLimitCalculated;
            Rec.UpdateCreditLimit(CreditLimitActual);
            if CreditLimitActual <> CreditLimitCalculated then
                Message(CreditLimitROundedTxt, CreditLimitActual);
        end;
    }
    

    Se il cliente non ha uno storico delle vendite negli ultimi 12 mesi, il limite di credito deve essere azzerato.

  37. Aprire il file launch.json nella cartella .vscode. Impostare startupObjectId su 22 e startupObjectType su Page.

  38. Pubblicare l'estensione nella sandbox. Selezionare Visualizza > Riquadro comandi... (CTRL+MAIUSC+P).

  39. Immettere AL: Publish nella casella di ricerca (o premere F5) e selezionare il comando dall'elenco.

  40. Verificare che l'applicazione Microsoft Dynamics 365 Business Central si avvii con la pagina Lista clienti visualizzata.

  41. Aprire una scheda cliente casuale. Nella pagina Customer Card trovare l'azione Update Credit Limit nel menu delle azioni, dopo Funzioni.

  42. Testare l'azione.