Parameter von benutzerdefinierten Funktionen
Wenn Sie eine benutzerdefinierte Funktion erstellen, müssen Sie angeben, welche Input-Parameter (falls überhaupt) diese erhalten soll und welchen Output die Funktion erzeugen soll. Während Input-Parameter manchmal nicht benötigt werden, ist ein Output-Parameter in jedem Fall erforderlich.. Funktionsparameter können einen simpleType (wie z.B. String oder Ganzzahl) oder eine komplexe Struktur haben. So hat etwa die unten gezeigte benutzerdefinierte Funktion FindArticle zwei Input- und einen Output-Parameter:
•POArtNr ist ein Input-Parameter vom simpleType string.
•Amount ist ein Input-Parameter vom Typ integer.
•CompletePO ist ein Output-Parameter mit einer komplexen XML-Struktur.
Parameterreihenfolge
Wenn eine benutzerdefinierte Funktion mehrere Input- oder Output-Parameter hat, können Sie die Reihenfolge ändern, in der die Parameter für aufrufende Komponenten dieser Funktion erscheinen. Die Reihenfolge der Parameter im Funktionsmapping (von oben nach unten) bestimmt die Reihenfolge, in der diese für aufrufende Komponenten dieser Funktion angezeigt werden.
Achtung
•Input- und Output-Parameter werden nach ihrer Position von oben nach unten gereiht. Wenn Sie also den Parameter input3 im Funktionsmapping an die oberste Stelle verschieben, wird dieser zum ersten Parameter dieser Funktion.
•Wenn zwei Parameter dieselbe vertikale Position haben, so wird zuerst der am weitesten links liegende Parameter verarbeitet.
•In den seltenen Fällen, in denen zwei Parameter genau die gleiche Position haben, wird automatisch die interne Komponenten-ID verwendet.
Strukturen vom Typ "complexType"
In der Liste unten sehen Sie, auf welchen Strukturen ein Parameter in einer benutzerdefinierten Funktion basieren kann.
MapForce Basic Edition
•XML-Schema-Struktur
MapForce Professional Edition
•XML-Schema-Struktur
•Datenbankstruktur
MapForce Enterprise Edition
•XML-Schema-Struktur
•Datenbankstruktur
•EDI-Struktur
•FlexText Structure
•JSON-Schema-Struktur
Auf Datenbankstrukturen basierende benutzerdefinierte Funktionen (Professional und Enterprise Edition)
Sie können in MapForce datenbankbasierte Parameter von benutzerdefinierten Funktionen mit einer Struktur damit in Zusammenhang stehender Tabellen erstellen und verwenden. Die Struktur dieser Tabellen bildet eine speicherresidente Struktur, die keine Verbindung zur Datenbank zur Laufzeit hat. Das heißt auch, dass es keine automatische Behandlung von Sekundärschlüsseln und keine Tabellenaktionen in Parametern oder Variablen gibt.
Hinzufügen von Parametern
Um einen Input- oder Output-Parameter hinzuzufügen, gehen Sie folgendermaßen vor:
1.Erstellen Sie eine benutzerdefinierte Funktion oder öffnen Sie eine vorhandene.
2.Wählen Sie den Menübefehl Funktion | Input-Komponente einfügen bzw. Funktion | Output-Komponente einfügen (siehe Abbildung unten). Klicken Sie alternativ dazu in der Symbolleiste auf die Schaltfläche (Input-Komponente einfügen) oder (Output-Komponente einfügen).
3.Wählen Sie beim Input- bzw. Output-Parameter um einen simpleType oder einen complexType handeln soll (siehe Dialogfeld oben). Siehe die Liste der verfügbaren komplexen Strukturen weiter oben. Um einen Parameter zu erstellen, der ein komplexer XML-Typ ist, klicken Sie neben Struktur auf Auswählen und navigieren Sie zum XML-Schema, das die erforderliche Struktur beschreibt.
Wenn das Funktionsmapping bereits XML-Schemas enthält, stehen sie als Strukturen zur Auswahl. Andernfalls können Sie ein komplett neues Schema für die Struktur des Parameters auswählen. Dasselbe gilt für Datenbanken und andere komplexe Strukturen, falls diese von Ihrer MapForce Edition unterstützt werden. Sie können bei XML-Strukturen ein Root-Element für Ihre Struktur auswählen, wenn es das XML-Schema erlaubt. Um ein Root-Element zu definieren, klicken Sie neben Root auf Auswählen und wählen Sie die Root im daraufhin angezeigten Dialogfeld aus.
Falls das Kontrollkästchen Strukturdateipfad relativ zur MFD-Datei speichern aktiviert ist, wird der absolute Pfad der Strukturdatei beim Speichern des Mappings in einen Pfad umgewandelt, der relativ zum aktuellen Mapping ist. Nähere Informationen dazu finden Sie unter Relative und absolute Pfade. Eine Erläuterung zu den Kontrollkästchen Input ist erforderlich und Input ist eine Sequenz finden Sie weiter unten.
Input ist erforderlich
Um einen Parameter in einer benutzerdefinierten Funktion zu einem obligatorischen Parameter zu machen, aktivieren Sie das Kontrollkästchen Input ist erforderlich (siehe Dialogfeld oben). Wenn Sie das Kontrollkästchen Input ist erforderlich deaktivieren, wird der Parameter optional und im Mapping mit einem strichlierten Rahmen angezeigt.
Außerdem können Sie einen Standardparameterwert definieren, indem Sie ihn mit dem Input "default" eines Parameters verbinden (siehe Beispiel unten). Der Standardwert wird nur wirksam, wenn kein anderer Wert vorhanden ist. Wenn der optionale Parameter bei Aufruf der Funktion einen Wert erhält, so hat dieser Wert Vorrang vor dem Standardwert.
Input ist eine Sequenz
Sie können optional festlegen, ob ein Funktionsparameter als Einzelwert (Standardverhalten) oder als Sequenz behandelt werden soll. Eine Sequenz ist ein Bereich von null oder mehr Werten. Eine Sequenz kann sich als nützlich erweisen, wenn in Ihrer benutzerdefinierten Funktion Input-Daten in Form einer Sequenz erwartet werden, um in dieser Sequenz Werte zu berechnen (z.B. durch Aufruf von Funktionen wie avg, min, max. Damit der Input des Parameters als Sequenz behandelt wird, aktivieren Sie das Kontrollkästchen Input ist eine Sequenz. Beachten Sie, dass dieses Kontrollkästchen nur dann aktiv ist, wenn es sich um eine reguläre benutzerdefinierte Funktion handelt.
Ein Beispiel für die Verwendung einer Sequenz sehen Sie im folgenden Mapping: MapForceExamples\InputIsSequence.mfd. In dem Ausschnitt aus diesem Mapping (siehe Abbildung unten) ist der Filter data mit der benutzerdefinierten Funktion Calculate verbunden. Das Ergebnis des Filters ist eine Sequenz von Datenelementen, sodass der Input-Parameter der Funktion als Sequenz definiert wurde.
Unten sehen Sie die Implementierung der Funktion Calculate, die alle Sequenzwerte aggregiert: Sie führt, die Funktionen avg, min, max an der Input-Sequenz aus. Um die interne Struktur der Funktion Calculate zu sehen, doppelklicken Sie im Mapping oben auf die Überschrift der Calculate-Komponente.
Im Allgemeinen gilt, dass es von den Input-Daten, bei denen es sich um eine Sequenz oder nicht um eine Sequenz handelt, abhängt, wie oft die Funktion aufgerufen wird:
•Wenn Input-Daten mit einem Sequenzparameter verbunden sind, wird die benutzerdefinierte Funktion nur einmal aufgerufen und die vollständige Sequenz wird an die benutzerdefinierte Funktion übergeben.
•Wenn Input-Daten mit einem Nicht-Sequenzparameter verbunden sind, wird die benutzerdefinierte Funktion für jedes Datenelement in der Sequenz einmal aufgerufen.
•Wenn Sie eine leere Sequenz mit einem Nicht-Sequenz-Parameter verbinden, wird die Funktion gar nicht aufgerufen. Dies kann vorkommen, wenn die Quellstruktur optionale Datenelemente hat oder wenn eine Filterbedingung keine übereinstimmenden Datenelemente zurückgibt. Um dies zu vermeiden, verwenden Sie vor dem Funktions-Input entweder die Funktion substitute-missing, um sicherzustellen, dass die Sequenz nie leer ist oder setzen Sie den Parameter auf Sequenz und fügen Sie innerhalb der Funktion eine Behandlung für die leere Sequenz hinzu.
Das Kontrollkästchen Output ist eine Sequenz kann auch für Output-Parameter erforderlich sein. Wenn eine Funktion eine Sequenz aus mehreren Werten an ihre Output-Komponente übergibt und die Output-Komponente nicht auf Sequenz gesetzt ist, gibt die Funktion nur das erste Datenelement in der Sequenz zurück.