Erstellen einer benutzerdefinierten Transformation

Der „Transformer“-Schritt enthält vordefinierte Transformationen, die eine Vielzahl von gängigen Datentransformationen ausführen. Wenn die vordefinierten Transformationen Ihre Anforderungen nicht erfüllen, können Sie mit Groovy ein benutzerdefiniertes Transformationsskript schreiben. Diese Schritte beschreiben, wie mit Groovy einfache benutzerdefinierte Transformationen erstellt werden. Eine vollständige Dokumentation zu Groovy finden Sie unter groovy-lang.org.

  1. Fügen Sie dem Datenfluss im Enterprise Designer einen „Transformer“-Schritt hinzu.
  2. Doppelklicken Sie auf den „Transformer“-Schritt.
  3. Klicken Sie auf Add (Hinzufügen).
  4. Klicken Sie unter Allgemein auf Benutzerdefiniert.
  5. Geben Sie in das Feld Name der benutzerdefinierten Transformation einen Namen für die zu erstellende Transformation ein. Der Name muss eindeutig sein.
  6. Klicken Sie auf Skript-Editor.

    Dieser Editor bietet eine Vielzahl von Features, die Ihnen die Entwicklung Ihrer Transformation erleichtern, darunter Codevervollständigung und Paletten mit Funktionen und Feldern.

    Aufgabe Anleitungen

    So fügen Sie eine Funktion hinzu:

    Doppelklicken Sie im Bereich Funktionen auf die Funktion, die Sie hinzufügen möchten.

    Anmerkung: Die im Editor aufgelisteten Funktionen sind Funktionen, die bereitgestellt werden, um das Schreiben benutzerdefinierter Transformationsskripts einfacher zu machen. Sie führen Funktionen aus, deren Realisierung sonst mehrere Zeilen Groovy-Code erfordern würde. Es handelt sich dabei nicht um Groovy-Standardfunktionen.

    So rufen Sie den Wert aus einem Datenflussfeld ab:

    Doppelklicken Sie im Bereich Eingabefelder auf das gewünschte Eingabefeld. Folgendes wird Ihrem Skript hinzugefügt:
    data['FieldName']

    Wenn Sie beispielsweise den Wert aus dem Feld „CurrentBalance“ abrufen möchten, würde Folgendes hinzugefügt:

    data['CurrentBalance']

    So legen Sie den Wert eines Datenflussfeldes fest:

    Geben Sie im Skript-Editor den folgenden Code ein:

    data['FieldName']=NewValue

    Um beispielsweise das Feld „Day“ auf den Wochentag zu setzen, der im Feld „PurchaseDate“ enthalten ist:

    data['Day']=dayOfWeek(data['PurchaseDate'])

    In diesem Beispiel wird die Funktion dayOfWeek() verwendet, um den Tag aus dem Datumswert im Feld „PurchaseDate“ abzurufen, und das Ergebnis in das Feld „Day“ geschrieben.

    Tipp: Sie können im Bereich Ausgabefelder auf den Namen des Ausgabefeldes doppelklicken, um die Feldreferenz dem Skript hinzuzufügen.

    So ändern Sie den Umfang einer Skriptvariablen in einem Datenfluss:

    Verwenden Sie die Anmerkung @Field in Ihrem Skript wie dargestellt, um den Umfang einer Skriptvariablen von einem einzelnen Eingabedatensatz in alle Eingabedatensätze in einem Datenfluss zu ändern:
    import groovy.transform.Field;
    @Field ['data type']['VariableName']= Value;
    Um beispielsweise als Umfang der Variable RecordNumber einen einzelnen Eingabedatensatz festzulegen, geben Sie Folgendes an:
    int recordNumber = 1;
    data['Record_Number']= recordNumber;
    recordNumber++;

    Die Ausgabe lautet dann:

    Um den Umfang dieser Variable in alle Eingabedatensätze zu ändern, geben Sie Folgendes an:
    import groovy.transform.Field 
    @Field int recordNumber = 1;
    data['Record_Number']= recordNumber;
    recordNumber++;

    Die Ausgabe lautet dann:

    So erstellen Sie ein neues Feld mit einem numerischen Datentyp:

    Geben Sie im Skript-Editor den folgenden Code ein:

    data['FieldName'] = new constructor;

    Dabei kann es sich bei Konstruktor um eines der folgenden Elemente handeln:

    java.lang.Double(Zahl)
    Erstellt ein Feld mit dem Datentyp „Double“.
    java.lang.Float(Zahl)
    Erstellt ein Feld mit dem Datentyp „Float“.
    java.lang.Integer(Zahl)
    Erstellt ein Feld mit dem Datentyp „Integer“. Sie können ein neues Integer-Feld auch erstellen, indem Sie eine ganze Zahl angeben. Beispiel: Damit wird ein Integer-Feld mit dem Wert 23 erstellt:
    data['MyNewField'] = 23;
    java.lang.Long(Zahl)
    Erstellt ein Feld mit dem Datentyp „Long“.

    Um beispielsweise ein neues Feld mit Namen „Transactions“ mit dem Datentyp „Double“ und dem Wert 23,10 zu erstellen, würden Sie Folgendes angeben:

    data['Transactions'] = new com.java.lang.Double(23.10);

    So erstellen Sie ein neues Feld mit dem Datentyp „Date“ oder „Time“:

    Geben Sie im Skript-Editor den folgenden Code ein:

    data['FieldName'] = new constructor;

    Dabei kann es sich bei Konstruktor um eines der folgenden Elemente handeln:

    com.pb.spectrum.api.datetime.Date(Jahr,Monat,Tag)
    Erstellt ein Feld mit dem Datentyp „Date“. 23. Dezember 2013 wäre beispielsweise:
    2013,12,23
    com.pb.spectrum.api.datetime.Time(Stunde,Minute,Sekunde)
    Erstellt ein Feld mit dem Datentyp „Time“. 16:15 Uhr wäre beispielsweise:
    16,15,0
    .
    com.pb.spectrum.api.datetime.DateTime(Jahr,Monat,Tag,Stunde,Minute,Sekunde)
    Erstellt ein Feld mit dem Datentyp „DateTime“. 16:15 Uhr am 23. Dezember 2013 wäre beispielsweise:
    2013,12,23,16,15,0

    Um beispielsweise ein neues Feld mit Namen „TransactionDate“ mit dem Datentyp „Date“ und dem Wert 23. Dezember 2013 zu erstellen, würden Sie Folgendes angeben:

    data['TransactionDate'] = new com.pb.spectrum.api.datetime.Date(2013,12,23);
    So erstellen Sie ein neues Feld mit einem Datentyp „boolean“:

    Geben Sie im Skript-Editor den folgenden Code ein:

    data['FieldName'] = true or false;

    Beispiel: Um ein Feld mit Namen „IsValidated“ zu erstellen und es auf „false“ (falsch) zu setzen, würden Sie Folgendes angeben:

    data['IsValidated'] = false;
    So erstellen Sie ein neues Druckausgabefeld:

    Erstellen Sie mit der Methode factory.create() neue Felder in einem Datensatz. Fügen Sie dann mithilfe des „leftShift“-Operators << den neuen Datensatz an das Listenfeld an.

    NewListField = []
    
    NewRecord = factory.create()
    NewRecord['NewField1'] = "Value"
    NewRecord['NewField12'] = "Value"
    ...
    NewListField << NewRecord
    
    NewRecord = factory.create()
    NewRecord['NewField1'] = "Value"
    NewRecord['NewField12'] = "Value"
    ...
    NewListField << NewRecord
    data['ListOfRecords'] = NewListField

    Beispiel: Hiermit wird ein neues Listenfeld mit Namen „addresses“ erstellt, das aus zwei „address“-Datensätzen besteht.

    addresses = []
    address = factory.create()
    address['AddressLine1'] = "123 Main St"
    address['PostalCode'] = "12345"
    addresses << address
    
    address = factory.create()
    address['AddressLine1'] = "PO Box 350"
    address['PostalCode'] = "02134"
    addresses << address
    data['Addresses'] = addresses

    Sie können auch ein neues Listenfeld erstellen, das eine Liste von einzelnen Feldern statt einer Liste von Datensätzen enthält. Beispiel: Hiermit wird ein neues Listenfeld mit Namen „PhoneNumbers“ erstellt, das private und geschäftliche Telefonnummern enthält:

    phoneNumbers = []
    phoneNumbers << data['HomePhone']
    phoneNumbers << data['WorkPhone']
    data['PhoneNumbers'] = phoneNumbers

    So verketten Sie Felder:

    Verwenden Sie das Symbol +. So wird beispielsweise mit Folgendem das Feld „FirstName“ mit dem Feld „LastName“ zu einem Wert verkettet und dieser im Feld „FullName“ gespeichert.

    String fullname = data['FirstName'] + ' ' + data['LastName'];
    data['FullName']=fullname; 

    In diesem Beispiel gibt es zwei Eingabefelder („AddressLine1“ und „AddressLine2“), die verkettet und in das Ausgabefeld „Address“ geschrieben werden.

    address1 = data['AddressLine1']; 
    address2 = data['AddressLine2']; 
    data['Address']=address1+ ',' + address2; 

    So parsen Sie ein Feld:

    Identifizieren Sie ein Trennzeichen und verwenden Sie dann substring, um das Feld zu parsen. Im folgenden Beispiel gilt: Wenn das Feld „PostalCode“ größer ist als fünf Zeichen, werden die fünfstellige Postleitzahl und der +4-Teil getrennt und in separate Felder im Ausgabesatz geschrieben.

    if (data['PostalCode'].length() > 5) 
    { 
    	 String postalCode = data['PostalCode']; 
    	 int separatorPosition = postalCode.indexOf('-'); 
    	 String zip = postalCode.substring(0, separatorPosition); 
    	 String plusFour = postalCode.substring( 
    			 separatorPosition + 1, 
    			 postalCode.length(); 
    	 data['Zip']=zip; 
     	data['PlusFour']=plusFour; 
    } 

    So führen Sie eine bedingte Verarbeitung aus:

    Verwenden Sie eine if- oder switch-Anweisung. Dies sind die gängigsten Konstrukte für bedingte Verarbeitung. Weitere Informationen finden Sie unter groovy-lang.org.

    In diesem Beispiel wird das Feld „AddressCity“ auf die erste Adresszeile und den Ortsnamen gesetzt, wenn die Stadt Austin ist.

    city = data['City']; 
    address1 = data['AddressLine1'] 
    if(city.equals('Austin')) 
    data['AddressCity']=address1 +',' + city; 

    So führen Sie Schleifen aus:

    Verwenden Sie die Schleife for. Dies sollte das einzige Konstrukt für Schleifen sein, das Sie benötigen. Weitere Informationen zu Schleifen bzw. zur Syntax finden Sie unter groovy-lang.org.

    So vergrößern Sie Daten:

    Definieren Sie eine Konstante und verwenden Sie das Verkettungszeichen + Beispiel: Das folgende Skript fügt das Wort „Incorporated“ an das Feld „FirmName“ an.

    firmname = data['FirmName']; 
    constant = 'Incorporated'; 
    if(firmname.length() > 0)
    data['FirmName']=firmname + ' ' + constant;

    So greifen Sie auf eine zur Laufzeit angegebene Option zu:

    Wenn für den Datenfluss Laufzeitoptionen aktiviert sind, können Sie mit folgender Syntax auf die dem Datenfluss zur Laufzeit übergebenen Einstellungen zugreifen:

    options.get("optionName")

    Wenn Sie etwa auf eine Option namens casing zugreifen wollten, würden Sie im benutzerdefinierten Transformationsskript Folgendes angeben:

    options.get("casing")
  7. Nachdem Sie mit der Eingabe des Skripts fertig sind, klicken Sie auf die Schaltfläche „X“ im Fenster, um den Editor zu schließen.
  8. Wählen Sie im Feld Eingabefelder das bzw. die Felder aus, auf das bzw. die Sie die Transformation anwenden möchten.
  9. Geben Sie im Feld Ausgabefelder das Feld an, in das Sie die Ausgabe der Transformation schreiben möchten. Falls erforderlich, können Sie ein neues Feld definieren, indem Sie rechts neben dem Feld Ausgabefelder auf die Schaltfläche Hinzufügen klicken.
  10. Wenn Sie fertig sind, klicken Sie unten im Fenster auf die Schaltfläche Hinzufügen.
  11. Klicken Sie auf OK.