[AEM Forms]{class="badge positive" title="Gilt für AEM Forms)."}
Beispiele für die Entwicklung und Verwendung benutzerdefinierter Funktionen
Der Artikel enthält die detaillierten Beispiele für benutzerdefinierte Funktionen für ein adaptives Formular, das auf Kernkomponenten basiert, und bietet wertvolle Einblicke in ihre effektive Implementierung in verschiedenen Szenarien. Benutzerdefinierte Funktionen werden im Regeleditor einer AEM Forms verwendet und ermöglichen es Entwickelnden, die Logik zu definieren und zu steuern, die das Formularverhalten steuert.
In diesem Artikel werden verschiedene Implementierungen benutzerdefinierter Funktionen untersucht und gezeigt, wie sie verwendet werden können, um Formulare an spezifische Anforderungen anzupassen und die allgemeine Funktionalität zu verbessern.
Füllen der Dropdown-Listenoptionen mit benutzerdefinierten Funktionen
Der Regeleditor in den Kernkomponenten unterstützt die Eigenschaft Optionen festlegen nicht, um Dropdown-Listenoptionen zur Laufzeit dynamisch zu füllen. Sie können jedoch Dropdown-Listenoptionen mit benutzerdefinierten Funktionen füllen, mit denen Sie Optionen basierend auf einer bestimmten Logik abrufen können. Benutzerdefinierte Funktionen bieten mehr Flexibilität und Kontrolle darüber, wie und wann die Dropdown-Optionen ausgefüllt werden, und verbessern das Benutzererlebnis.
Um die Dropdown-Listenoptionen mit einer benutzerdefinierten Funktion zu füllen, fügen Sie den folgenden Code hinzu, wie im Abschnitt create-custom-function beschrieben:
/**
* @name setEnums
* @returns {string[]}
**/
function setEnums() {
return ["0","1","2","3","4","5","6"];
}
/**
* @name setEnumNames
* @returns {string[]}
**/
function setEnumNames() {
return ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
}
Im obigen Code wird setEnums verwendet, um die enum-Eigenschaft festzulegen, und setEnumNames wird verwendet, um die enumNames-Eigenschaft von Dropdown festzulegen.
Erstellen wir eine Regel für die Schaltfläche Next , die den Wert der Dropdown-Listenoption festlegt, wenn der Benutzer auf die Schaltfläche Next klickt:
Anhand der unten stehenden Abbildung können Sie sehen, wo die Optionen der Dropdown-Liste eingestellt sind, wenn Sie auf die Schaltfläche Anzeigen klicken:
Anzeigen eines Bereichs mithilfe der SetProperty
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen mithilfe eines Contact Us Formulars Felder und globale Objekte verwenden.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um das Formularfeld auf Required festzulegen.
/**
* enablePanel
* @name enablePanel
* @param {object} field1
* @param {object} field2
* @param {scope} globals
*/
function enablePanel(field1,field2, globals)
{
if(globals.functions.validate(field1).length === 0)
{
globals.functions.setProperty(field2, {visible: true});
}
}
- Sie können die Feldeigenschaften mit den verfügbaren Eigenschaften in
[form-path]/jcr:content/guideContainer.model.jsonkonfigurieren. - Änderungen am Formular, die mit der Methode
setPropertydes Globals-Objekts vorgenommen werden, sind asynchron und werden bei der Ausführung der benutzerdefinierten Funktion nicht berücksichtigt.
In diesem Beispiel wird das Bedienfeld personaldetails durch Klicken auf die Schaltfläche überprüft. Wenn im Bedienfeld keine Fehler erkannt werden, wird ein weiteres Bedienfeld, das Bedienfeld feedback, beim Klicken auf die Schaltfläche angezeigt.
Erstellen wir eine Regel für die Schaltfläche Next, die das Bedienfeld personaldetails validiert und das Bedienfeld feedback sichtbar macht, wenn Benutzende auf die Schaltfläche Next klicken.
In der folgenden Abbildung sehen Sie, wie das Bedienfeld personaldetails beim Klicken auf die Schaltfläche Next validiert wird. Falls alle Felder innerhalb der personaldetails validiert werden, wird das Bedienfeld feedback angezeigt.
Wenn Fehler in den Feldern des Bedienfelds personaldetails vorhanden sind, werden sie beim Klicken auf die Schaltfläche Next auf Feldebene angezeigt und das Bedienfeld feedback bleibt unsichtbar.
Überprüfen des Felds
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen Felder und globale Objekte verwenden, um das Feld mithilfe eines Contact Us Formulars zu validieren.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um das Feld zu validieren.
/**
* validateField
* @name validateField
* @param {object} field
* @param {scope} globals
*/
function validateField(field,globals)
{
globals.functions.validate(field);
}
validate() kein Argument übergeben wird, wird das Formular validiert.In diesem Beispiel wird ein benutzerdefiniertes Überprüfungsmuster auf das Feld contact angewendet. Benutzende müssen eine Telefonnummer eingeben, die mit 10 gefolgt von 8 Ziffern beginnt. Wenn Benutzende eine Telefonnummer eingeben, die nicht mit 10 beginnt oder nicht genau 8 Ziffern enthält, wird beim Klicken auf die Schaltfläche eine Validierungsfehlermeldung angezeigt:
Der nächste Schritt besteht darin, eine Regel für die Schaltfläche Next zu erstellen, die das Feld contact beim Klicken auf die Schaltfläche validiert.
Beziehen Sie sich auf die folgende Abbildung, die zeigt, dass eine Fehlermeldung auf Feldebene angezeigt wird, wenn Benutzende eine Telefonnummer eingeben, die nicht mit 10 beginnt:
Wenn Benutzende eine gültige Telefonnummer eingeben und alle Felder im Bedienfeld personaldetails validiert worden sind, wird das Bedienfeld feedback auf dem Bildschirm angezeigt:
Zurücksetzen eines Bedienfelds
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen Felder und globale Objekte verwenden, um das Feld mithilfe eines Contact Us Formulars zurückzusetzen.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um das Bedienfeld zurückzusetzen.
/**
* resetField
* @name resetField
* @param {string} input1
* @param {object} field
* @param {scope} globals
*/
function resetField(field,globals)
{
globals.functions.reset(field);
}
reset() kein Argument übergeben wird, wird das Formular validiert.In diesem Beispiel wird das Bedienfeld personaldetails beim Klicken auf die Schaltfläche Clear zurückgesetzt. Als Nächstes erstellen Sie eine Regel für die Schaltfläche Clear, die das Bedienfeld bei einem Klick auf die Schaltfläche zurücksetzt.
In der folgenden Abbildung sehen Sie, dass der Bereich personaldetails zurückgesetzt wird, wenn jemand auf die Schaltfläche clear klickt:
So zeigen Sie eine benutzerdefinierte Meldung auf Feldebene an und markieren das Feld als ungültig
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen Felder und globale Objekte verwenden, um eine benutzerdefinierte Nachricht auf Feldebene anzuzeigen und das Feld mithilfe eines Contact Us Formulars als ungültig zu markieren.
Mit der Funktion markFieldAsInvalid() können Sie ein Feld als ungültig definieren und eine benutzerdefinierte Fehlermeldung auf Feldebene festlegen. Der Wert fieldIdentifier kann fieldId, field qualifiedName oder field dataRef lauten. Der Wert des Objekts namens option kann {useId: true}, {useQualifiedName: true} oder {useDataRef: true} lauten.
Folgende Syntax wird verwendet, um ein Feld als ungültig zu markieren und eine benutzerdefinierte Nachricht festzulegen:
globals.functions.markFieldAsInvalid(field.$id,"[custom message]",{useId: true});globals.functions.markFieldAsInvalid(field.$qualifiedName, "[custom message]", {useQualifiedName: true});globals.functions.markFieldAsInvalid(field.$dataRef, "[custom message]", {useDataRef: true});
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function erläutert, um eine benutzerdefinierte Nachricht auf Feldebene zu aktivieren.
/**
* customMessage
* @name customMessage
* @param {object} field
* @param {scope} globals
*/
function customMessage(field, globals) {
const minLength = 15;
const comments = field.$value.trim();
if (comments.length < minLength) {
globals.functions.markFieldAsInvalid(field.$id, "Comments must be at least 15 characters long.", { useId: true });
}
}
In diesem Beispiel wird eine benutzerdefinierte Meldung auf Feldebene angezeigt, wenn Benutzende weniger als 15 Zeichen in das Textfeld „Kommentare“ eingeben.
Der nächste Schritt besteht darin, eine Regel für das Feld comments zu erstellen:
Sehen Sie sich das Beispiel unten an, in dem dargestellt wird, wie die Eingabe von negativem Feedback in das Feld comments die Anzeige einer benutzerdefinierten Nachricht auf Feldebene auslöst:
Wenn der/die Benutzende mehr als 15 Zeichen in das Textfeld „Kommentare“ eingibt, wird das Feld validiert und das Formular übermittelt:
Senden geänderter Daten an den Server
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen mithilfe eines Contact Us Formulars Felder und globale Objekte verwenden, um bearbeitete Daten auf dem Server zu übermitteln.
Diese Codezeileglobals.functions.submitForm(globals.functions.exportData(), false); wird verwendet, um die Formulardaten nach der Bearbeitung zu senden.
- Das erste Argument sind die zu übermittelnden Daten.
- Das zweite Argument gibt an, ob das Formular vor der Übermittlung validiert werden soll. Es ist
optionalund standardmäßig auftruefestgelegt. - Das dritte Argument ist der
contentTypeder Übermittlung, der ebenfalls optional ist und den Standardwertmultipart/form-datahat. Die anderen Werte könnenapplication/jsonundapplication/x-www-form-urlencodedsein.
Fügen Sie den folgenden Code in der benutzerdefinierten Funktion hinzu, wie im Abschnitt create-custom-function beschrieben, um die bearbeiteten Daten an den Server zu senden:
/**
* submitData
* @name submitData
* @param {object} field
* @param {scope} globals
*/
function submitData(globals)
{
var data = globals.functions.exportData();
if(!data.comments) {
data.comments = 'NA';
}
console.log('After update:{}',data);
globals.functions.submitForm(data, false);
}
Wenn jemand in diesem Beispiel das Textfeld comments leer lässt, wird beim Senden des Formulars an den Server NA gesendet.
Erstellen Sie jetzt eine Regel für die Submit-Schaltfläche, die Daten sendet:
In der Abbildung unten finden Sie das console window, das zeigt, dass der Wert als NA an den Server gesendet wird, wenn jemand das Textfeld comments leer lässt:
Sie können auch das Konsolenfenster überprüfen, um die an den Server gesendeten Daten anzuzeigen:
Überschreiben der erfolgreichen Formularübermittlung und der Fehler-Handler
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen mithilfe eines Contact Us Formulars Feld- und globale Objekte verwenden, um Übermittlungs-Handler zu überschreiben.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-features erläutert, um die Übermittlungs- oder Fehlermeldung für Formularübermittlungen anzupassen und die Formularübermittlungsmeldungen in einem modalen Feld anzuzeigen:
/**
* Handles the success response after a form submission.
*
* @param {scope} globals - This object contains a read-only form instance, target field instance, triggered event, and methods for performing form modifications within custom functions.
* @returns {void}
*/
function customSubmitSuccessHandler(globals) {
var event = globals.event;
var submitSuccessResponse = event.payload.body;
var form = globals.form;
if (submitSuccessResponse) {
if (submitSuccessResponse.redirectUrl) {
window.location.href = encodeURI(submitSuccessResponse.redirectUrl);
} else if (submitSuccessResponse.thankYouMessage) {
showModal("success", submitSuccessResponse.thankYouMessage);
}
}
}
/**
* Handles the error response after a form submission.
*
* @param {string} customSubmitErrorMessage - The custom error message.
* @param {scope} globals - This object contains a read-only form instance, target field instance, triggered event, and methods for performing form modifications within custom functions.
* @returns {void}
*/
function customSubmitErrorHandler(customSubmitErrorMessage, globals) {
showModal("error", customSubmitErrorMessage);
}
function showModal(type, message) {
// Remove any existing modals
var existingModal = document.getElementById("modal");
if (existingModal) {
existingModal.remove();
}
// Create the modal dialog
var modal = document.createElement("div");
modal.setAttribute("id", "modal");
modal.setAttribute("class", "modal");
// Create the modal content
var modalContent = document.createElement("div");
modalContent.setAttribute("class", "modal-content");
// Create the modal header
var modalHeader = document.createElement("div");
modalHeader.setAttribute("class", "modal-header");
modalHeader.innerHTML = "<h2>" + (type === "success" ? "Thank You" : "Error") + "</h2>";
// Create the modal body
var modalBody = document.createElement("div");
modalBody.setAttribute("class", "modal-body");
modalBody.innerHTML = "<p class='" + type + "-message'>" + message + "</p>";
// Create the modal footer
var modalFooter = document.createElement("div");
modalFooter.setAttribute("class", "modal-footer");
// Create the close button
var closeButton = document.createElement("button");
closeButton.setAttribute("class", "close-button");
closeButton.innerHTML = "Close";
closeButton.onclick = function() {
modal.remove();
};
// Append the elements to the modal content
modalFooter.appendChild(closeButton);
modalContent.appendChild(modalHeader);
modalContent.appendChild(modalBody);
modalContent.appendChild(modalFooter);
// Append the modal content to the modal
modal.appendChild(modalContent);
// Append the modal to the document body
document.body.appendChild(modal);
}
Wenn in diesem Beispiel der Benutzer die customSubmitSuccessHandler und customSubmitErrorHandler benutzerdefinierten Funktionen verwendet, werden die Erfolgs- und Fehlermeldungen in einem modalen Fenster angezeigt. Die JavaScript-showModal(type, message) wird verwendet, um ein modales Dialogfeld dynamisch zu erstellen und auf einem Bildschirm anzuzeigen.
Erstellen Sie jetzt eine Regel für die erfolgreiche Formularübermittlung:
Anhand der folgenden Abbildung können Sie zeigen, dass bei erfolgreicher Übermittlung des Formulars die Erfolgsmeldung in einem modalen Fenster angezeigt wird:
Erstellen wir analog dazu eine Regel für fehlgeschlagene Formularübermittlungen:
Anhand der folgenden Abbildung können Sie zeigen, dass bei fehlgeschlagener Formularübermittlung die Fehlermeldung in einem modalen Fenster angezeigt wird:
Um die erfolgreiche und fehlgeschlagene Übermittlung eines Formulars standardmäßig anzuzeigen, sind die Funktionen Default submit Form Success Handler und Default submit Form Error Handler standardmäßig verfügbar.
Falls der benutzerdefinierte Übermittlungs-Handler in bestehenden AEM-Projekten oder Formularen nicht wie erwartet funktioniert, lesen Sie den Abschnitt Fehlerbehebung.
Ausführen von Aktionen in einer bestimmten Instanz des wiederholbaren Bereichs
Regeln, die mit dem visuellen Regeleditor in einem wiederholbaren Bereich erstellt wurden, gelten für die letzte Instanz des wiederholbaren Bereichs. Zum Schreiben einer Regel für eine bestimmte Instanz des wiederholbaren Bereichs können wir eine benutzerdefinierte Funktion verwenden.
Erstellen wir ein anderes Formular, Booking Form Informationen über Reisende zu sammeln, die zu einem Ziel unterwegs sind. Ein Reisenden-Bedienfeld wird als wiederholbares Bedienfeld hinzugefügt, in dem der Benutzer mithilfe der Schaltfläche Add Traveler Details für 5 Reisende hinzufügen kann.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um Aktionen in einer bestimmten Instanz des wiederholbaren Bereichs durchzuführen, die nicht der letzten ist:
/**
* @name hidePanelInRepeatablePanel
* @param {scope} globals
*/
function hidePanelInRepeatablePanel(globals)
{
var repeatablePanel = globals.form.travelerinfo;
// hides a panel inside second instance of repeatable panel
globals.functions.setProperty(repeatablePanel[1].traveler, {visible : false});
}
In diesem Beispiel führt die benutzerdefinierte Funktion hidePanelInRepeatablePanel eine Aktion in einer bestimmten Instanz des wiederholbaren Bereichs durch. Im obigen Code stellt travelerinfo den wiederholbaren Bereich dar. Der repeatablePanel[1].traveler, {visible: false}-Code blendet den Bereich in der zweiten Instanz des wiederholbaren Bereichs aus.
Fügen wir eine Schaltfläche mit der Bezeichnung Hide hinzu und fügen wir eine Regel hinzu, um die zweite Instanz eines wiederholbaren Bereichs auszublenden.
Anhand des folgenden Videos wird gezeigt, dass beim Klicken auf die Hide der Bereich in der zweiten wiederholbaren Instanz ausgeblendet wird:
Füllen Sie das Feld beim Laden des Formulars mit einem Wert vorab aus
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen Felder und globale Objekte verwenden, um Felder mithilfe eines Booking Form vorzubefüllen.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um den vorausgefüllten Wert in ein Feld zu laden, wenn das Formular initialisiert wird:
/**
* Tests import data
* @name testImportData
* @param {scope} globals
*/
function testImportData(globals)
{
globals.functions.importData(Object.fromEntries([['amount','10000']]));
}
Im oben genannten Code füllt die Funktion testImportData das Textfeld Booking Amount vorab aus, wenn das Formular geladen wird. Nehmen wir einmal an, dass das Buchungsformular die 10,000 des Mindestbuchungsbetrags erfordert.
Erstellen wir bei der Initialisierung des Formulars eine Regel, bei der der Wert im Booking Amount Textfeld beim Laden des Formulars mit einem angegebenen Wert vorausgefüllt wird:
Der folgende Screenshot zeigt, dass beim Laden des Formulars der Wert im Booking Amount Textfeld mit einem angegebenen Wert vorausgefüllt ist:
Fokus auf das spezifische Feld legen
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen Felder und globale Objekte verwenden, um mithilfe eines Booking Form den Fokus auf ein bestimmtes Feld zu legen.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um den Fokus auf das angegebene Feld zu legen, wenn auf die Submit-Schaltfläche geklickt wird:
/**
* @name testSetFocus
* @param {object} emailField
* @param {scope} globals
*/
function testSetFocus(field, globals)
{
globals.functions.setFocus(field);
}
Fügen wir der Schaltfläche Submit eine Regel hinzu, um den Fokus auf das Textfeld Email ID zu legen, wenn darauf geklickt wird:
Der folgende Screenshot zeigt, dass beim Klicken auf die Schaltfläche Submit der Fokus auf das Feld Email ID gelegt wird:
$focusOption-Parameter verwenden, wenn Sie sich relativ zum email auf das nächste oder vorherige Feld konzentrieren möchten.Hinzufügen oder Löschen eines wiederholbaren Bereichs mithilfe der dispatchEvent
Im Folgenden erfahren Sie, wie benutzerdefinierte Funktionen mithilfe von Feld- und globalen Objekten wiederholbare Bereiche mithilfe der dispatchEvent-Eigenschaft mithilfe eines Booking Form hinzufügen oder löschen.
Fügen Sie die folgende Codezeile hinzu, wie im Abschnitt create-custom-function beschrieben, um einen Bereich hinzuzufügen, wenn mithilfe der Add Traveler-Eigenschaft auf die Schaltfläche dispatchEvent geklickt wird:
/**
* Tests add instance with dispatchEvent
* @name testAddInstance
* @param {scope} globals
*/
function testAddInstance(globals)
{
var repeatablePanel = globals.form.traveler;
globals.functions.dispatchEvent(repeatablePanel,'addInstance');
}
Fügen wir der Schaltfläche Add Traveler eine Regel hinzu, um den wiederholbaren Bereich hinzuzufügen, wenn auf ihn geklickt wird:
Die folgende GIF-Datei veranschaulicht, dass beim Klicken auf die Schaltfläche Add Traveler der Bereich mithilfe der dispatchEvent hinzugefügt wird:
Fügen Sie auf ähnliche Weise die folgende Codezeile hinzu, wie im Abschnitt create-custom-function erläutert, um einen Bereich zu löschen, wenn mithilfe der Delete Traveler-Eigenschaft auf die Schaltfläche dispatchEvent geklickt wird:
/**
* @name testRemoveInstance
* @param {scope} globals
*/
function testRemoveInstance(globals)
{
var repeatablePanel = globals.form.traveler;
globals.functions.dispatchEvent(repeatablePanel, 'removeInstance');
}
Fügen wir der Schaltfläche Delete Traveler eine Regel hinzu, um den wiederholbaren Bereich beim Klicken zu löschen:
Die nachstehende GIF-Datei zeigt, dass beim Klicken auf die Schaltfläche Delete Traveler das Reisenden-Bedienfeld mithilfe der Eigenschaft dispatchEvent gelöscht wird:
Bekanntes Problem
-
Benutzerdefinierte Funktionen unterstützen keine Literale für reguläre Ausdrücke in JavaScript. Die Verwendung von Regex-Literalen in einer benutzerdefinierten Funktion führt zu Fehlern während der Ausführung. Beispiel:
const pattern = /^abc$/;Um die Kompatibilität zu gewährleisten, verwenden Sie den RegExp-Konstruktor in den benutzerdefinierten Funktionen.
const pattern = new RegExp("^abc$");
Refaktorieren Sie reguläre Ausdrücke so, dass der RegExp-Konstruktor verwendet wird, um eine konsistente und zuverlässige Ausführung zu gewährleisten.
Fehlerbehebung
-
Wenn der benutzerdefinierte Übermittlungs-Handler in bestehenden AEM-Projekten oder -Formularen nicht wie erwartet funktioniert, führen Sie die folgenden Schritte aus:
-
Stellen Sie sicher dass die Kernkomponentenversion auf Version 3.0.18 und höher aktualisiert . Für bestehende AEM-Projekte und -Formulare müssen jedoch zusätzliche Schritte ausgeführt werden:
-
Für das AEM-Projekt sollte der Benutzer alle Instanzen von
submitForm('custom:submitSuccess', 'custom:submitError')durchsubmitForm()ersetzen und das Projekt über die Cloud Manager-Pipeline bereitstellen. -
Wenn die benutzerdefinierten Übermittlungs-Handler für vorhandene Formulare nicht richtig funktionieren, müssen Benutzende die Regel
submitFormmithilfe des Regeleditors anhand der Schaltfläche Senden öffnen und speichern. Diese Aktion ersetzt im Formular die vorhandene RegelsubmitForm('custom:submitSuccess', 'custom:submitError')durchsubmitForm().
-
Siehe auch
- Einführung in den Regeleditor für adaptive Formulare, die auf Kernkomponenten basieren
- Operatortypen und -ereignisse im Regeleditor eines auf Kernkomponenten basierendes adaptiven Formulars
- Benutzeroberfläche des Regeleditors für adaptive Formulare, die auf Kernkomponenten basieren
- Verschiedene Anwendungsfälle des Regeleditors für ein auf Kernkomponenten basierendes adaptives Formular
- Unterschiede in verschiedenen Editionen des Regeleditors
- Verwenden von asynchronen Funktionen in einem adaptiven Formular
- Aufrufen von Diensterweiterungen im visuellen Regeleditor für Formulare, die auf Kernkomponenten basieren
- Einführung in benutzerdefinierte Funktionen für adaptive Formulare, die auf Kernkomponenten basieren
- Erstellen einer benutzerdefinierten Funktion für ein auf Kernkomponenten basierendes adaptives Formular
- Umfangsobjekt in benutzerdefinierten Funktionen
- Beispiele für die Entwicklung und Verwendung benutzerdefinierter Funktionen