tutorial generador bech

23
Tutorial del Generador El sentido de la vida 2.0

Upload: ale222

Post on 14-Apr-2015

70 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Tutorial Generador BECH

Tutorial del Generador

El sentido de la vida 2.0

Page 2: Tutorial Generador BECH

• A partir de la documentación provista por el banco y Technisys se crea un archivo csv donde se codifican los mapeos entre los campos del modelo de datos de Technisys y los campos de CICS del banco.

• El generador toma esta información y genera las transformaciones Channel2Backend.xsl y Backend2Channel.xsl.

• Si bien el generador es una herramienta muy útil como kick off, a veces es necesario modificar los archivos generados, aunque se está trabajando para que no sea necesario.

Introducción:

Page 3: Tutorial Generador BECH

Workflow

• Los canales llaman a CMM a través del TMF.

• A CMM le llega un xml con los datos del servicio a ejecutar.

• Una vez que se determina que se debe invocar un servicio CICS, el Workflow llama al QueryServiceFlow.

• El QueryServiceFlow, dependiendo del serviceId del mensaje ejecuta la transformación Channel2Backend.xsl y genera la traza de entrada para el CICS.

Page 4: Tutorial Generador BECH

Workflow (cont.)

• La traza obtenida es enviada a CICS donde es procesada y devuelve otra traza de respuesta.

• El QueryServiceFlow obtiene la traza de respuesta y le aplica la transformación Backend2Channel.xsl para devolver un xml a TMF y este luego se lo enviará al canal que inició la transacción.

Page 5: Tutorial Generador BECH

Formatos de documentos CICSHEADER-STAF X(109) Parámetros de comunicación

WS-OPCION X(0001) Opción (I= Ingreso ó E=Elimina)

WS-NRT-CLI X(0009) Rut Cliente

WS-DRT-CLI X(0001) DV Rut Cliente

WS-COD-BCO X(0003) Código Banco

WS-NUM-SEQ X(0010) Número Secuencia

......

Page 6: Tutorial Generador BECH

Formato de documentos CMM

String_s CICS/PLMC1075/WS-OPCION

Opción.Valor fijo E

customerIdentification.identificationNumber

Sí String_s CICS/PLMC1075/WS-NRT-CLI

Rut Cliente

customerIdentification.identificationComplement

Sí String_s CICS/PLMC1075/WS-DRT-CLI

Digito Verificador cliente

frequentlyUsedAccount.frequentlyUsedAccountId

Sí String_s CICS/PLMC1075/WS-NUM-SEQ

Número de secuencia.

Page 7: Tutorial Generador BECH

Formato del CSV

"coreType=fixed

coreHeaderLenght=109

baseXslIncludedInRequest=EstadoInvokerBaseRequest.xsl

baseXslIncludedInResponse=EstadoInvokerBaseResponse.xsl

serviceVersion=1.0"

Header:

Page 8: Tutorial Generador BECH

Formato del CSV (Cont.)REQUEST

X, Empiezo a crear las variables

1,customerIdentification

,WS-DRT-CLI,X(0001),identificationComplement,,,,WS-DRT-CLI

,WS-NRT-CLI,X(0009),identificationNumber,,,,WS-NRT-CLI

,customerIdentification

1,frequentlyUsedAccount:1.0:frequentlyUsedAccount:product.financials

,WS-NUM-SEQ,9(010),frequentlyUsedAccountId,,,,WS-NUM-SEQ

,frequentlyUsedAccount:1.0:frequentlyUsedAccount:product.financials

,WS-COD-CNL,X(0003),channelId,,,"getChannelIdFromHeader2CICS{}",WS-COD-CNL

X,Empiezo a escribir el mensaje

,WS-OPCION,X(0001),WS-OPCION,,,"'E'",

,WS-NRT-CLI,X(0009),WS-NRT-CLI,,,"$WS-NRT-CLI",

,WS-DRT-CLI,X(0001),WS-DRT-CLI,,,"$WS-DRT-CLI",

,WS-COD-BCO,X(0003),WS-COD-BCO,X,,,

,WS-NUM-SEQ-N,9(0010),WS-NUM-SEQ-N,,,"$WS-NUM-SEQ",

,WS-COD-PRD-DES,X(0005),WS-COD-PRD-DES,X,,,

Page 9: Tutorial Generador BECH

Formato del CSV (Cont.)RESPONSE

X,Declaracion de variables

,WS-SAL-COD-RTN,X(03),WS-SAL-COD-RTN,,,,WS-SAL-COD-RTN

,WS-SAL-GLS-RTN,X(30),WS-SAL-GLS-RTN,,,,WS-SAL-GLS-RTN

X,Comienzo a escribir el body

1,generic

,WS-SAL-COD-RTN,X(03),processResultCode,,,"$WS-SAL-COD-RTN",

,generic

Page 10: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

0- Quantity: Este campo tiene diferentes funciones dependiendo el valor:o 1: Representa el comienzo de una entidad.o n (con n >1 ) representa el comienzo una colección de elementos.o (vacío): Depende el resto de los parámetros puede ser tomado como la definición de una

variable, escribir un valor, aplicar un template, etc.o X: Toda la línea se ignora, sirve para agregar comentarios

Por ejemplo:

X, Empiezo a crear las variables (Es un comentario)

1,customerIdentification (comienza la entidad customerIdentification)

Page 11: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

1- NombreEndidad: Dependiendo el valor de Quantity tiene diferente comportamiento

• Si Quantity es > 0: Se toma comoo <nombreEntidad>:<version>:<attrName>:<attrDataModel>

• Si es vacío y es el nombre de una entidad definida anteriormente se toma como fin de dicha entidad.

• Si es vacío: En caso que no haya un valor en PotentialEntityName se toma este valor como nombre.

Por ejemplo:

1,customerIdentification:1.0:cliente -----> <customerIdentification version="1.0" name="cliente">

1,customerIdentification:::product.financials ------->

<customerIdentification dataModel="product.financials">

Page 12: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

2- DataTypeAndLength: Solo cuando Quantity es vacío.

• Determina el tipo y la longitud del campo. Los valores posibles son:o X(<cant>) String de <cant> caractereso 9(<cant>) Integer de <cant> caractereso 9(<cant>)V<cantDec> Real con <cant> de parte entera y <cantDec>

decimales.o B Bool. Solo se usa en los

campos de generic del responseo D Date. Solo se usa en los

campos de generic del response

Por ejemplo:,WS-NRT-CLI,X(0009),identificationNumber,,,,WS-NRT-CLI --->

Es de tipo String de longitud 9. Si el valor es menor se completa con espacios a derecha

,WS-NUM-SEQ,9(010),frequentlyUsedAccountId,,,,WS-NUM-SEQ ----->Es de tipo integer de 10 posiciones. Si el valor es menor se completa con 0 a izquierda

Page 13: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

3- PotentialEntityName: Solo cuando Quantity es vacío.

• En caso de estar presente se utilizará como nombre de la entidad.

Por ejemplo:,WS-NRT-CLI,X(0009),identificationNumber,,,,--->

En este caso se crea el elemento identificationNumber

Page 14: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

4- Ignore: Solo cuando Quantity es vacío.

• Si hay una X en este lugar se ignora el campo.

Por ejemplo:,WS-SAL-GLS-RTN,X(30),WS-SAL-GLS-RTN,X,,,

En este caso el campo WS-SAL-GLS-RTN no se utiliza en la respuesta y puede ser ignorado.

Page 15: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

5- SchemaDataType: No se utiliza actualmente.

Page 16: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

6- Transformation: Solo cuando Quantity es vacío.

• En este campo se puede poner llamadas a templates o funciones. Tener en cuenta que debe agregarse entre comillas (").

• Para escribir una variable se utiliza simplemente "$<nombreVariable>"

• En caso de ser un template los parámetros se pasan con la forma "{<key>='value', <key2>='value2',...}"

Por ejemplo:,WS-COD-CNL,X(0003),channelId,,,"getChannelIdFromHeader2CICS{}",WS-COD-CNL

El valor de channelId se obtiene del template getChannelIdFromHeader2CICS

,CA1-WN-NBLOCK,9(03),paginationInfo,,,"getPagInfoValue{infoString=%,searchString='nBlocks'}",El template getPagInfoValue toma 2 parámetros, infoString es el valor del campo que se

está leyendo, osea paginationInfo y searchString es 'nBlocks'

Page 17: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

7- TargetVariable: Solo cuando Quantity es vacío.

• En caso de tener algún valor, se crea una variable con ese nombre que almacena el valor.

Por ejemplo:,WS-NRT-CLI,X(0009),identificationNumber,,,,WS-NRT-CLI --->

El valor del campo identificationNumber se guarda en una variable con nombre WS-NRT-CLI.

Page 18: Tutorial Generador BECH

Descripción del formato CSV<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaDat

aType>,<Transformation>,<TargetVaraible>,<AssertType>

8- AssertType: Solo cuando Quantity es vacío. (Todavía no es muy utilizado por temas de datos)• Identifica qué elementos serán considerados para autogenerar la validación por assert, y el

tipo de assert. Los tipos de assert tolerados son:o AEqual: Validación por igualdad.o !AEqual: Validación por distinto.o ANull: Validación por igual a null.o !ANull: Validación por distinto de null.

Page 19: Tutorial Generador BECH

Casos especiales

● Se permite ignorar colecciones completas. Para esto hay que agregar en la definición de la colección un :X al final. Por ejemplo:

25,accounts:X1,account:1.01,subproduct,WS-SUB-PRODUCTO,X(04),subproductId,,,,,subproduct,WS-SUB-PRODUCTO,X(04),mnemonic,,,,,account:1.0,accounts

De este modo, se actualiza la posición para el resto de los elementos, pero no se crea el tag <collection name=”accounts” /> en el resultado.

Page 20: Tutorial Generador BECH

Casos especiales (cont.)

● Para los servicios que informen la cantidad de repeticiones en la colección final, es posible utilizar esa información para evitar tener elementos. con datos de más si es que el servicio agrega basura al final del mensaje. Para esto hay que agregar a la definición de la colección [<PosInicial>; <Long>] (Notar que el separador es un punto y coma, y no una coma)

25,accounts[90;02]1,account:1.01,subproduct,WS-SUB-PRODUCTO,X(04),subproductId,,,,,subproduct,WS-SUB-PRODUCTO,X(04),mnemonic,,,,,account:1.0,accounts

Page 21: Tutorial Generador BECH

Casos especiales (cont.)

● Se permite generar los tags de colecciones con un nombre especificado en el CSV, para esto hay que poner:<cantidad>, <nombreTag>:<version>:<attrName> por ejemplo:

25,accounts:1.0:accountsNames1,account:1.01,subproduct,WS-SUB-PRODUCTO,X(04),subproductId,,,,,subproduct,WS-SUB-PRODUCTO,X(04),mnemonic,,,,,account:1.0,accounts

De esta forma se crea un tag <accounts name=”accountsNames”>. En caso de no especificar el :<version>:<attrName> se utilizará la forma por defecto <collection name=”<valor>”>.

Page 22: Tutorial Generador BECH

Casos especiales (cont.)

● Se agrega la posibilidad de agregar condiciones al código generado. Para eso hay que poner en el CSV lo siguiente

1,choose1,when:<condición>,WC-BCC-PAR-COD-POS,X(07),mnenomic,,,,,when1,when:$juan = $pepe,WC-BCC-PAR-COD-COS,X(07),mnenomic,,,,,when1,otherwise,WC-BCC-PAR-COD-TOS,X(07),mnenomic,,,,,otherwise,choose

Page 23: Tutorial Generador BECH

Casos especiales (cont.)

Se crea una entidad “choose” cuyos hijos pueden ser uno o más entidades “when” con una condición y cero o una entidad otherwise (sin condición). Hay que tener en cuenta que:

• En el RESPONSE cada rama avanza independientemente la posición, así que todas deberían leer la misma cantidad de datos para que sean consistentes los datos que vengan después.

• Las variables que se crean tienen scope local, así que si las crean dentro del choose no las podrán usar desde afuera.

• Las condiciones no deben contener los siguientes caracteres: coma, dos puntos, > (mayor) o < (menor)