Benutzerdefinierte Funktionen: Grundlagen
In diesem Kapitel wird beschrieben, wie Sie benutzerdefinierte Funktionen (kurz UDFs = User-Defined Functions) erstellen, importieren, bearbeiten, kopieren und einfügen und löschen.
Erstellen einer benutzerdefinierten Funktion
In diesem Unterabschnitt erfahren Sie, wie Sie eine benutzerdefinierte Funktion von Grund auf neu oder anhand bestehender Komponenten erstellen. Sie benötigen dazu mindestens eine Ausgabekomponente, mit der einige Daten verbunden sind. Als Input-Parameter kann eine Funktion null, einen oder mehrere Inputs haben. Die Input- und Output-Parameter können den Typ simpleType (z.B. String) oder complexType (eine Struktur) haben. Nähere Informationen zu einfachen und komplexen Parametern finden Sie unter Parameter von benutzerdefinierten Funktionen.
Neuerstellung einer benutzerdefinierten Funktion
Um eine benutzerdefinierte Funktion von Grund auf neu zu erstellen, gehen Sie folgendermaßen vor:
1.Wählen Sie Funktion | Benutzerdefinierte Funktion erstellen. Klicken Sie alternativ dazu auf die Symbolleisten-Schaltfläche .
2.Geben Sie die entsprechenden Informationen in das Dialogfeld Benutzerdefinierte Funktion erstellen ein (siehe Abbildung unten).
Es stehen die folgenden Optionen zur Verfügung:
•Funktionsname: Obligatorisches Feld. Im Namen der benutzerdefinierten Funktion können die folgenden Zeichen verwendet werden: Alphanumerische Zeichen (a-z, A-Z, 0-9), ein Unterstrich ( _ ), ein Bindestrich ( - ) und ein Doppelpunkt ( : ).
•Bibliotheksname: Obligatorisches Feld. Dies ist der Name einer Funktionsbibliothek (im Fenster "Bibliotheken"), in dem Ihre Funktion gespeichert wird. Wenn Sie keine Bibliothek angeben, wird die Funktion in eine Standardbibliothek namens user platziert.
•Syntax: Optionales Feld. Geben Sie hier Text ein, um die Syntax der Funktion genau zu beschreiben (z.B. die erwarteten Parameter). Dieser Text wird im Fenster Bibliotheken neben der Funktion angezeigt. Er hat keine Auswirkung auf die Implementierung der Funktion.
•Detail: Optionales Feld. Diese Beschreibung wird angezeigt, wenn Sie im Fenster Bibliotheken oder an anderen Stellen den Cursor über die Funktion platzieren.
•Inline-Verwendung: Aktivieren Sie dieses Kontrollkästchen, wenn die Funktion als Inline-Funktion erstellt werden soll. Nähere Informationen dazu finden Sie weiter unten unter Reguläre benutzerdefinierte Funktionen und Inline-Funktionen.
3.Klicken Sie auf OK. Die Funktion wird daraufhin sofort im Fenster Bibliotheken unter dem oben angegebenen Bibliotheksnamen angezeigt. Das Mapping-Fenster wird nun neu gezeichnet, damit Sie eine neue Funktion erstellen können (es handelt sich hierbei um ein eigenständiges Mapping, das so genannte Funktionsmapping). Das Funktionsmapping enthält standardmäßig eine Ausgabekomponente.
4.Fügen Sie alle erforderlichen Komponenten zum Funktionsmapping hinzu. Gehen Sie dabei auf die gleiche Weise vor, wie in einem Standard-Mapping.
Um die benutzerdefinierte Funktion in einem Mapping zu verwenden, ziehen Sie diese aus dem Fenster Bibliotheken in den Hauptmapping-Bereich. Siehe auch Aufrufen und Importieren von benutzerdefinerten Funktionen wieder unten.
Benutzerdefinierte Funktionen anhand bestehender Komponenten
Um eine benutzerdefinierte Funktion anhand bestehender Komponenten zu erstellen, gehen Sie folgendermaßen vor:
1.Wählen Sie die gewünschten Komponenten im Mapping aus, indem Sie mit der Maus ein Rechteck aufziehen. Sie können die Komponenten auch durch Anklicken bei gedrückter Strg-Taste auswählen.
2.Wählen Sie den Menübefehl Funktion | Benutzerdefinierte Funktion von Auswahl erstellen. Klicken Sie alternativ dazu auf die Symbolleisten-Schaltfläche .
3.Gehen Sie vor, wie in Schritt 2-4 unter Neuerstellung einer benutzerdefinierten Funktion beschrieben.
Reguläre benutzerdefinierte Funktionen und Inline-Funktionen
Es gibt zwei Arten von benutzerdefinierten Funktionen: Reguläre Funktionen und Inline-Funktionen. Sie können beim Erstellen der Funktion den Typ Ihrer benutzerdefinierten Funktion definieren. Inline-Funktionen und reguläre Funktionen verhalten sich in Bezug auf die Codegenerierung, Rekursivität und die Möglichkeit, mehrere Output-Parameter zu haben, unterschiedlich. Die Tabelle unten enthält eine Übersicht über die wichtigsten Unterschiede zwischen regulären benutzerdefinierten Funktionen und inline gesetzten benutzerdefinierten Funktionen.
Inline-Funktionen (strichlierter Rand) | Reguläre Funktionen (durchgezogener Rand) |
---|---|
Bei Inline-Funktionen wird der Code der benutzerdefinierten Funktion an allen Stellen, an denen die Funktion aufgerufen wird, eingefügt. Wenn die benutzerdefinierte Funktion mehrmals aufgerufen wird, würde der generierte Programmcode beträchtlich länger.
| Der Code für die benutzerdefinierte Funktion wird einmal aufgerufen und die Inputs dazu werden als Parameterwerte übergeben. Wenn die benutzerdefinierte Funktion mehrmals aufgerufen wird, wird sie jedes Mal mit den entsprechenden Parameterwerten ausgewertet. |
Inline-Funktionen können mehrere Outputs haben und daher als Resultat mehrere Werte haben. | Reguläre Funktionen können nur einen Output haben. Um mehrere Werte zurückzugeben, können Sie den Output als complexType (z.B. als XML-Struktur) deklarieren. Auf diese Art könnten mehrere Werte an die aufrufende Komponente zurückgegeben werden.
|
Inline-Funktionen können nicht rekursiv aufgerufen werden. | Reguläre Funktionen können rekursiv aufgerufen werden.
|
Bei Inline-Funktionen kann kein Prioritätskontext für einen Parameter definiert werden. | Bei regulären Funktionen kann ein Prioritätskontext für einen Parameter definiert werden.
|
Inline-Funktionen wirken sich auf den Kontext im Mapping, das die benutzerdefinierte Funktion aufruft, aus und umgekehrt wirkt sich der Kontext auf die benutzerdefinierte Funktion aus.
| Reguläre benutzerdefinierte Funktionen haben ihren eigenen lokalen Kontext. |
Anmerkung: | Das Umschalten einer benutzerdefinierten Funktion zwischen "regulär" und "inline" kann sich auf den Mapping-Kontext auswirken, wodurch im Mapping ein anderes Ergebnis erzeugt werden kann. |
Aufrufen und Importieren von benutzerdefinierten Funktionen
Nachdem Sie eine benutzerdefinierte Funktion erstellt haben, können Sie diese entweder vom selben Mapping, in dem Sie diese erstellt haben, oder von einem beliebigen anderen Mapping aus aufrufen.
Aufrufen von benutzerdefinierten Funktionen über dasselbe Mapping
Um eine benutzerdefinierte Funktion vom selben Mapping aus aufzurufen, gehen Sie folgendermaßen vor:
1.Suchen Sie die gewünschte Funktion im Fenster Bibliotheken unter der Bibliothek, die Sie bei der Erstellung der Funktion definiert haben. Geben Sie dazu die ersten Buchstaben des Namens in der Fenster Bibliotheken ein.
2.Ziehen Sie die Funktion aus dem Fenster Bibliotheken in das Mapping. Sie können nun alle erforderlichen Parameter damit verbinden.
Importieren einer benutzerdefinierten Funktion aus einem anderen Mapping
Um eine benutzerdefinierte Funktion aus einem anderen Mapping zu importieren, gehen Sie folgendermaßen vor:
1.Klicken Sie im unteren Bereich des Fensters Bibliotheken auf die Schaltfläche Bibliotheken hinzufügen/entfernen. Daraufhin wird das Fenster Bibliotheken verwalten geöffnet (siehe Abbildung unten).
2.Um Funktionen als lokale Bibliothek (nur im Geltungsbereich des aktuellen Dokuments) zu importieren, klicken Sie auf die Schaltfläche Hinzufügen unterhalb des aktuellen Mapping-Namens. Um Funktionen als globale Bibliothek (auf Programmebene zu importieren, klicken Sie auf die Schaltfläche Hinzufügen neben Globale Bibliotheksimporte. Wenn Sie eine Bibliothek lokal importieren, können Sie den Pfad zur Bibliotheksdatei als relativ zur Mapping-Datei definieren. Bei gobal importierten Bibliotheken ist der Pfad zur importierten Bibliothek immer absolut.
3.Navigieren Sie zur .mfd-Datei, die die benutzerdefinierte Funktion enthält und klicken Sie auf Öffnen. Daraufhin erscheint ein Meldungsfeld, in dem Sie darüber informiert werden, dass eine neue Bibliothek hinzugefügt wurde und über das Fenster Bibliotheken aufgerufen werden kann.
Sie können nun jede der importierten Funktionen im aktuellen Mapping verwenden, indem Sie die Funktion aus dem Bibliotheksfenster in das Mapping ziehen. Nähere Informationen zum Anzeigen und Organisieren von Funktionsbibliotheken finden Sie unter Verwalten von Funktionsbibliotheken.
Mapping mit Anmeldeinformationen (Enterprise Edition)
Wenn die importierte .mfd-Datei Anmeldeinformationen enthält, werden diese im Anmeldeinformationen-Manager als importiert (gelb hinterlegt) angezeigt. Importierte Anmeldeinformationen werden standardmäßig nicht mit dem Mapping gespeichert. Sie können jedoch optional eine lokale Kopie anlegen und diese im Mapping speichern. Siehe Anmeldeinformationen in benutzerdefinierten Funktionen.
Bearbeiten von benutzerdefinierten Funktionen
Um eine benutzerdefinierte Funktion zu bearbeiten, gehen Sie folgendermaßen vor:
1.Öffnen Sie das Mapping, das die benutzerdefinierte Funktion enthält.
2.Doppelklicken Sie im Mapping auf die Titelleiste der benutzerdefinierten Funktion, um den Inhalt der Funktion zu sehen. Sie können Komponenten darin je nach Bedarf hinzufügen, bearbeiten oder entfernen.
3.Um die Eigenschaften der Funktion (wie Name oder Beschreibung) zu ändern, klicken Sie mit der rechten Maustaste in einen leeren Bereich des Mappings und wählen Sie im Kontextmenü den Befehl Funktionseinstellungen. Klicken Sie alternativ dazu auf die Symbolleisten-Schaltfläche .
Sie können eine Funktion auch durch Doppelklick auf ihren Namen im Fenster Bibliotheken bearbeiten, doch können nur Funktionen im derzeit aktiven Dokument auf diese Art geöffnet werden. Wenn Sie auf eine benutzerdefinierte Funktion doppelklicken, die in einem anderen Mapping erstellt wurde, so wird dieses Mapping in einem neuen Fenster geöffnet. Wenn Sie eine benutzerdefinierte Funktion, die in mehrere Mappings importiert wurde, bearbeiten oder löschen, so wirkt sich diese Änderung auf alle diese Mappings aus.
Um zum Hauptmapping zurückzugelangen, klicken Sie in der linken oberen Ecke des Mapping-Fensters auf die Schaltfläche .
Mit Hilfe der Symbolleisten-Schaltflächen und können Sie in MapForce durch verschiedene Mappings und benutzerdefinierte Funktionen navigieren. Die Tastaturkürzel für diese Schaltflächen sind Alt+nach links bzw. Alt+nach rechts.
Kopieren und Einfügen von benutzerdefinierten Funktionen
Um eine benutzerdefinierte Funktion zu kopieren und in ein anderes Mapping einzufügen, gehen Sie folgendermaßen vor:
1.Öffnen Sie das Fenster "Bibliotheken verwalten".
2.Klicken Sie mit der rechten Maustaste auf einen leeren Bereich im Fenster Bibliotheken und wählen Sie die Option Alle offenen Dokumente anzeigen.
3.Öffnen Sie das Quell- und das Zielmapping. Beide Mappings müssen unbedingt gespeichert worden sein, damit die Pfade korrekt aufgelöst werden. Siehe auch Kopieren-Einfügen und relative Pfade.
4.Klicken Sie mit der rechten Maustaste im Fenster Bibliotheken verwalten auf die gewünschte benutzerdefinierte Funktion aus dem Quellmapping und wählen Sie im Kontextmenü den Befehl Kopieren (siehe Abbildung unten) oder drücken Sie Strg+C. Lassen Sie des Fenster Bibliotheken verwalten geöffnet.
5.Wechseln Sie in das Zielmapping (das Fenster Bibliotheken verwalten ändert sich entsprechend), klicken Sie mit der rechten Maustaste auf Benutzerdefinierte Funktionen und wählen Sie im Kontextmenü den Befehl Einfügen.
Löschen von benutzerdefinierten Funktionen
Um eine benutzerdefinierte Funktion zu löschen, gehen Sie folgendermaßen vor:
1.Doppelklicken Sie im Mapping auf die Titelleiste der Komponente.
2.Klicken Sie in der rechten oberen Ecke des Mappingfensters auf die Schaltfläche .
3.Falls die Funktion im aktuell geöffneten Mapping verwendet wird, werden Sie gefragt, ob alle Instanzen mit der internen Komponente gelöscht werden sollen. Klicken Sie auf Ja, wenn die Funktion gelöscht werden soll und alle Instanzen, in denen diese aufgerufen wird, durch die Komponenten der Funktion ersetzt werden sollen. Auf diese Art bleibt das Hauptmapping gültig, auch wenn die Funktion gelöscht wird. Wenn die gelöschte Funktion jedoch in anderen externen Mappings verwendet wird, werden diese ungültig. Klicken Sie auf Nein, wenn Sie die Funktion und alle ihre internen Komponenten permanent löschen möchten. In diesem Fall werden alle Mappings, in denen die Funktion verwendet wird, ungültig.