DSL 1 - Presentando el DSL de Icon

Descripción general

Encontrará el siguiente video (10 minutos de duración) una introducción muy útil a la estructura básica de un IPF application. También proporciona una visión general de alto nivel de los conceptos de DSL discutidos en esta sección del tutorial.

Conceptos

Esta sección del tutorial introduce los conceptos dentro de la Icon DSL de pagos. Es un recorrido teórico y no requiere acceso a ningún componente de IPF.

Business Data

Comenzamos considerando los datos. Los datos son lo que impulsa el procesamiento y la toma de decisiones a lo largo de IPF.

El primer concepto que consideramos, por lo tanto, es el "Business Data Elemento". Tiene cuatro propiedades:

  • Un nombre

  • Una descripción

  • Un "tipo de dato" - el tipo de dato puede ser cualquier Java tipo, ya sea clases estándar como String, Integer, etc. o sus propios tipos personalizados.

  • Una "categoría de datos" - un campo opcional, los valores posibles son un conjunto enumerado que se refiere al tipo de datos que se está representando por esto BusinessDataElement. Esto Data Category la etiqueta es utilizada por varios componentes de IPF, como IPF Data Egress y Operational Data Store, que puede registrar datos capturados de Process Flow s automáticamente, dependiendo de la Data Category. Existen tres categorías de datos fundamentales:

    • ESTRUCTURA_DE_DATOS_DE_MENSAJE - Estos son datos que provienen de mensajes financieros externos que a menudo se modelan como ISO20022 componentes de mensaje dentro de IPF.

    • ESTRUCTURA_DE_DATOS_DE_PROCESAMIENTO - Estos son datos recopilados durante el procesamiento de pagos, como información de metadatos y tipo de pago.

    • IDENTIFICADOR_ADICIONAL - Esto se aplica a los elementos de datos que representan identificadores adicionales que deben asociarse con el pago.

Cualquier MPS El proyecto puede tener tantos elementos de datos comerciales diferentes como necesite. Estos elementos se definen dentro de un "Business Data "Library" que es simplemente una colección de datos empresariales relacionados y se pueden definir tantas bibliotecas de datos empresariales diferentes como sea necesario.

IPF proporciona una serie de bibliotecas de datos empresariales preconfiguradas. Por defecto, a cualquier proceso se le asigna la biblioteca "error", que proporciona elementos predeterminados para manejar fallos en el flujo, a saber:
  • Failure Event Name-este es el nombre del evento que registró la primera falla en un flujo.

  • Failure Response Code-este es el código de respuesta IPF para la falla.

  • Failure Reason Code-este es el código de razón IPF para la falla.

  • Failure Reason Text-este es el texto de descripción de falla del IPF.

  • Failure Original Response Code - Esto permite la especificación de cualquier código de respuesta original involucrado (que puede haber sido mapeado a uno de IPF).

  • Failure Original Reason Code - Esto permite la especificación de cualquier código de razón original involucrado.

  • Failure Original Reason Text - Esto permite la especificación de cualquier texto de razón original involucrado.

Los conceptos de códigos de razón y respuesta se discuten más adelante en este documento.

Dentro de la duración de un pago, cada elemento de datos comerciales es único y puede ser actualizado según sea necesario.

Flujo

El procesamiento de un pago es realizado por un "Flow". Un flow representa un único proceso de negocio de principio a fin y está diseñado para especificar la duración de un único pago. Un solo flow puede tener múltiples caminos a través de él, cada uno representando una forma diferente de procesar un pago individual basado en los datos proporcionados para ese flow. Un flow contiene una serie de elementos:

  • Un nombre

  • Una descripción

  • Una versión

  • Un conjunto de estado global

  • Una lista de "Estados"

  • Una lista de " Events "

  • Un " Initiation Behaviour "

  • Una lista de " Input Behaviours "

  • Una lista de " Event Behaviours "

  • Una lista de " Aggregate Functions "

  • Una lista de "Definiciones de Funciones de Mapeo"

Se discute una definición de cada uno de estos aspectos en las siguientes secciones.

La combinación de "Nombre del Flujo" y "Versión del Flujo" identifica de manera única un flujo. La versión es solo un identificador numérico opcional, por lo que, por ejemplo, un flujo puede llamarse "Prueba" y tener la versión 3. Entonces, el flujo puede ser identificado de manera única como " Test V3 ". Si no se definió una versión, puede identificarse simplemente por el nombre "Test". Este identificador es conocido como el "*_Flow Id_*"

Global States

Primero consideramos el "Global State Conjunto". El conjunto de estado global es un conjunto de estados que representan el estado general de un pago. Se utiliza particularmente cuando un pago puede abarcar múltiples flujos (por ejemplo, si el procesamiento del pago se divide en partes de "iniciación" y "ejecución"), pero también puede aplicar un estado de tipo agrupación general a las partes individuales del flujo para simplificar las transiciones de estado aparentes desde el nivel de pago. Cada estado a nivel de flujo puede ser mapeado a un estado global de tal manera que múltiples estados a nivel de flujo puedan ser considerados como si dejaran el pago en el mismo estado global general.

Se proporciona un conjunto de estados globales predeterminados que ofrece los siguientes estados estándar: Pendiente, Aceptado, Rechazado, Acción Manual Requerida y Cancelado.

Estados

El siguiente concepto a considerar dentro de nuestro flujo es un "Estado". Este es, muy simplemente, un punto de descanso en el flujo por el que el pago puede pasar en su recorrido, así que, por ejemplo, podemos tener un flujo muy simple que va de " State A" a " State B".

Un estado en sí mismo tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Un estado global

  • Una bandera de terminal-la bandera terminal se utiliza para indicar que esto finaliza el flujo al que pertenece el estado.

Cada flujo puede contener muchos estados diferentes.

Events

Cuando un flujo se mueve de un estado a otro, esto se conoce como una "Transición de Estado". Dentro de IPF, para que ocurra una transición de estado, el sistema debe recibir un "Evento" en el proceso de pago. En este caso, se trata de un tipo específico de evento conocido como un "Dominio". Event_*. A domain event es un hecho persistente - La llegada de un evento significa que ha ocurrido algo explícito que puede causar algún tipo de cambio en el procesamiento de nuestro pago.

Un evento tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de elementos de datos empresariales.

Cuando se forma un evento, el sistema verificará su propio comportamiento para determinar qué acciones deben realizarse. Aunque este comportamiento se explorará más adelante en este documento, vale la pena señalar aquí que hay tres ocasiones en las que un evento puede causar un cambio en el procesamiento, las cuales se conocen como las condiciones de "Criterios del Evento" y se definen como:

  • Encendido- este movimiento ocurrirá con la llegada de un único evento (por ejemplo, podemos hacer la transición al recibir " Event 1")

  • En cualquiera de- este movimiento ocurrirá con la llegada de uno de múltiples eventos (por ejemplo, podemos hacer la transición al recibir cualquiera de " Event 1" o " Event 2")

  • En todo el- este movimiento solo ocurrirá tras la llegada de múltiples eventos (por ejemplo, podemos realizar la transición solo después de recibir tanto " Event 1" y " Event 2")

Aquí hemos descrito el "Dominio Event "el cual es el tipo de evento que se declara explícitamente dentro de cualquier" MPS solución. Sin embargo, IPF en su conjunto utiliza una serie de diferentes tipos de evento:
  • " System Event "- esto ocurre cuando algo sucede en el sistema y puede ser adaptado para ser específico a las necesidades individuales.

  • " Action Timeout Events- estos eventos ocurren durante el procesamiento cuando se rompen los ajustes de tiempo de espera configurados.

  • " Decision Events "- Estos eventos se utilizan como respuesta a la recepción de resultados de decisiones.

Todos estos tipos de eventos se discuten más adelante en este documento.

External Domains

Después de que se procese un evento, la aplicación puede realizar una o más actividades para determinar qué sucede a continuación con un pago. Por ejemplo, al recibir " Event Es posible que deseemos realizar alguna validación y llamar a otra aplicación para solicitarle que valide nuestros datos.

Para apoyar este procesamiento posterior al evento, el concepto más importante es el "Dominio Externo". Esto representa algún dominio empresarial.-no es el flujo actual de nosotros- con la que necesitamos interactuar.

Por ejemplo, supongamos que necesitamos comunicarnos con un sistema de sanciones durante parte del flujo. Para apoyar esto, modelaríamos ese sistema de sanciones como un dominio externo.

Cada dominio externo consiste en los tres tipos de interacción que podemos realizar con él:

  • "Instrucciones" - las instrucciones son lo más simple que recibimos de un dominio externo. Puede ser triggered por el dominio externo en cualquier momento y comenzaremos a procesar. Esto puede considerarse como el dominio externo enviando información a nosotros.

  • "Notificaciones" - Las notificaciones son lo opuesto a las instrucciones. Estas se utilizan cuando deseamos enviar nuestros datos a un dominio externo.

  • "Solicitudes" - Una solicitud se utiliza cuando necesitamos una "respuesta" del dominio externo en respuesta.

Instructions

Primero, consideremos la instrucción. Estas pueden ser iniciadas por un sistema externo y contienen las siguientes propiedades:

  • Un nombre

  • Una descripción

  • Una lista de " Business Data Elementos

Cuando el IPF application recibe una instrucción, generará un evento correspondiente (la decisión sobre qué evento generar se describe más adelante). Los datos comerciales del evento se poblarán con todos los elementos de datos comerciales coincidentes.

Notifications

A continuación se encuentra la notificación, como una instrucción tiene las siguientes propiedades:

  • Un nombre

  • Una descripción

  • Una lista de " Business Data Elementos

Cuando el IPF application envía una notificación que se completará con todos los elementos de datos empresariales para los cuales tiene un registro coincidente.

Solicitudes

Finalmente, consideramos las solicitudes. La solicitud puede ser considerada como compuesta por dos partes, la solicitud en sí y la respuesta correspondiente.

La parte de la solicitud contiene:

  • Un nombre

  • Una descripción

  • Una lista de datos empresariales

  • Una lista de respuestas

La parte de respuesta es ligeramente diferente y tiene algunas nuevas características a considerar:

  • Un nombre

  • Una descripción

  • Una lista de datos empresariales

  • Un "código de respuesta set" - Este es un grupo de códigos de respuesta. Un "Código de Respuesta" es un código de resultado esperado para una respuesta que podría ser utilizado para un procesamiento posterior. En términos de ISO, esto es análogo a un Estado.

  • Un "conjunto de códigos de razón" - Este es un grupo de códigos de razón. Un "Código de Razón" es una razón por la cual la respuesta se establece de esta manera. Por ejemplo, su código de respuesta podría ser "Rechazado" con una razón "Moneda Incorrecta". En términos de ISO, un código de razón tiene un Estado de Razón.

  • Una bandera de finalización-esto define si la solicitud de llamada debe considerarse completada cuando esta respuesta llega. Por ejemplo, considere una solicitud en la que el sistema externo envía un acuse de recibo técnico seguido de una respuesta comercial final. En este caso, definiríamos dos respuestas.- uno para representar el acuse técnico (no completando) y uno la respuesta comercial (completando).

En términos de ISO, un código de respuesta es análogo a un "Estado", mientras que un código de razón es análogo a una "Razón de Estado".
El sistema proporciona un "predeterminado". AcceptOrReject "código de respuesta establecido que se utiliza para respuestas estándar de aprobación / rechazo. También proporciona un conjunto de todos los códigos de razón ISO."

Ahora unamos estos elementos y formemos la base de cualquier flujo:

intro 1

Aquí podemos ver que cuando IPF recibe algo de un dominio externo (ya sea una instrucción o una respuesta), esto provoca que se genere un evento que puede causar una transición de estado seguida de la invocación de una notificación o solicitud a un dominio externo.

Domain Functions

Es posible que no deseemos tener que llamar a un dominio externo para continuar procesando nuestro flujo. Esto puede suceder porque sabemos qué hacer a continuación o podemos calcular qué hacer a continuación. Para esto, hay dos conceptos adicionales que debemos considerar:

En este caso, una opción es utilizar la capacidad de "Función de Dominio" que el flujo mismo ofrece. Funciona de manera muy similar a un par de solicitud / respuesta en una llamada a un dominio externo, excepto que en el caso de una función de dominio, el IPF application en sí mismo es un dominio, por lo que la llamada real permanece interna (considere, por ejemplo, crear un dominio externo que represente nuestro flujo actual-esto funcionaría de la misma manera que una función de dominio, pero sería una representación errónea de la lógica de control real). Por lo tanto, cuando llamemos a una función de dominio, esperaremos recibir una respuesta y luego esa respuesta se transformará en un evento que puede causar un procesamiento posterior.

Como una solicitud, la función de dominio tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de datos empresariales

  • Una lista de respuestas

Additional Events

La segunda opción es un "Adicional Event- estos también pueden ser utilizados para mover el flujo.

Cuando se genera un evento adicional, el sistema lo procesará como si hubiera sido recibido en la aplicación a través de una instrucción o respuesta.

Añadamos estos a nuestro diagrama:

intro 2

Decisions

Sin embargo, ¿qué sucede si queremos realizar alguna lógica de manera condicional? Por ejemplo, puede que solo deseemos ejecutar un chequeo de fraude si el valor del pago supera las £50. En este caso, podemos utilizar un "Decision".

Una decisión nos permite realizar cierta lógica y luego tomar diferentes rutas de procesamiento posteriormente en función del resultado de esa decisión. Una decisión tiene una serie de propiedades:

  • Un nombre

  • Una descripción

  • Una lista de datos empresariales-estos son los datos que se envían al llamar a la decisión para que pueda procesar en función de ellos.

  • Una lista de " Decision Resultados - Estos son los posibles resultados de ejecutar la decisión; cada decisión puede tener tantos resultados diferentes como sea necesario y estos resultados son únicos para la decisión. Se definen simplemente proporcionando un nombre.

Las decisiones en sí mismas se almacenan dentro de una "Biblioteca de Decisiones". Las bibliotecas son independientes del flujo y, como tal, la misma decisión puede ser utilizada en múltiples flujos.

Podemos utilizar una decisión en dos lugares:

  • Para determinar qué evento debe ser generado en respuesta a una entrada (respuesta o instrucción)

  • Para determinar qué acciones deben realizarse después de una transición de estado.

Añadamos estos a nuestro diagrama:

intro 3
Un tipo especial de evento "A Decision Resultado Event "también se elevará para que el hecho de que se haya invocado la decisión y se haya devuelto un resultado sea auditado y pueda ser utilizado en el procesamiento posterior."

Aggregate Functions

Otra utilidad útil a considerar es la "Función Agregada". Una función agregada es un conjunto de lógica que puede ejecutarse al recibir un evento para realizar algún tipo de lógica sobre los datos recibidos. Estos datos se consideran "en tránsito" y, por lo tanto, no son persistidos por la aplicación.

Un buen ejemplo de esto es, por ejemplo, un contador que rastrea el número de veces que algo ha ocurrido durante un flujo.- cada vez que se llama a la función, podemos actualizar ese contador. El resultado de la función agregada se vuelve disponible a lo largo del flujo.

Otro buen caso de uso puede ser realizar un análisis de datos.mapping ejercicio para transformar los datos en algo que pueda ser utilizado posteriormente.

Añadamos la función de agregado a nuestro diagrama:

intro 4

Behaviours

Los siguientes conceptos a considerar son ambos tipos de agrupamiento. Con el fin de separar la lógica, necesitamos definir cuándo procesar una entrada al sistema (de una respuesta o instrucción) y generar el evento a la lógica requerida al procesar el comportamiento real del sistema basado en ese evento. Contamos con dos conceptos de agrupamiento:

  • "Comportamiento de Entrada" - este es el comportamiento que especifica para cada entrada qué evento se generará.

  • Event Comportamiento- este es el comportamiento que especifica qué acciones deben tomarse al recibir un evento.

Comportamiento de Entrada

Un comportamiento de entrada tiene una serie de propiedades:

  • Una entrada-este es el contenido (instrucción o respuesta) sobre el cual se basa el comportamiento es triggered.

  • Un código de respuesta-este es el código de respuesta (vinculado a la respuesta si la respuesta es una entrada, de lo contrario este campo no es aplicable) para el cual se aplica el comportamiento

  • Un evento-esto puede ser un evento directamente o a través de la ejecución y el resultado de una decisión.

Tenga en cuenta que al utilizar códigos de respuesta, si uno no está definido en un comportamiento de entrada, este será considerado el comportamiento "predeterminado" para todos los códigos de respuesta.

Event Comportamiento

El comportamiento del evento es un poco más complicado. Tiene una serie de propiedades:

  • A "Actual State- este es el estado en el cual el flujo debe estar para que el comportamiento se aplique.

  • Un "Criterio" - esto es cuando se aplica el comportamiento (en / en todos los / en cualquiera de)

  • Una lista de eventos-uno o más eventos, estos pueden ser cualquier tipo de evento (por ejemplo, dominio, tiempo de espera, etc.)

  • Un "Mover a State " - el estado de destino del comportamiento

  • Una lista de acciones-estas son las acciones que deben realizarse después de la transición de estado, es decir, solicitudes, notificaciones, etc.

Actualicemos nuestro diagrama para mostrar estos:

intro 5
Tenga en cuenta que la función de agregación, como una unidad de cálculo autónoma, no se considera ni el comportamiento del evento ni el comportamiento de entrada, sino como una capacidad funcional propia.

Initiation Behaviour

Hay un tipo más de comportamiento clave a considerar, que es el "Initiation Behaviour". El comportamiento de iniciación es una versión especializada del comportamiento de entrada previamente definido, pero se utiliza únicamente para iniciar un flujo. No está vinculado a un dominio externo, de modo que podemos iniciar el flujo potencialmente desde muchas fuentes diferentes.

Un comportamiento de iniciación tiene una serie de propiedades:

  • Una lista de datos empresariales

  • Un estado inicial al que moverse

  • Una lista de acciones a realizar

Tenga en cuenta que cuando se invoca el comportamiento de iniciación, comenzará un flujo y el " FlowInitiated " se generará un evento.

Ahora hemos revisado todos los componentes que conforman un flujo único.

Subflows

Lo siguiente a considerar son los segmentos reutilizables del flujo.

Por ejemplo, considere un chequeo de sanciones que puede ser requerido desde diferentes lugares dentro del flujo. Podríamos especificar cada sección del flujo por separado y escribir la lógica cada vez, pero idealmente nos gustaría poder reutilizar la lógica común cada vez. Aquí es donde se introduce el concepto de "Subflujo".

Un subflujo es un componente de flujo reutilizable. Es esencialmente lo mismo que un flujo en el sentido de que tiene estados, comportamientos de entrada y comportamientos de evento. Sin embargo, un subflujo no tiene vida propia y solo se utiliza como un mecanismo de reutilización y, por lo tanto, DEBE estar contenido dentro de un flujo externo. Al invocar un subflujo, su comportamiento es muy similar al de recibir un evento:

intro 6

Lo clave que debe entender aquí es que, en lugar de moverse a un estado y luego llamar a una acción como en el procesamiento normal mencionado anteriormente, aquí nos movemos a un pseudoestado que actúa como un punto de entrada al subflujo. El "control" del flujo se transfiere entonces al subflujo; en este punto, procesará a través de las entradas y comportamientos de eventos hasta que alcance un estado terminal en el subflujo. Cuando alcanza un estado terminal, el control se devolverá al flujo que lo llamó con un resultado del nombre del estado terminal. Esto puede ser utilizado para el procesamiento posterior.

Tenga en cuenta que, para lograr la reutilización del subflujo en múltiples lugares, cuando un subflujo se coloca dentro de un flujo principal, su estado se mostrará como "<subflowid> <nombre del estado del subflujo>", donde <subflowid> es el nombre del pseudoestado del flujo que llama y <subflow state name> es el nombre del estado dentro del subflujo.

Flow Calls

Finalmente, también es posible llamar directamente a un flujo desde otro. En este caso, el control se transfiere al flujo secundario, y esperamos un resultado de ejecución de vuelta. El flujo hijo puede informar que ha alcanzado cualquier estado de regreso al flujo padre. Más comúnmente, esto ocurrirá cuando se alcance un estado terminal y el flujo hijo haya terminado el procesamiento, pero también permite la retroalimentación del flujo hijo para estados intermedios antes de que finalice. Esto proporciona una oportunidad para pasar el control de un lado a otro entre el flujo hijo y el flujo padre según sea necesario.

intro 7

Conclusiones

En esta sección, hemos discutido los conceptos principales que componen el Icon los pagos DSL y cómo encajan entre sí. Estos conceptos serán clave en el futuro y las siguientes secciones de esta serie de tutoriales comienzan a guiarnos sobre cómo utilizar diferentes de estos para crear nuestra aplicación de pagos.