martes, 12 de febrero de 2013

Recuperar varios campos con una ayuda busqueda

Las ayudas búsquedas de sap, nos ayudan a completar los valores de los campos de entrada en las pantallas  de selección . Pero a veces, el cliente piden que ejecutando la ayuda búsqueda sobre un campo de la pantalla de selección , el resto de campos se rellenen automáticamente.

Por ejemplo, un  programa que recupera datos de la tabla MKPF y en la pantalla de selección podemos introducir el nº de documento de material, el documento de referencia  el ejercicio. El cliente quiere una ayuda búsqueda que rellene automáticamente los tres campos.

Ayuda Búsqueda que recupera varios campos
En este ejemplo vamos a recuperar el documento de material, ejercicio y el documento de referencia cuando situemos el cursor en cualquiera de los tres campos, presionemos F4 y seleccionemos un valor de la lista.

Primero creamos una ayuda búsqueda en la SE11 ( Ej: ZMCODE_MATERIAL ) sobre la MKPF y con los tres campos que queremos recuperar.


En el evento AT SELECTION-SCREEN ON VALUE-REQUEST FOR  llamaremos a una subrutina que ejecutara 3 bapis:
  • F4IF_GET_SHLP_DESCR: Recupera los datos de la ayuda búsqueda, una vez ejecutada, marcar el campo VALFIELD. en la tabla SHLP de los campos que se quieren recuperar. También se pueden crear filtro utilizando el campo SELOPT.
  • F4IF_START_VALUE_REQUEST: muestra un popup con la ayuda búsqueda y recupera los datos seleccionados por el usuario. 
  • DYNP_VALUES_UPDATE: Actualiza los campos de la pantalla de selección.

Podéis descargaros el codigo desde el repositorio git del blog:


El código completo del programa es el siguiente:

*&---------------------------------------------------------------------*
*& PROGRAMA.............: ZAYUDA_BUSQUEDA
*& AUTOR................: David Rueda Barrón
*& FECHA................: 12.02.2013
*& TRANSACCION..........: ZAYUDA_BUSQUEDA
*& ORDEN DE TRANSPORTE..: 
*& EMPRESA..............: 
*&---------------------------------------------------------------------*
*& DESCRIPCION: 
*& Ejemplo de una ayuda busqueda que rellena varios campos en la
*& pantalla de selección
*&---------------------------------------------------------------------*
*& Modificador Fecha    MARCA Motivo 
*&---------------------------------------------------------------------*
*& XXXXXXXX    DD.MM.AA @01   xxxxxxxxxxxxxx 
*&---------------------------------------------------------------------*

REPORT zayuda_busqueda.

TYPE-POOLS: shlp.

*&---------------------------------------------------------------------*
*& Parámetros de Selección
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block01 WITH FRAME TITLE text-s01.
   PARAMETERS : pi_xblnr TYPE xblnr,
                pi_mblnr TYPE mblnr,
                pi_mjahr TYPE mjahr.
SELECTION-SCREEN END OF BLOCK block01.

*&---------------------------------------------------------------------*
*& Validaciones de Pantalla
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_xblnr.
  PERFORM f4_help_variant.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_mjahr.
  PERFORM f4_help_variant.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pi_mblnr.
  PERFORM f4_help_variant.

*&---------------------------------------------------------------------*
*& INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.

*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.

*&---------------------------------------------------------------------*
*& END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  F4_HELP_VARIANT
*&---------------------------------------------------------------------*
FORM f4_help_variant .

  DATA: dyname LIKE d020s-prog VALUE,
        dynumb LIKE d020s-dnum VALUE.

  DATA: BEGIN OF dynpfields OCCURS 3.
         INCLUDE STRUCTURE dynpread.
  DATA: END OF dynpfields.

  DATA: l_shlp     TYPE shlp_descr.
  DATA: lv_name_sh TYPE shlpname VALUE 'ZMCODE_MATERIAL'.
  DATA: t_return   TYPE STANDARD TABLE OF  ddshretval .
  DATA: v_subrc    TYPE sysubrc.

  FIELD-SYMBOLS: <FI> TYPE ddshiface,
                 <FH> TYPE ddshretval,
                 <FD>  LIKE LINE OF dynpfields.
  dyname = sy-repid.
  dynumb = sy-dynnr.

  CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
    EXPORTING
      shlpname = lv_name_sh
      shlptype = 'SH'
   IMPORTING
      shlp     = l_shlp.


  LOOP AT l_shlp-interface ASSIGNING <FI>.
    <FI>-valfield = 'X'.
  ENDLOOP.

  CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
     EXPORTING
      shlp          = l_shlp
     IMPORTING
      rc            = v_subrc
     TABLES
      return_values = t_return.

  LOOP AT t_return ASSIGNING <FH>.

    APPEND INITIAL LINE TO  dynpfields ASSIGNING <FD>.
    CONCATENATE 'PI_' <FH>-FIELDNAME INTO <FD>-FIELDNAME.
    <FD>-FIELDVALUE  = <FH>-FIELDVAL.

  ENDLOOP.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
   EXPORTING
     dyname     = dyname
     dynumb     = dynumb
   TABLES
     dynpfields = dynpfields.

endform   .                    " F4_HELP_VARIANT 



Entradas relacionadas
Filtrar los datos para las ayudas busquedas

lunes, 11 de febrero de 2013

GUIXT: Instalación y Configuración (II)

Directorios Scripts: Un  script de GuiXT  es un archivo de órdenes o un archivo de procesamiento por lotes, cuyo procesamiento modifica la pantalla o transacción del sistema Sap. Suelen ser  bastante simples y se guardan en un archivo de texto plano. Los scripts son interpretados, es decir, GuiXT realiza la traducción a medida que va siendo procesado el archivo.

Los archivos que contienen el script, pueden estar almacenados:
  • En un equipo local
  • En un servidor de archivos o directorio compartido (Ej: \\Server\guixt\scripts )
  • FTP o Servidor Web
  • Repositorio Web Sap ( transacción SWM0 )
Se pueden indicar hasta 4 localizaciones en la configuración de GuiXT

Directorios  Scripts
El orden de búsqueda es de mayor a menor; GuiXT buscara los scripts, primero en la localización del campo Scripts 4, si no encuentra el archivo con el script, buscara en la localización del campo Scripts 3 y así sucesivamente.

Componentes Instalados: Aquí  marcamos los componentes instalados que se utilizan, solo GUIXT no requiere de un numero de licencia para su uso.

License Key,TestKey o UserKey: Es necesario un nº de licencia para poder utilizar cualquier componente que no sea el GuiXT.  Si utilizamos , por ejemplo el componente InputAssistant y no tenemos nº de licencia, el scripts no se ejecutara y la ventana de GuiXT mostrara el siguiente mensaje.

Componentes instalados y las Licencias
Mensaje de Error:  El componente no esta registrado
Las TestKey son suministradas por Synactive.  Rellenando el siguiente formulario, recibiremos en nuestra cuenta de correo una TestKey que permite utilizar los componentes durante un mes. Existe un truco para registrar los componentes temporalmente:
  1. Cuando iniciemos sesión en el sistema SAP, abrimos la ventana de configuración del GuiXT
  2. En la casilla USER KEY  introducimos un valor aleatorio 
  3. Guardamos la configuración
  4. Reiniciamos la transacción -> /n  ( OJO!! no salir del sistema!!! )
A partir de este momento y hasta que cerremos la sesión en el sistema SAP, estarán activos todos los componentes del GuiXT,



Sistemas Habilitados:  Nombres de los sistemas SAP para los que la configuración GuiXT debe estar activo. Los nombres de los sistemas se pueden encontrar en Sistema   Estado  datos de base de datos  Nombre, por ejemplo, ST1. Se puede especificar varios sistemas.


Editor de Texto: Indicamos el editor de texto que vamos a utilizar para escribir los scripts.


Start Windows: Esta opción, evita que cada vez que iniciemos una sesión en SAPGUI aparezca la ventana de GuiXT, evitamos así que los usuarios normales puedan acceder a GuiXT.


Usuario RFC: los scripts de GuiXt también pueden ejecutar bapis RFC ( Remote Fuction Call ) pero necesitas especificar un usuario con permisos para ejecutar RFCs.


Un par de detalles que casi me vuelven loco la primera vez que utilice GuiXT. La contraseña va entre comillas dobles, por ejemplo: "PEPITO" . recordarlo, escribir la contraseña con las comillas dobles. Y segundo, por defecto, aunque tu entres en el cliente 300, GuiXT intentara entrar en el cliente 000 si no marcas la casilla Script Dowmload via current client.

Ejemplo:  Scripts desde el Repositorio Web de SAP

Esta opción para gestionar los scripts, permite centralizar los archivos en el repositorio web de sap (transacción SMW0) de esta manera los scripts estarán disponibles para todos los usuarios del sistema.

Lo primero es decidir un identificador o texto, que colocaremos delante del nombre del script que subiremos al repositorio web. También se utilizara ese identificador en el perfil de GuiXT. La única regla a seguir es que el identificador debe empezar por la letra Z. En este ejemplo vamos a utilizar  Z.GUIXT como identificador.

Identificador Z:GUIXT
Recordar que el orden de búsqueda es de mayor a menor; GUIXT buscara primero en la localización del campo Scripts 4, si no encuentra el archivo con el script, buscara en la localización del campo Scripts 3 y así sucesivamente. 

En SAP, en la transacción SMW0, Repositorio Web de SAP, seleccionamos la segunda opción Datos binarios p.aplicaciones WebRFC  y ejecutamos la búsqueda para el objeto Z.GUIXT*  (F8).

Transacción SWM0

Búsqueda del objeto Z.GUIXT*

Para subir un nuevo archivo de script de GuiXT, seleccionamos Crear un objeto Repository SAP web. Como nombre del objeto escribimos el identificador y el nombre del archivo que contiene el script separados por un punto. 

Por Ejemplo si tenemos:
  • Nombre del archivo que contiene el script: SAPMV45A.E0101.TXT 
  • Identificador seleccionado: Z.GUIX
El nombre del objeto sera: ZGUIXT.SAPMV45A.E0101.TXT

Crear Objeto Repository Sap Web

Comprobamos el resultado:


Este método de gestión de los archivos con los scripts GUIXT no es muy adecuado desde el punto de vista del desarrollador, ya que una vez subido el archivo, no lo podemos modificar, tenemos que volver a subirlo. Con las otras modalidades con las que podemos tener el archivo abierto con el notepad, modificar el scripts y ver los resultados al momento sobre el sistema SAP.

Pero desde el punto de vista del usuario, tenemos todos los scripts centralizados en el servidor SAP y todos los usuarios ejecutaran el mismo script, esto facilita mucho el control sobre los scripts.

domingo, 3 de febrero de 2013

GUIXT: Instalación y Configuración (I)

En la entrada anterior explicamos que GuiXT viene "de serie" en el cliente SapGui y como activarlo. Si por caprichos del destino, en vuestro SapGui no viene ó queréis tener la ultima versión. Podéis descargar GuiXT en la pagina de  Synactive ( menu de la izquierda -> Installation -> Download ).


Para activar GuiXT, desde la pantalla de inicio del sistema SAP, click en el  icono que indico en la siguiente imagen (o ALT+F12) y se desplegara el menú de Ajustar disposición local, seleccionar la opción Activar GUIXT. Por ultimo, salir y volver a entrar en el sistema SAP.

Menú ajustar disposición local
Una vez instalado y activado, al entrar en el sistema sap aparecerá la ventana de Synactive GuiXT.

Ventana Synactive GuiXT

Configuración de GuiXT:  ventana de GuiXT ►  EDIT ► PROFILE o click sobre el botón de la barra de herramientas PROFILE , también sirve la tecla F7.

GuiXT Profile
Toda la información sobre la configuración del GuiXT se guarda en el archivo guixt.ini.
Dependiendo de la instalación del SAPGUI el archivo guixt.ini estará en:
  • C:\Program files\SAP\Frontend\SAPgui    (SAP GUI 6.20, 7.10, 7.20, 7.30) 
  • C:\Program files\SAPpc\SAPgui               (SAP GUI 4.6D) 
  • C:\Program files\SAP\ITS\2.0\programs   (ITS)
GuiXT por defecto, siempre busca primero el archivo guixt.ini en el directorio local de la maquina donde está instalado, si encuentra un archivo guixt.ini y ademas este incluye una entrada IgnoreRegistry Yes, se toman la configuración almacenada en el archivo guixt.ini, en caso contrario, busca la información de configuración en el registro de Windows y no en un archivo ini.

La entrada en el registro de Windows esta en : 

     HKEY_CURRENT_USER
                        Software\SAP\SAPGUI Front\SAP Frontend Server\Customize

Registro de windows de GuiXT
En cambio, si en el archivo guixt.ini incluimos la instrucción IgnoreRegistry Yes, se abrirá el editor de texto con el archivo guixt.ini cuando presionemos el botón PROFILE

Archivo guixt.ini
Dentro del archivo local guixt.ini, se puede incluir el comando
  • SwitchTo .... 
Indicando una segunda localización para buscar el archivo guixt.ini, que puede ser desde un directorio compartido, equipo en red, ftp o en el repositorio web de Sap:

    IgnoreRegistry Yes
    SwitchTo           \\server12\GuiXT\guixt.ini 

Puede incluirse más de un comando SwitchTo.

   IgnoreRegistry Yes
   SwitchTo            \\server001\GuiXT\guixt.ini
   SwitchTo            \\server002\GuiXT\guixt.ini

Si no encuentra el archivo en la primera ruta indicada, lo busca en la segunda y así sucesivamente, si no lo encuentra en ninguna ruta indicada, utilizara el archivo guixt.ini local. Cambien se puede utilizar el repositorio web ( transacción SMW0 ) de un sistema especifico de SAP para almacenar el archivo guixt.ini.

   IgnoreRegistry     Yes
   StartMinimized     Yes
   RfcUser                 guixtrfc
   RfcPasswordEnc   vaqfxepfhfwflfdgag
   SwitchTo               SAPWR:zguixt.ini.txt

Cuando se utiliza el repositorio web de Sap, hay que especificar un usuario/contraseña con permisos para ejecutar funciones RFC antes del comando SwitchTo. Otras opciones especiales de inicio de GuiXT como ejecutar la ventana GuiXT minimizada u oculta, también deben especificarse  antes del comando SwitchTo.


La clave del sistema puede especificarse sin cifrar, pero esto no es muy recomendable por razones de seguridad, para generar la clave del sistema cifrada, abrir una ventana en Windows con línea de comandos ( Botón Inicio ► Ejecutar ► CMD ).

Ir al directorio donde este instalado GuiXT. Ejecutar GUIXT RFCPASSWORD <CLAVE>.
Encriptar la clave del usuario Sap para el archivo guixt.ini
La clave encriptada que nos devuelve la utilizamos en el parámetro RfcPasswordEnc.

Por defecto, la conexión al sistema Sap se hace contra el cliente 000, pero se puede especificar el cliente del sistema al que queremos conectarnos.

   IgnoreRegistry      Yes
   StartMinimized      Yes
   RfcUser                  guixtrfc
   RfcPasswordEnc    vaqfxepfhfwflfdgag
   SwitchTo                SAPWR,client=800:zguixt.ini.txt

Si por alguna razón, no es posible la conexión o la lectura de archivo en el sistema Sap especificado (ej. Por que el usuario no es válido ó no existe) no se mostrara ningún mensaje de error por pantalla y GuiXT permanecerá inactivo. Toda la información quedara registrada en View ► Protocol.

Por último, un ejemplo de acceso a guixt.ini utilizando la variable “&database”.

IgnoreRegistry Yes
StartMinimized Yes
SwitchTo            http://www.xxx.com/guixt/ini/guixt.&database.ini

Cuando el usuario acceda al sistema SAP, &database se sustituirá por el valor del ID del sistema de la conexion SapGui. Por ejemplo si accediésemos a un sistema con ID del sistema = CDF, buscaría en:

http://www.xxx.com/guixt/ini/guixt.PYB.ini.


Para termina, un ejemplo con el archivo guixt.ini almacenado en el repositorio web de Sap.
Voy a utilizar un script muy sencillo que canbia la pantalla de entrada del sistema SAP.


Guardo el siguiente scripts y las dos imágenes en el mismo directorio D:\sap\guixt\scripts\ , el scripts ha de llamarse slogon.txt. Mas adelante prometo explicar como crear estos scripts, no os impacientéis.


Box (3,1) (11,85) "Acceso al sistema"

pos F[Clv.acc.]    (7,28)
pos F[Idioma]      (8,28)
pos F[Mandante] (5,28)
pos F[Usuarios]   (6,28)

Image (4,2) (9,25) "sap.jpg"

text (9,28) "Problemas de acceso?"
text (10,28) "Por favor, envie un email "
image (9,48) "email.gif"    start="mailto:admin@datra.com?subject=Logon in system &V[_database]"
text (10,55) "al administrador"


Creamos un archivo  zguixt.txt con el bloc de notas o cualquier otro editor de texto y con esta linea

Directory1         D:\sap\GuiXT\scripts           // Script Directory 1


El archivo guixt.ini lo modifocamos para que solo contenga las siguientes lineas:

IgnoreRegistry           Yes
RfcUser                <usuario>
RfcPasswordEnc <password encriptada>
SwitchTo           SAPWR,client=300:zguixt.ini.txt 

Si no indicáis client, entrara por defecto al cliente 000 y si el usuario no existe en el cliente, no funcionara.

Entramos en el sistema SAP, vamos al   repositorio web,  transacción SMW0. Seleccionamos la opción Datos binarios p.aplicaciones WebRFC. En el campo Objeto introducimos el identificador anterior seguido de un * al final, ejecutamos la búsqueda.



Seleccionamos Crear y como objeto el mismo identificador del fichero guixt.ini zguixt.ini.txt y subimos el fichero de texto zguixt.txt.



Cada vez que entremos al sistema SAP con el GuiXT activado, accederá al fichero en el repositorio web y cargara las opciones de configuración para GuiXT.

Si por alguna razón, no es posible la conexión o la lectura de archivo en el sistema Sap especificado (ej. Por que el usuario no es válido ó no existe) no se mostrara ningún mensaje de error por pantalla y GuiXT permanecerá inactivo.

Toda la información quedara registrada en un log visible desde View ► Protocol.

Log de Actividad GuiXT


Fuente:
Synactive Documentation

Entradas Anteriores:
GUIXT: Introducción

Entradas siguientes:
GUIXT: Instalación y Configuración (II)
GUIXT: Los scripts de GuiXT
GUIXT: Personalizar el acceso al sistema y el comando image
GUIXT: Añadir y Modificar campos de texto, pulsadores y radiobuttons
GUIXT: El modulo InputAssistant
GUIXT: Estructuras de control
GUIXT: Teclado numérico táctil para Sap