Creación de una transformación personalizada

La etapa Transformer (Transformador) cuenta con transformaciones predefinidas que realizan una variedad de transformaciones de datos comunes. Si las transformaciones predefinidas no satisfacen sus necesidades, puede escribir una secuencia de comandos de transformación personalizada mediante Groovy. Este procedimiento describe cómo crear transformaciones personalizadas básicas mediante Groovy. Para conocer la documentación completa de Groovy, consulte groovy-lang.org.

  1. En Enterprise Designer, agregue una etapa Transformer al flujo de datos.
  2. Haga doble clic en la etapa Transformer.
  3. Haga clic en Agregar.
  4. En General, haga clic en Personalizada.
  5. En el campo Nombre de la transformación personalizada, ingrese el nombre para la transformación que creará. Ese nombre debe ser único.
  6. Haga clic en Editor de secuencia de comandos.

    Este editor proporciona una variedad de funciones para facilitar el progreso de su transformación, como por ejemplo, finalización de códigos y paletas de listas de funciones y campos.

    Tarea Instrucciones

    Para agregar una función

    En el panel Funciones, haga doble clic en la función que desee agregar.

    Nota: Las funciones que se indican en el editor son secuencias proporcionadas para facilitar la escritura de las secuencias de comandos de transformaciones personalizadas. Llevan a cabo a las funciones que de otra manera requerirían varias líneas de código Groovy para la realización. No se trata de funciones Groovy estándar.

    Para obtener el valor de un campo de flujo de datos

    En el panel Campos de entrada, haga doble clic en el campo de entrada que desee. Lo siguiente se agregará a la secuencia de comandos:
    data['FieldName']

    Por ejemplo, si desea obtener el valor del campo CurrentBalance, lo siguiente se agregará:

    data['CurrentBalance']

    Para establecer el valor en un campo de flujo de datos

    Ingrese el siguiente código en el editor de secuencia de comandos:

    data['FieldName']=NewValue

    Por ejemplo, para configurar el campo Día en el día de la semana que se incluye en el campo PurchaseDate:

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

    En este ejemplo, la función dayOfWeek() se usa para obtener el día del valor de fecha en el campo PurchaseDate, y el resultado se escribe en el campo Día.

    Consejo: Puede hacer doble clic en el nombre del campo de salida en el panel Campos de salida para agregar la referencia de campo a la secuencia de comandos.

    Para crear un campo nuevo mediante un tipo de dato numérico

    Ingrese el siguiente código en el editor de secuencia de comandos:

    data['FieldName'] = new constructor;

    Donde constructor es uno de los siguientes:

    java.lang.Double(número)
    Crea un campo con un tipo de dato Doble.
    java.lang.Float(número)
    Crea un campo con un tipo de dato Libre.
    java.lang.Integer(número)
    Crea un campo con un tipo de dato Entero. También puede crear un nuevo campo entero al especificar un número entero. Por ejemplo, esto creará un campo entero con un valor de 23:
    data['MyNewField'] = 23;
    java.lang.Long(número)
    Crea un campo con un tipo de dato Largo.

    Por ejemplo, para crear un nuevo campo llamado "Transacciones" con un tipo de dato Doble y el valor 23,10, debe especificar lo siguiente:

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

    Para crear un campo nuevo mediante un tipo de dato de fecha u hora

    Ingrese el siguiente código en el editor de secuencia de comandos:

    data['FieldName'] = new constructor;

    Donde constructor es uno de los siguientes:

    com.pb.spectrum.api.datetime.Date(año,mes,día)
    Crea un campo con un tipo de dato de fecha. Por ejemplo, 23 de diciembre de 2013 sería:
    2013,12,23
    com.pb.spectrum.api.datetime.Time(hora,minuto,segundo)
    Crea un campo con un tipo de dato de hora. Por ejemplo, 4:15 PM sería:
    16,15,0
    .
    com.pb.spectrum.api.datetime.DateTime(año,mes,día,hora,minuto,segundo)
    Crea un campo con un tipo de dato DateTime. Por ejemplo, 4:15 PM el 23 de diciembre de 2013 sería:
    2013,12,23,16,15,0

    Por ejemplo, para crear un nuevo campo llamado "TransactionsDate" con un tipo de dato Fecha y el valor 23 de diciembre de 2013, debe especificar lo siguiente:

    data['TransactionDate'] = new com.pb.spectrum.api.datetime.Date(2013,12,23);
    Crea un campo con un tipo de dato Booleano.

    Ingrese el siguiente código en el editor de secuencia de comandos:

    data['FieldName'] = true or false;

    Por ejemplo, para crear un campo llamado IsValidated y ajustarlo en falso, debe especificar lo siguiente:

    data['IsValidated'] = false;
    Para crear un nuevo campo de lista

    Use el método factory.create() para crear nuevos campos en un registro y luego use el operador leftShift << para anexar el nuevo registro al campo de lista.

    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

    Por ejemplo, esto crea un nuevo campo de lista llamado “direcciones” que consta de dos registros de “dirección”.

    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

    También puede crear un nuevo campo de lista que contiene una lista de campos individuales en lugar de una lista de registros. Por ejemplo, esto crea un nuevo campo de lista llamado PhoneNumbers que contiene números de teléfono de la casa y el trabajo:

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

    Para concatenar campos

    Utilice el símbolo +. El siguiente ejemplo concatena los campos FirstName y LastName en un valor y los almacena en el campo FullName.

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

    En el siguiente ejemplo hay dos campos de entrada (AddressLine1 y AddressLine2) los cuales se concatenan y escriben en el campo de salida Dirección.

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

    Para analizar un campo

    Identifique un carácter de separación y luego utilice substring para analizar el campo. En el siguiente ejemplo, si el campo PostalCode incluye más de cinco caracteres, se separa el código postal de cinco caracteres de la porción +4 y se los escribe en campos distintos en el registro de salida.

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

    Para realizar un procesamiento condicional

    Utilice una instrucción if o switch. Estas son las construcciones de procesamiento condicional más comunes. Para obtener más información, consulte groovy-lang.org.

    Este ejemplo configura el campo AddressCity como la primera línea de dirección y ciudad si la ciudad es Austin.

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

    Para realizar bucles

    Utilice el bucle for. Esta es la única construcción de bucles que se necesita. Para obtener más información sobre bucles o sintaxis, consulte groovy-lang.org.

    Para aumentar datos

    Defina una constante y use el carácter de concatenación +. Por ejemplo, la siguiente secuencia de comandos adjunta la palabra "Incorporated" al campo FirmName.

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

    Para acceder a una opción especificada durante la ejecución

    Si el flujo de datos tiene habilitadas las opciones de ejecución, puede acceder a la configuración pasada a la ejecución mediante el uso de la siguiente sintaxis:

    options.get("optionName")

    Por ejemplo, para acceder a una opción denominada casing (uso de mayúsculas y minúsculas), debe incluir esto en la secuencia de comandos de transformación personalizada:

    options.get("casing")
  7. Después de que termine de ingresar la secuencia de comandos, haga clic en el botón "X" en la ventana, para cerrar el editor.
  8. En el campo Campos de entrada, seleccione el o los campos a los cuales desee aplicar la transformación
  9. En el campo Campos de salida, especifique el campo en el cual desee escribir el resultado de la transformación. Si es necesario, puede definir un nuevo campo al hacer clic en el botón Agregar que está a la derecha del campo Campos de salida.
  10. Cuando termine, haga clic en el botón Agregar que está en la parte inferior de la ventana.
  11. Haga clic en Aceptar.