Вы находитесь на странице: 1из 23

Tutorial del Generador

El sentido de la vida 2.0

Introduccin:
A partir de la documentacin 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 informacin 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.

Workflow

Los canales llaman a CMM a travs 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 transformacin Channel2Backend.xsl y

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 transformacin Backend2Channel.xsl para devolver un xml a TMF y este luego se lo enviar al canal que inici la transaccin.

Formatos de documentos CICS


HEADER-STAF X(109) Parmetros de comunicacin

WS-OPCION

X(0001)

Opcin (I= Ingreso E=Elimina)

WS-NRT-CLI

X(0009)

Rut Cliente

WS-DRT-CLI

X(0001)

DV Rut Cliente

WS-COD-BCO

X(0003)

Cdigo Banco

WS-NUM-SEQ

X(0010)

Nmero Secuencia

......

Formato de documentos CMM


String_s CICS/PLMC1075/WSOPCION CICS/PLMC1075/WSNRT-CLI CICS/PLMC1075/WSDRT-CLI Opcin. Valor fijo E Rut Cliente

customerIdentification.identificationNum S ber customerIdentification.identificationCom S plement frequentlyUsedAccount.frequentlyUsed AccountId S

String_s

String_s

Digito Verificador cliente Nmero de secuencia.

String_s

CICS/PLMC1075/WSNUM-SEQ

Formato del CSV Header:


"coreType=fixed coreHeaderLenght=109 baseXslIncludedInRequest=EstadoInvokerBaseRequest.xsl baseXslIncludedInResponse=EstadoInvokerBaseResponse.x sl serviceVersion=1.0"

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,,,

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

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<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 coleccin de elementos. o (vaco): Depende el resto de los parmetros puede ser tomado como la definicin de una variable, escribir un valor, aplicar un template, etc. o X: Toda la lnea se ignora, sirve para agregar comentarios

Por ejemplo: X, Empiezo a crear las variables 1,customerIdentification entidad customerIdentification) (Es un comentario) (comienza la

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

1- NombreEndidad: Dependiendo el valor de Quantity tiene diferente comportamiento Si Quantity es > 0: Se toma como o <nombreEntidad>:<version>:<attrName>:<attrDataModel> Si es vaco y es el nombre de una entidad definida anteriormente se toma como fin de dicha entidad. Si es vaco: 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">

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

2- DataTypeAndLength: Solo cuando Quantity es vaco. Determina el tipo y la longitud del campo. Los valores posibles son: o X(<cant>) String de <cant> caracteres o 9(<cant>) Integer de <cant> caracteres o 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 response Por ejemplo: o D Date. Solo se usa en los ,WS-NRT-CLI,X(0009),identificationNumber,,,,WS-NRT-CLI ---> campostipo generic del response Si el valor es menor se completa con espacios a derecha Es de de String de longitud 9.

,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

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

3- PotentialEntityName: Solo cuando Quantity es vaco. 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

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

4- Ignore: Solo cuando Quantity es vaco. 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.

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

5- SchemaDataType: No se utiliza actualmente.

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

6- Transformation: Solo cuando Quantity es vaco. 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 parmetros 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 parmetros, infoString es el valor del campo que se est leyendo, osea paginationInfo y searchString es 'nBlocks'

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

7- TargetVariable: Solo cuando Quantity es vaco. En caso de tener algn 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 WSNRT-CLI.

Descripcin del formato CSV


<Quantity>,<NombreEntidad>,<DataTypeAndLength>,<PotentialEntityName>,<Ignore>,<SchemaData Type>,<Transformation>,<TargetVaraible>,<AssertType>

8- AssertType: Solo cuando Quantity es vaco. (Todava no es muy utilizado por temas de datos) Identifica qu elementos sern considerados para autogenerar la validacin por assert, y el tipo de assert. Los tipos de assert tolerados son: o AEqual: Validacin por igualdad. o !AEqual: Validacin por distinto. o ANull: Validacin por igual a null. o !ANull: Validacin por distinto de null.

Casos especiales
Se permite ignorar colecciones completas. Para esto hay que agregar en la definicin de la coleccin un :X al final. Por ejemplo: 25,accounts:X 1,account:1.0 1,subproduct ,WS-SUB-PRODUCTO,X(04),subproductId,,,, ,subproduct ,WS-SUB-PRODUCTO,X(04),mnemonic,,,, ,account:1.0 ,accounts De este modo, se actualiza la posicin para el resto de los elementos, pero no se crea el tag <collection name=accounts /> en el resultado.

Casos especiales (cont.)


Para los servicios que informen la cantidad de repeticiones en la coleccin final, es posible utilizar esa informacin para evitar tener elementos. con datos de ms si es que el servicio agrega basura al final del mensaje. Para esto hay que agregar a la definicin de la coleccin [<PosInicial>; <Long>] (Notar que el separador es un punto y coma, y no una coma) 25,accounts[90;02] 1,account:1.0 1,subproduct ,WS-SUB-PRODUCTO,X(04),subproductId,,,, ,subproduct ,WS-SUB-PRODUCTO,X(04),mnemonic,,,, ,account:1.0 ,accounts

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:accountsNames 1,account:1.0 1,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>>.

Casos especiales (cont.)


Se agrega la posibilidad de agregar condiciones al cdigo generado. Para eso hay que poner en el CSV lo siguiente 1,choose 1,when:<condicin> ,WC-BCC-PAR-COD-POS,X(07),mnenomic,,,, ,when 1,when:$juan = $pepe ,WC-BCC-PAR-COD-COS,X(07),mnenomic,,,, ,when 1,otherwise ,WC-BCC-PAR-COD-TOS,X(07),mnenomic,,,, ,otherwise ,choose

Casos especiales (cont.)


Se crea una entidad choose cuyos hijos pueden ser uno o ms entidades when con una condicin y cero o una entidad otherwise (sin condicin). Hay que tener en cuenta que: En el RESPONSE cada rama avanza independientemente la posicin, as que todas deberan leer la misma cantidad de datos para que sean consistentes los datos que vengan despus. Las variables que se crean tienen scope local, as que si las crean dentro del choose no las podrn usar desde afuera. Las condiciones no deben contener los siguientes caracteres: coma, dos puntos, > (mayor) o < (menor)