Création d'une transformation personnalisée

Le stage Transformer dispose de transformations prédéfinies qui effectuent un éventail de transformations de données communes. Si les transformations prédéfinies ne répondent pas à vos besoins, vous pouvez écrire un script de transformation personnalisé via Groovy. Cette procédure explique comment créer des transformations personnalisées de base à l'aide de Groovy. Pour obtenir une documentation complète sur Groovy, consultez l'adresse suivante : groovy-lang.org.

  1. Dans Enterprise Designer, ajoutez un stage Transformer au flux de données.
  2. Double-cliquez sur le stage Transformer.
  3. Cliquez sur Ajouter.
  4. Sous Général, cliquez sur Personnalisé.
  5. Dans le champ Custom transform name, entrez un nom pour la transformation que vous créerez. Ce nom doit être unique.
  6. Cliquez sur Éditeur de script.

    Cet éditeur fournit un certain nombre de fonctionnalités qui facilitent le développement de la transformation, comme les fonctions et les champs de listes de palettes et de réalisation du code.

    Tâche Instructions

    Pour ajouter une fonction, procédez comme suit :

    Dans le volet Fonctions, double-cliquez sur la fonction à ajouter.

    Remarque : Les fonctions répertoriées dans l'éditeur sont conçues pour faciliter l'écriture de scripts de transformation personnalisée. Elles exécutent des fonctions qui nécessiteraient plusieurs lignes de code Groovy. Il ne s'agit pas de fonctions Groovy standard.

    Pour obtenir la valeur d'un champ de flux de données, procédez comme suit :

    Dans le volet Champs d'entrée, double-cliquez sur le champ d'entrée de votre choix. Ce qui suit sera ajouté à votre script :
    data['FieldName']

    Par exemple, si vous souhaitez obtenir la valeur du champ CurrentBalance, ce qui suit sera ajouté :

    data['CurrentBalance']

    Pour définir la valeur d'un champ de flux de données, procédez comme suit :

    Entrez le code suivant dans l'éditeur de script :

    data['FieldName']=NewValue

    Par exemple, pour définir le champ Day sur le jour de la semaine contenu dans le champ PurchaseDate :

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

    Dans cet exemple, la fonction dayOfWeek() permet d'obtenir le jour de la valeur de date du champ PurchaseDate et le résultat est écrit dans le champ Day.

    Conseil : Vous pouvez double-cliquer sur le nom du champ de sortie dans le volet Champ de sortie pour ajouter la référence de champ au script.

    Pour créer un nouveau champ à l'aide d'un type de données numériques

    Entrez le code suivant dans l'éditeur de script :

    data['FieldName'] = new constructor;

    constructeur est l'un des éléments suivants :

    java.lang.Double(nombre)
    Crée un champ avec des données de type Double.
    java.lang.Float(nombre)
    Crée un champ avec des données de type Float.
    java.lang.Integer(nombre)
    Crée un champ avec des données de type Integer. Vous pouvez également créer un nouveau champ d'entier en indiquant un nombre complet. L'exemple suivant crée un champ d'entier de valeur 23 :
    data['MyNewField'] = 23;
    java.lang.Long(nombre)
    Crée un champ avec des données de type Long.

    Par exemple, pour créer un nouveau champ nommé « Transactions » avec un type de données Double et la valeur 23.10, vous pouvez indiquer comme suit :

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

    Pour créer un nouveau champ à l'aide d'un type de données Date ou Time :

    Entrez le code suivant dans l'éditeur de script :

    data['FieldName'] = new constructor;

    constructeur est l'un des éléments suivants :

    com.pb.spectrum.api.datetime.Date(année,mois,jour)
    Crée un champ avec des données de type Date. Par exemple, December 23, 2013 serait :
    2013,12,23
    com.pb.spectrum.api.datetime.Time(heures,minutes,secondes)
    Crée un champ avec des données de type Time. Par exemple, 4:15 PM serait :
    16,15,0
    .
    com.pb.spectrum.api.datetime.DateTime(année,mois,jour,heures,minutes,secondes)
    Crée un champ avec des données de type DateTime. Par exemple, 4:15 PM on December 23, 2013 serait :
    2013,12,23,16,15,0

    Par exemple, pour créer un nouveau champ nommé « TransactionDate » avec un type de données Date et la valeur December 23, 2013, vous pouvez indiquer comme suit :

    data['TransactionDate'] = new com.pb.spectrum.api.datetime.Date(2013,12,23);
    Pour créer un nouveau champ avec des données de type Boolean

    Entrez le code suivant dans l'éditeur de script :

    data['FieldName'] = true or false;

    Par exemple, pour créer un champ IsValidated et le définir sur false, vous devez indiquer comme suit :

    data['IsValidated'] = false;
    Pour créer un champ de liste

    Utilisez la méthode factory.create() pour créer de nouveaux champs dans un enregistrement, puis utilisez l’opérateur leftShift << permettant d’ajouter le nouvel enregistrement dans le champ de liste.

    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

    Par exemple, cela crée un nouveau champ de liste appelé « addresses », composé de deux enregistrements « address ».

    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

    Vous pouvez également créer un champ de liste contenant une liste de champs individuels plutôt qu’une liste d’enregistrements. Par exemple, cela crée un champ de liste appelé PhoneNumbers contenant des numéros de téléphone à domicile et professionnels :

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

    Pour concaténer les champs, procédez comme suit :

    Utilisez le symbole +. Cet exemple concatène le champ FirstName et le champ LastName en une valeur et la stocke dans le champ FullName

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

    Dans l'exemple suivant, il existe deux champs d'entrée (AddressLine1 et AddressLine2) qui sont concaténés et écrits dans le champ de sortie Address.

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

    Pour analyser un champ, procédez comme suit :

    Identifiez un caractère de séparation, puis utilisez substring pour analyser le champ. Dans l'exemple suivant, si le champ PostalCode est supérieur à cinq caractères, celui-ci séparera le code ZIP à cinq caractères et la portion +4, et les écrit sur des champs distincts dans l'enregistrement de sortie.

    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; 
    } 

    Pour effectuer un traitement conditionnel, procédez comme suit :

    Utilisez une instruction if ou switch. Il s'agit des constructions de traitement conditionnel les plus courantes. Pour plus d'informations, consultez le site Web groovy-lang.org.

    Cet exemple définit le champ AddressCity sur la première ligne d'adresse et nom de ville si la ville est Austin.

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

    Pour effectuer une mise en boucle, procédez comme suit :

    Utilisez la boucle for. Il s'agit de la seule construction de bouclage dont vous avez besoin. Pour plus d'informations sur le bouclage ou la syntaxe, consultez l'adresse suivante : groovy-lang.org.

    Pour augmenter des données, procédez comme suit :

    Définissez une constante et utilisez le caractère de concaténation +. Par exemple, le script suivant ajoute le mot « Incorporated » à la fin du champ FirmName.

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

    Pour accéder à une option spécifiée lors de l'exécution, procédez comme suit :

    Si le flux de données présente des options d'exécution activées, vous pouvez accéder aux paramètres transmis au flux de données lors de l'exécution à l'aide de la syntaxe suivante :

    options.get("optionName")

    Par exemple, pour accéder à une option nommée casing, vous devez inclure cela dans votre script de transformation personnalisée :

    options.get("casing")
  7. Après avoir terminé de saisir votre script, cliquez sur le bouton « X » dans la fenêtre pour fermer l'éditeur.
  8. Dans le champ Input fields, sélectionnez le ou les champs auxquels appliquer la transformation.
  9. Dans le champ Output fields, spécifiez le champ dans lequel vous souhaitez écrire la sortie de la transformation. Si nécessaire, vous pouvez définir un nouveau champ en cliquant sur le bouton Ajouter à droite du champ Champs de sortie.
  10. Lorsque vous avez terminé, cliquez sur le bouton Ajouter en bas de la fenêtre.
  11. Cliquez sur OK.