Conceptos de Flujo
Flujos
En IPF el procesamiento de un pago es realizado y controlado por un "Flow" (Flujo). Un flujo representa un único proceso de negocio de extremo a extremo y está diseñado para especificar la vida de un único pago. Un solo flujo puede tener muchos caminos, cada uno representando una forma diferente de procesar un pago individual en función de los datos proporcionados para ese flujo.
Un flujo contiene varias cosas:
-
"Nombre"
-
"Descripción"
-
"Versión"
-
"Conjunto de estados globales"
-
Lista de "Estados"
-
Lista de "Eventos"
-
"Comportamiento de Iniciación"
-
Lista de "Comportamientos de Entrada"
-
Lista de "Comportamientos de Evento"
-
Lista de "Funciones de Agregado"
-
Lista de "Definiciones de Funciones de Mapeo"
-
Lista de "Enriquecedores de Entrada"
Una definición de cada uno de estos aspectos se discute en las otras secciones de Conceptos.
| La combinación de "Nombre de Flujo" y "Versión de Flujo" identifica de forma única un flujo. La versión es solo un identificador numérico opcional, por lo que, por ejemplo, un flujo puede llamarse "Test" y tener la versión 3. Entonces el flujo puede identificarse de forma única como "TestV3". Si no hubiera versión definida, puede identificarse simplemente por el nombre "Test". Este identificador se conoce como el "FlowId". |
Subflujos
Lo siguiente a considerar son los segmentos reutilizables del flujo.
Podemos, por ejemplo, necesitar realizar un control de sanciones en varios lugares diferentes 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 "Subflow" (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 usa como un mecanismo de reutilización y, por lo tanto, DEBE estar contenido dentro de un flujo externo. Al llamar a un subflujo, es muy similar en comportamiento a recibir un evento:

Lo clave es entender que, en lugar de moverse a un estado y luego llamar a una acción como en el procesamiento normal anterior, aquí nos movemos a un pseudo-estado que actúa como punto de entrada al subflujo. El "control" del flujo se entrega entonces al subflujo; en este punto procesará a través de los comportamientos de entrada y de evento hasta que alcance un estado terminal en el subflujo. Cuando alcanza un estado terminal, el control se devolverá al flujo llamador con un resultado del nombre del estado terminal. Esto se puede usar para el procesamiento posterior.
NOTA: Ten en cuenta que para lograr la reutilización del subflujo en múltiples lugares, cuando un subflujo se coloca dentro de un flujo principal, sus estados se mostrarán como "<subflowid> <nombre del estado del subflujo>", donde <subflowid> es el nombre del pseudo-estado del flujo llamador y <nombre del estado del subflujo> es el nombre del estado dentro del subflujo.
Llamadas entre Flujos
Finalmente, también es posible llamar directamente a un flujo desde otro, a veces llamado "flow to flow". En este caso, el control se entrega al flujo secundario, y esperamos un resultado de vuelta. El flujo hijo puede informar que ha alcanzado cualquier estado de vuelta al flujo padre. Lo más común es que esto ocurra cuando se alcanza un estado terminal y el flujo hijo ha terminado el procesamiento, pero también permite retroalimentación del flujo hijo para estados intermedios antes de que termine. Esto proporciona la oportunidad de pasar el control de ida y vuelta entre el hijo y el padre según sea necesario.

Completando un Flujo
El final o la finalización de un flujo de IPF es cuando el flujo transiciona a un estado Terminal (ver aquí para definirlo). En este punto:
-
Puedes realizar una Acción de Notificación en la transición al estado Terminal
-
No se puede disparar más Comportamiento de Entrada (y por tanto no hay más transición de Estado)
-
El flujo Terminado será pasivado
-
Las entradas de diario del flujo Terminado son elegibles para archivarse
IMPORTANTE: Cuando un estado se define como Terminal significa que no se pretenden más transiciones de estado (no definirás más Comportamiento de Evento más allá de ese estado y ninguna entrada al flujo dispara más comportamiento). Este es el fin del procesamiento del flujo. Si pretendes potencialmente transicionar desde este estado, el estado no debería definirse como terminal.