jueves, 3 de octubre de 2013

GuiXT: Estructuras de control

En cualquier lenguaje de programación encontraremos estructuras de control. Su función es, permitir controlar el flujo de ejecución de un programa. En GuiXT, los scripts  del modulo Inputassistant se ejecutan secuencialmente, linea a linea en el orden escrito.

Con las estructuras de control podemos controlar esta ejecución secuencial de los script.

En las próximas entradas mostrare ejemplos prácticos de como estructurar los inputscripts. No os asustéis si no entendéis ahora como funcionan las estructuras de control, se comprenden mejor cuando ves el código funcionando.

IF/ELSE/ENDIF
De acuerdo a una condición, ejecuta un grupo u otro de sentencias.

IF Q[Status=ADD1] OR Q[Status=UPD1]
   Image (1,50) (10,90) "imgupd.gif"
ELSE 
  Image (1,50) (10,90) "imgdis.gif"
ENDIF

La condición puede exigir que exista o no ciertos elementos en la pantalla, y si están o no  activos.
  • IF F[cantidad] Si hay un campo en pantalla llamado “cantidad” 
  • IF I[codigo] Si hay un campo de entrada de datos llamado “código” 
  • IF P[Cancelar] Si hay un pulsador llamado “cancelar” en la pantalla 
  • IF M[Cambiar] Si hay un elemento del menú “Cambiar” 
  • IF M[Cambiar=active] igual que la anterior, pero además debe estar activo
También puede comprobar el valor de una variable del sistema.

Si el GUI-Status es xxxx
  IF Q[Status=xxxx]
Si la clave de idioma es x (1 carácter, E=Ingles, D=Alemán, F=Frances, I=Italiano,...)
  IF Q[Language=x]
Si el sistema (database server) id es xxx ( PYB, C23, … )
  IF Q[Database=xxx]
Si el cliente es xxxx
  IF Q[Client=xxx]
Si el usuario es xxx
  IF Q[User=xxx]
Si el Role es xxx (ver 4.14 Roles y Usuarios SAP)
  IF Q[Role=xxx]
Si el profile es xxx
  IF Q[Profile=xxx]
Si el cod. De la transacción es xxxx ( sólo para R/3 Rel.4 y superior )
  IF Q[Transaction=xxxx]
Si la variante de pantalla xxx esta activa
  IF Q[ScreenVariant=xxxx]
Si la versión de GuiXT es igual a yyyy Qx x. Se puede utilizar <, = o >.
  IF Q[GuiXTVersion=yyyy Qx x]
Si el usuario a provocado un StopRequest en un InputScript (se ha ejecutado un StatusMessage)
  IF Q[StopRequest]
Si la pestaña actual es xxxxx (xxxxx es el texto de la pestaña)
  IF Q[Page=xxxx]
Si la variable “vname2 contiene el valor “value” (solo posible con InputAssistant)
  IF V[vname=value]
Si el parámetro “úname” contiene el valor “value” (solo posible con InputAssistant
  IF U[uname=value]

Los IF/ELSE/ENDIF anidados están permitidos y también se pueden utilizar en la condiciones, los operadores lógicos and, not, or.

Por ejemplo, estaría permitido el siguiente código:  

IF NOT Q[Status=UPD1]
   Image (1,50) (10,90) "imgdis.gif"
ELSE
   IF (F[Company code] OR F[Business area]) AND NOT  F[Order number]
       Image (1,50) (10,90) "imgupd1.gif"
   ELSE
       Image (1,50) (10,90) "imgupd2.gif"
       Pushbutton (Toolbar) "Cancel" "/OZC27"
   ENDIF
ENDIF  



GOTO/LABEL
Salta desde  la instrucción GOTO hasta la instrucción LABEL especificada y continua la ejecución del script

GOTO  labelname
LABEL labelname 

Por ejemplo:


IF NOT Q[Status=UPD1] 
   GOTO NextPosition
ELSE
   GOTO exit
ENDIF.


LABEL NextPosition
Screen SAPMVCF66G.0400
ENTER "/niw22" onError="Retry"
LEAVE
LABEL exit
LEAVE


INCLUDE
Incluir un archivo de scripts, idéntico al comando INCLUDE de ABAP, si el archivo indicado es localizado dentro del directorio de script indicado en el perfil, se tratara como si formase parte del script original.

INCLUDE "includename"
INCLUDE "radiobuttons_company.txt"
 
También se pueden especificar otras localizaciones.

INCLUDE "\\server12\guixt\inlcudes\r105.txt"
INCLUDE "SAPWR:ZGUIXT.r105.txt" ( SAP WEB Repository )
INCLUDE "http://www.synactive.com/includes/r105.txt"

STOP

Detiene el procesamiento del Inputscript y regresa a la pantalla inicial.

...
STOP
...

LEAVE
Detiene y termina el proceso actual del Inputscript, se muestra la pantalla actual y termina, al contrario que el comando STOP  que regresa a la pantalla inicial.

...
LEAVE
...

ON
Si el usuario presiona la tecla Enter ó una tecla o combinación de teclas especiales del teclado ( F1, F2, F3….Shift+F1, Shift+F2,Shift+F3…) se ejecita el inputscript indicado en el parámetro PROCESS

ON "Enter" Process="nextproduct.txt"
ON "/11" Process="update.txt"

Por ejemplo, cuando el usuario presione la combinación Ctrl+Shift+F3, se simula la acción de Enter y se ejecuta el script Warning.txt

ON "/39" Fcode="/0" Process="warning.txt"

Los códigos del  /13 al /48 representan combinaciones de teclas con la tecla control o/y shift:

Shift+F1 /13                    Ctrlt+F1 /25                   Shift+Ctrl+F1 /37
Shift+F2 /14                    Ctrlt+F2 /26                   Shift+Ctrl+F2 /38
Shift+F3 /15                    Ctrlt+F3 /27                   Shift+Ctrl+F3 /39
Shift+F4 /16                    Ctrlt+F4 /28                   Shift+Ctrl+F4 /40
Shift+F5 /17                    Ctrlt+F5 /29                   Shift+Ctrl+F5 /41
Shift+F6 /18                    Ctrlt+F6 /30                   Shift+Ctrl+F6 /42
Shift+F7 /19                    Ctrlt+F7 /31                   Shift+Ctrl+F7 /43
Shift+F8 /20                    Ctrlt+F8 /32                   Shift+Ctrl+F8 /44
Shift+F9 /21                    Ctrlt+F9 /33                   Shift+Ctrl+F9 /45
Shift+F10 /22                  Ctrlt+F10 /34                 Shift+Ctrl+F10 /46
Shift+F11 /23                  Ctrlt+F11 /35                 Shift+Ctrl+F11 /47
Shift+F12 /24                  Ctrlt+F12 /36                 Shift+Ctrl+F12 /48

SCREEN
Con este comando, iniciamos el proceso automático de una dynpro en un Inputscrip. Es muy util porque puedes llamar a una dynpro de Sap, rellenar los campos de la dynpro y ejecutar un Enter para procesarla.

SCREEN program.screennumber

Por Ejemplo, esto inicia el procesamiento de la dynpro 300 del programa SAPMF05A.

SCREEN SAPMF05A.0300

RETURN
Termina la ejecución de un InputScript. 

RETURN "message text" 
RETURN "message text" "title"

Ejemplos:



RETURNVALUES
Con este comando, podemos retornar información de un modo abierto con el código “/O” ..., “process=...” al modo desde el que lo hemos abierto, retornando información que podemos utilizar en campos de entrada de datos.

Returnvalues string
Returnvalues "V[mat]:&V[matnr]"

Este comando se entiende mejor con un simple ejemplo:

Por un lado, un script de GuiXt, sencillo y simple,  para añadir un pulsador en la barra de herramientas de la transacción VA01 que genere un nuevo modo de la transacción VA03

Pushbutton (toolbar) "Test Returnvalues" "/OVA03" process="tv.txt"

Offset (10,0)
Text (0,0) "&V[t1]"
Text (1,0) "&V[t2]"
Textbox (2,1) (8,100) name="txt1"

tv.txt es un inputscritp vacio, un archivo txt vacío completamente.

En la transacción VA03 , implementamos otro scripts de GuiXT para incluir unos campos de texto y un pulsador en la barra de herramientas que al pulsar cierre el modo y retorne a la transacción VA01

Offset (15,1)
Box (0,0) (10,42) "Test Returnvalues"
InputField (1,0) "Line1" (1,8) size=30 name=t1
InputField (2,0) "Line2" (2,8) size=30 name=t2
Textbox (3,0) (9,40) name="txt1"

Pushbutton (toolbar) "return values" process="rv.txt"
El inputscritp rv.txt es el encargado de retornar los texto introducidos en pantalla al modo que genero el modo activo.

Returnvalues "V[t1]: &V[t1];"
Returnvalues "V[t2]: &V[t2];"
Returnvalues "Text[txt1]:&Text[txt1];"
Returnvalues "OK:/0"
Enter "/i"


Va01 + GuiXT para generar un nuevo modo /Ova03

VA03 con campos para introducir texto, al pulsar "return values" retorna los valores a la VA01

VA01 y los valores retornados por el modo VA03 al ejecutar el inputscripts

RETRY ON ERROR
En Sap, es posible, que al procesar una dynpro, aparezcan mensajes de error o warnings. Estos mensajes, no dejan continuar con la ejecución hasta que el usuario pulsa la tecla Enter. Con esta instrucción, si durante el proceso de una dynpro surge un mensaje de error por pantalla ,simulara la acción de la tecla Enter hasta que este mensaje desaparece. La acción se repite 20 veces en incrementos de 0,3 segundos 0,3…0,6...0,9…0,12… hasta que desaparece el mensaje.

Si el mensaje de error continua, se continua con el proceso del Inputscript como si no hubiese ocurrido la ejecución del comando Retry on error.

Este comando no tiene ningún parámetro adicional

Screen SAPMF02C.0100
Retry on error
Set F[Customer] "&V[xd01_account]"
Set F[Credit control area] "1000"
Enter



Fuente:

2 comentarios:

  1. Tengo algunas dudas, espero me pueda apoyar, en la transacción IP15, quiero ejecutar lo siguienre:
    * Enter "/5" // Para seleccionar toda la tabla

    Y que enseguida de seleccionar toda la tabla, ejecute:
    * Enter "/8" // Para ejecutar la transacción,

    Pero me marca un error, se queda dando el primer "enter" y no me cambia a las pantallas siguientes.

    ResponderEliminar
    Respuestas
    1. Has probado con la opción OnError
      Enter "/5" OnError="Continue"

      En la ayuda de synactive tienes las opciones del ENTER
      http://www.synactive.com/docu_e/doc_enter.html

      Eliminar