Rational Developer for System z, Versión 7.6.1

Paso 3.4: añadir lógica a CheckItemAvailability.seqflow

En este paso se explica cómo añadir lógica a CheckItemAvailability.seqflow (a) para suprimir algunas correlaciones innecesarias; (b) para almacenar un valor de resultado en un parámetro de salida, indicando si se ha encontrado el número de artículo solicitado; y (c) para añadir una vía de acceso alternativa para manejar el escenario en el que el flujo no recorre todas las pantallas de la lista de múltiples páginas de la aplicación de terminal.

Suprimir correlaciones añadidas automáticamente durante el registro de flujo

En este subtema suprime las correlaciones de extracción de la rutina de correlación para el nodo Assign variableAssignOutput del flujo CheckItemAvailability.seqflow. Estas correlaciones se han añadido automáticamente a la rutina de correlación durante el registro de flujo por comodidad cuando se han creado las acciones Extraer. (Esta característica está controlada por la opción Exponer automáticamente variables de inserción y extracción en los mensajes de operación de interfaz; consulte el tema B. Iniciar el registro de flujo.)

En el paso 3.2, ha suprimido las variables de salida a las que hacen referencia estas correlaciones (consulte la sección Mensaje de salida).

Ahora debe suprimir también las correlaciones, para no obtener errores de compilación cuando compile el código fuente generado.
Nota: El compilador generará un error de compilación para cada una de estas correlaciones, porque cada correlación hace referencia actualmente a una variable no existente.

Para suprimir las correlaciones:

  1. Abra CheckItemAvailability.seqflow en el editor de flujo.

  2. Abra la rutina de correlación del nodo Assign variableAssignOutput en el editor de correlaciones:
    1. En el editor de flujo, pulse con el botón derecho del ratón el nodo variableAssignOutput.

    2. Pulse Abrir rutina de correlación.

      El editor de correlaciones abre el archivo de correlaciones para el flujo y visualiza la rutina de correlaciones para el nodo Assign.

  3. En la rutina de correlación, suprima cada una de las correlaciones no conectadas que se obtienen de las variables INQ1-ITEMREF mediante INQ15-ITEMREF en el mensaje de origen v_CheckItemAvailability:
    • Pulse con el botón derecho del ratón la correlación.
    • Pulse Suprimir.

  4. En este punto, la rutina de correlación contiene una variable de origen y una variable de destino, pero no contiene ninguna correlación.

  5. Cierre el editor de correlaciones si lo desea o déjelo abierto para el siguiente subtema.

Almacenar un valor de retorno en el mensaje de salida

En este subtema, se añade a la rutina de correlación del nodo Assign variableAssignOutput una correlación que copia un valor de resultado establecido en el bucle While, que indica si el número de artículo solicitado se ha encontrado o no, en el mensaje de salida de CheckItemAvailability.seqflow.

Recuerde que en el flujo invocado por el nodo While while_variable0, la variable v_CheckItemAvailability.available se establece en uno de los valores siguientes (consulte el tema Utilización de v_CheckItemAvailability.available en el flujo CheckItemAvailability.seqflow):
  • La serie YES si el número de artículo solicitado se ha encontrado en una de las pantallas de aplicación.
  • Una serie vacía si no se ha encontrado el número de artículo solicitado.

Ahora, se necesita una correlación para copiar el resultado de v_CheckItemAvailability.available en o_CheckItemAvailability.available, para que el valor del resultado se devuelva al flujo de invocación CatalogOrder.seqflow. Para crear la correlación:

  1. Abra CheckItemAvailability.seqflow en el editor de flujo, si todavía no se ha abierto.

  2. En el editor de mensajes de flujo:
    1. Pulse con el botón derecho del ratón el nodo Assign variableAssignOutput (consulte la Figura 1).
    2. Pulse Abrir rutina de correlación. El editor de correlaciones abre el archivo de correlaciones para el flujo y visualiza la rutina de correlaciones para el nodo Assign.
    Actualmente, esta rutina de correlación debe contener los siguientes elementos:
    • Mensajes de origen: el único mensaje de origen es v_CheckItemAvailability.
    • Mensajes de destino: el único mensaje de destino es o_CheckItemAvailability.
    • Correlaciones: ninguna

  3. Cree una correlación que copie el contenido de v_CheckItemAvailability.available en o_CheckItemAvailability.available:
    1. Arrastre la variable available del mensaje de origen a la variable available del mensaje de destino.
    2. El editor de correlaciones crea una transformación Mover entre las dos variables. Esta transformación copia el contenido de la variable origen en la variable destino.

  4. Cierre el editor de correlaciones.

  5. Cierre el editor de flujo.

Añada una vía de acceso alternativa para las pantallas restantes

En este subtema, se añade una vía de acceso alternativa para manejar el escenario en el que el nodo While no recorre todas las pantallas de aplicación en la lista de múltiples páginas.

La versión actual del flujo funciona correctamente cuando el bucle While no encuentra el número de elemento solicitado pero incorrectamente cuando el bucle While encuentra el número de elemento solicitado.

Si el bucle While no encuentra el número de artículo solicitado, el flujo funciona correctamente. La pantalla de aplicación que se visualiza actualmente es la pantalla Salir de bucle. El flujo de control va del nodo While al nodo Parse; el nodo Parse reconoce la pantalla de aplicación mostrada actualmente como la pantalla Salir de bucle; y el flujo de control va del primer terminal de salida del nodo Parse al siguiente nodo de operación de pantalla Invoke, que gestiona la pantalla Salir de bucle (consulte la Figura 1).
Figura 1. CheckItemAvailability.seqflow (antes de la vía de acceso alternativa)
CheckItemAvailability.seqflow

No obstante, si se encuentra el artículo solicitado, el flujo no funciona correctamente. En este caso, la pantalla que se muestra actualmente no es la pantalla Salir de bucle, sino la pantalla que contiene el número de artículo solicitado (porque el nodo While termina cuando encuentra el número de artículo solicitado). El flujo de control va del nodo While al nodo Parse como antes, pero el nodo Parse no puede reconocer la pantalla de aplicación mostrada actualmente y el flujo de control sale a través del segundo terminal de salida (desconectado) del nodo Parse, lo que genera un error de tiempo de ejecución.

Para solucionar este problema, se añade un nodo Switch para comprobar si se ha encontrado el número de artículo solicitado y ramificarlo según corresponda. Siga estos pasos:

  1. Abra CheckItemAvailability.seqflow en el editor de flujo, si todavía no está abierta.

  2. Añada el nodo Switch y sus conexiones:
    • Suprima la conexión que va del terminal de salida del nodo While al nodo Parse.
    • Cree un nodo Switch nuevo y colóquelo justo a la derecha del nodo While.
    • Cambie el nombre del nodo Switch cAvailable.
    • Haga las siguientes conexiones. Tendrá que reordenar algunos nodos para que la distribución sea clara (consulte Figura 2):
      1. Conecte el terminal de salida del nodo While while_variable0 con el terminal de entrada del nodo Switch cAvailable.
      2. Conecte el primer terminal de salida del nodo Switch al terminal de entrada del nodo Parse.
      3. Conecte el segundo terminal de salida del nodo Switch al terminal de entrada del nodo Assign variableAssignOutput.
    El flujo debería tener un aspecto similar a la Figura 2:
    Figura 2. CheckItemAvailability.seqflow
    Flujo con nodo Switch después del nodo While
  3. Abra la expresión ESQL para el terminal de salida situado más arriba del nodo Switch cAvailable:
    1. Pulse el nodo Switch con el botón derecho del ratón.
    2. Pulse Editar expresión > Expresión. Se abre la ventana Editar expresión. La lista Mensajes del ámbito está vacía y el campo de entrada de expresión está en blanco.

  4. Añada la variable v_CheckItemAvailability al ámbito:
    1. Pulse Añadir. Se abrirá la ventana Seleccionar mensaje.
    2. En la ventana Seleccionar mensaje, pulse CatalogSample > CatalogSample.Interface > Mensajes > v_CheckItemAvailability.sfmxsd > v_CheckItemAvailability.
    3. Pulse Aceptar.

    El mensaje v_CheckItemAvailability se añadirá al ámbito.

  5. Cree una expresión ESQL para el nodo Switch:

    1. Copie la expresión breve mostrada en Figura 3 en el campo de entrada Expresión de la ventana Editar expresión. Puede copiar y pegar las líneas de este documento de guía de aprendizaje directamente en el campo de entrada Expresión:
      Figura 3. Expresión ESQL para el nodo Switch denominado cAvailable
      NOT(v_CheckItemAvailability.available='YES')

      Esta expresión comprueba si la variable v_CheckItemAvailability.available contiene la serie 'YES' y, a continuación, niega el resultado booleano utilizando el operador NOT.

    2. Recuerde que en el flujo invocado por el nodo While, la variable v_CheckItemAvailability.available se establece en 'YES' si se ha encontrado el artículo solicitado en la columna de número de artículo de una de las pantallas de aplicación. (Consulte las descripciones de la expresión ESQL en el nodo Switch y la rutina de correlación del nodo Assign en la sección Añadir un nodo Switch y un nodo Assign al flujo.)

      En la expresión ESQL de la Figura 3:
      • Si la variable no es igual a 'YES', la expresión se evalúa en el booleano true y el flujo de control sale del primer terminal de salida del nodo Switch y pasa al nodo Parse.

        En este caso, el bucle While ha buscado en todas las pantallas de la lista de múltiples páginas sin encontrar el número de artículo solicitado y se muestra la pantalla Salir de bucle.

      • Si la variable es igual a 'YES', la expresión se evalúa en el booleano false y el flujo de control sale del segundo terminal de salida del nodo Switch y pasa directamente al nodo variableAssignOutput.

        En este caso, el bucle While ha encontrado el número de artículo y se muestra una pantalla de la lista de múltiples páginas.

    3. Pulse en Aceptar para cerrar la ventana Editar expresión.


Términos de uso | Comentarios

Este Information Center está basado en tecnología Eclipse. (http://www.eclipse.org)