jueves, 31 de octubre de 2013

Objetos HR en la SPAU

Síntoma: Aparecen Objetos HR en la transacción SPAU después de un upgrade

Objetos HR en la SPAU
Esto afecta a objetos HR que hayan sido modificados en el sistema original.


A partir de la 610, la SPAU es más "quisquillosa" y puede darnos falsa alarmas. Es posible que estas entradas en amarillo solo sean falsas alarmas. para comprobarlo aplicar la nota: 634146 - SPAU: Objects from the customer namespace in SPAU 

Crear el rapport RSUMOD_CHECK_NON_TADIR siguiendo las instrucciones de la nota 634146 y ejecutarlo.

Si quedan entradas en amarillo, El origen del problema puede ser que antes del upgrade , la tabla SMODILOG contiene entradas que referencia a estos objetos.  Es un error de programación y se corrige ejecutando el paso 4 de la nota 519678 - HRDSYS: objects in customer namespace in SMODILOG que es ejecutar el programa H99PDSY_REPAIR_SMODILOG para borrar las entradas innecesarias de la tabla.

Y si aun queda alguna que resiste en amarillo, puedes hacerle un reset to original. Según sap, esta acción solo afecta a la documentación del objeto y no al customizing del objeto HR.


miércoles, 30 de octubre de 2013

DUMP "CAST_ERROR" al ejecutar un Report Painter/Writer.

Sintoma: Al ejecutar report painter/writer como el S_ALR_87013611 o el S_ALR_87013340 salta un dump "CAST_ERROR".



La solución a este dump es aplicar las siguientes notas:

La nota 1702676 nos indica que el origen del dump esta en la badi G_SET_FORMULA_EXIT.
Esta nota no se puede aplicar desde el SNOTE, se aplica a mano.

La nota 1819452 es una corrección de la nota:

La nota 1748700 contienen un error que provoca un dump y un mensaje de error RG102 al ejecutar cualquier report painter/writer. 

En los siguientes Support Packages, ambos problemas están solucionados:
  • SAP_APPL 602 SAPKH60214
  • SAP_APPL 603 SAPKH60313
  • SAP_APPL 604 SAPKH60414

Para ver la versión y nivel del componente SAP_APPL u otro componente:
    Sistema -> STATUS ->  Info componentes


Si os pasa como a mi y estáis en un Support Packages inferior , os toca aplicar las notas:

  1. Aplicar la nota  170267 y regenerar la badi G_SET_FORMULA_EXIT desde la se18.
  2.  Aplicar la nota 1819452, Esta nota si podéis aplicarla desde la transacción SNOTE o a mano.
  3.  Regenerar el report desde la gr55.

Si no regeneráis el grupo de informes, después de aplicar las notas, salta un dump "LOAD_PROBLEMS" al ejecutar el report writer.

Si no sabéis a que Grupo de informes pertenece el report writer que falla, ve a la SE93 introduce la transacción que esta fallando ( por ejemplo S_ALR_87013611 ) y pulsa visualizar. 

Busca el valor del campo D_SREPOVARI-REPORT en la sección Val.Propuesta de la transacción.


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: