Übung – Benutzerdefinierte Funktionen
Sie sind Entwickler von Geschäftssystemen bei CRONUS International Ltd. Sie lernen, wie Sie Anpassungen für Business Central entwickeln und in AL programmieren, um Lösungen für Debitoren anzupassen. Sie möchten die Seite Customer Card anpassen, indem Sie eine Aktivität hinzufügen, mit der das Kreditlimit eines Debitoren basierend auf seiner vorherigen Verkaufshistorie angepasst oder das Limit auf Null zurückgesetzt wird, wenn keine Transaktionen stattgefunden haben.
Die folgenden Anforderungen müssen erfüllt sein:
Das Kreditlimit eines Debitors darf 50 Prozent seines Gesamtumsatzes der letzten 12 Monate nicht überschreiten.
Das Kreditlimit des Debitors muss immer auf die nächsten 10.000 gerundet werden.
Wenn das Kreditlimit während des Vorgangs gerundet wird, muss die Anwendung eine Benachrichtigung an den Benutzer senden.
Wenn sich das neue Kreditlimit nicht vom bisherigen unterscheidet, muss die Anwendung eine Benachrichtigung an den Benutzer senden.
Wenn für den Debitor keine Verkaufshistorie der letzten 12 Monate vorhanden ist, muss das Kreditlimit auf Null zurückgesetzt werden.
Die Funktion zum Festlegen des Kreditlimits muss für andere Objekte verfügbar sein.
Die Seite Customer Card muss eine Aktivität enthalten, die die Funktion aufruft.
Wenn die Funktion über die Seitenaktion aufgerufen und das Kreditlimit erhöht wird, muss die Funktion den Benutzer vor der Aktualisierung des Kreditlimits um eine entsprechende Bestätigung bitten.
Aufgaben
Erstellen Sie eine neue Erweiterung.
Erstellen Sie eine Tabellenerweiterung.
Erstellen Sie eine Seitenerweiterung.
Schritte
Starten Sie Visual Studio Code.
Erstellen Sie ein neues AL-Erweiterungsprojekt. Wählen Sie Anzeigen > Befehlspalette... (STRG+UMSCHALT+P) aus.
Geben Sie AL: Go! in das Suchfeld ein, und wählen Sie dann den Befehl aus der Liste aus.
Akzeptieren Sie den vorgeschlagenen Pfad, ändern Sie den Namen jedoch in CreditLimit (oder geben Sie einen anderen Pfad ein).
Wählen Sie die aktuelle Zielplattform aus.
Wählen Sie als Entwicklungsendpunkt Microsoft-Cloud-Sandbox aus.
Laden Sie die Anwendungssymbole herunter. Wählen Sie Anzeigen > Befehlspalette... (STRG+UMSCHALT+P) aus.
Geben Sie AL: Symbole herunterladen in das Suchfeld ein, und wählen Sie dann den Befehl aus der Liste aus.
Geben Sie auf Anfrage Ihre organisatorischen Anmeldeinformationen an (Microsoft 365-Konto oder Microsoft Entra ID-Konto).
Öffnen Sie die Datei app.json, und ändern Sie die Einstellung Name in Kreditlimit. Ändern Sie die Einstellung Herausgeber in Cronus International Ltd.
Ändern Sie idRanges von 50400 in 50450.
Entfernen Sie die Datei „HelloWorld.al“.
Fügen Sie einen Ordner mit dem Namen src hinzu.
Erstellen Sie im src-Ordner eine neue Datei mit dem Namen Customer.TableExt.al.
Erstellen Sie eine neue Tabellenerweiterung in dieser Datei, indem Sie Codeausschnitte verwenden. Geben Sie
ttableextein, und drücken Sie dann die TAB-Taste.Ändern Sie die ID in 50400 und Name in Customer.
Legen Sie den Parameter Extends auf Customer fest, um die Customer-Tabelle zu erweitern.
Fügen Sie der Tabellenerweiterung Debitor ein globales Verfahren hinzu, und geben Sie ihm den Namen UpdateCreditLimit.
Ändern Sie die Funktion
UpdateCreditLimit, sodass sie einen Parameter namens NewCreditLimit vom Typ „Dezimal“ als Verweis erhält.Fügen Sie eine weitere nicht lokale Prozedur mit dem Namen CalculateCreditLimit hinzu, die einen Wert vom Typ „Dezimal“ zurückgibt.
Erstellen Sie eine neue Datei im src-Ordner mit dem Namen CustomerCard.PageExt.al.
Erstellen Sie eine neue Seitenerweiterung in dieser Datei, indem Sie Codeausschnitte verwenden. Geben Sie
tpageextein, und drücken Sie dann die TAB-Taste.Ändern Sie die ID in 50130 und Name in CustomerCard.
Legen Sie den Parameter Extends auf Customer Card fest.
Erstellen Sie ein lokales Verfahren, und geben Sie ihm den Namen CallUpdateCreditLimit.
Fügen Sie der Aktivitätsgruppe „Funktion“ des Aktivitätscontainers ActionItems eine Aktivität hinzu. Geben Sie im Abschnitt Actions
addAfter("F&unctions)ein.Fügen Sie eine Aktivität mit dem Namen UpdateCreditLimit im Abschnitt addafter hinzu, und legen Sie dann Caption und Tooltip-Eigenschaften auf Update Credit Limit fest. Setzen Sie die Eigenschaft Image auf CalculateCost.
Rufen Sie im Trigger
OnActiondie AktionCallUpdateCreditLimitauf.Ändern Sie die Funktion
CalculateCreditLimitder Tabellenerweiterung aus. Fügen Sie eine lokale Variable mit dem Namen Debitor vom Typ „Debitor erfassen“ hinzu.Fügen Sie der Funktion
CalculateCreditLimitCode hinzu, der das Feld Sales (LCY) für die letzten 12 Monate berechnet.Cust := Rec; Cust.SetRange("Date Filter",CalcDate('<-12M>',WorkDate()),WorkDate()); Cust.CalcFields("Sales (LCY)","Balance (LCY)"); exit(Round(Cust."Sales (LCY)" * 0.5));Eine der Anforderungen ist folgende: Das Kreditlimit eines Debitors darf 50 Prozent seines Gesamtumsatzes der letzten 12 Monate nicht überschreiten.
Fügen Sie der Funktion
UpdateCreditLimitCode hinzu, um den formalen Parameter NewCreditLimit auf die nächsten 10.000 zu runden, den Wert von NewCreditLimit im Feld Credit Limit (LCY) zu überprüfen und den Datensatz zu ändern.NewCreditLimit := Round(NewCreditLimit, 10000); Rec.Validate("Credit Limit (LCY)", NewCreditLimit); Rec.Modify();Eine der Anforderungen ist folgende ist: Das Kreditlimit des Debitors muss immer auf die nächsten 10.000 gerundet werden.
Fügen Sie der Seitenerweiterung drei globale Beschriftungen mit folgendem Text hinzu:
Bestätigungsmeldung
Informationen zum gerundeten Kreditlimit
Informationen zu einem aktuellen Kreditlimit
Name ConstValue AreYouSureQst Möchten Sie %1 wirklich auf %2 setzen? CreditLimitRoundedTxt Das Kreditlimit wurde auf %1 gerundet, um die Unternehmensrichtlinien zu erfüllen. CreditLimitUpToDateTxt Das Kreditlimit ist aktuell. Fügen Sie der Funktion
CallUpdateCreditLimitzwei lokale Dezimalvariablen, jeweils vom Typ „Dezimal“ hinzu, und geben Sie ihnen die Namen CreditLimitCalculated und CreditLimitActual.Fügen Sie der Funktion
CallUpdateCreditLimitfolgenden Code hinzu: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);Wenn sich das neue Kreditlimit nicht vom bisherigen unterscheidet, muss die Anwendung eine Benachrichtigung an den Benutzer senden.
Für die Debitoren-Tabellenerweiterung wird im folgenden Codeblock dargestellt:
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; }Für die CustomerCard-Tabellenerweiterung wird im folgenden Codeblock dargestellt:
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; }Wenn für den Debitor keine Verkaufshistorie der letzten 12 Monate vorhanden ist, muss das Kreditlimit auf Null zurückgesetzt werden.
Öffnen Sie die Datei launch.json im Ordner .vscode. Legen Sie die Einstellung startupObjectId auf 22 und startupObjectType auf Page fest.
Veröffentlichen Sie Ihre Erweiterung in der Sandbox. Wählen Sie Anzeigen > Befehlspalette... (STRG+UMSCHALT+P) aus.
Geben Sie AL: Publish in das Suchfeld ein (oder drücken Sie die F5-Taste), und wählen Sie dann den Befehl aus der Liste aus.
Stellen Sie sicher, dass die Microsoft Dynamics 365 Business Central-Anwendung gestartet und die Seite Debitorenliste angezeigt wird.
Öffnen Sie eine zufällige Customer Card. Auf der Seite Customer Card finden Sie im Aktionsmenü nach Funktionen die Aktion Update Credit Limit.
Testen Sie die Aktion.