viernes, 7 de noviembre de 2014

Abap in Eclipse (AiE) : Nuevas funcionalidades I

Eclipse incluye una serie de nuevas herramientas para facilitarnos la creación de código ABAP.

Auto-completar palabras claves

Nos permite escribir mas rápido el código, sugiriendo palabras clave según escribimos el código.
Es suficiente con escribir la primeras letras para que eclipse nos sugiera la palabra clave:
  • Con la tecla TAB aceptamos la palabra que nos sugiere y esta se completa automáticamente
  • Ctrl + Barra Espaciadora  nos mostrara todas las sugerencia disponible.
Por ejemplo:

Auto-completar palabra clave

Pero si antes, mientras nos sugiere start-of-editing  le doy a Ctrl+barra espaciadora,  aparecerán todas las palabras claves posibles que coinciden con lo que llevo escrito hasta el momento y podre seleccionar una para auto-completar la palabra clave.

Lista completa de palabras clave coincidentes

Auto-completar código

la combinación Ctrl + Barra espaciadora no solo sirve para mostrar todas las palabras claves posibles, también se puede utilizar para auto-completar código como llamadas a métodos de clases, atributos, eventos, bapis o clases.

Por ejemplo, podemos ver los atributos de nuestras variables internas

No se vosotros, pero cuando me tocaba codificar una llamada a una bapi, tenia que abrir una nueva ventana con la transacción SE37 para ver el nombre y tipo de los parámetros de una bapi. En eclipse con la combinación Ctrl + Barra espaciadora  podemos ver la información de la bapi  sin necesidad   de abrir una nueva ventana con el código de la bapi.



Simplemente Ctrl + Barra espaciadora, selecciono la bapi Mayusculas + Intro.
La firma de la bapi se completa automáticamente en mi código.



Lo mismo si estamos escribiendo el nombre de una clase o sus métodos. mientras escribimos el nombre de la clase, podemos usar la combinación Ctrl + Barra espaciadora para ver todas las clases y sus métodos coincidentes.


Si ya tenemos la clase, podemos usar la combinación Ctrl + Barra espaciadora para ver  sus métodos y atributos. Seleccionar el método o atributo que queremos auto-completar y lo ejecutamos con la combinación Mayus + Intro.





La ayuda y documentación en linea

Como todo entrono de programación, tenemos disponible en cualquier momento la documentación para ayudarnos en la implementación del código ABAP que desarrollemos. Al igual que en la SE38 bastara con situar el cursor sobre la palabra clave  y pulsar F1 para que aparezca la ayuda de SAP. Esta ayuda funciona exactamente igual que la ayuda que utilizamos cuando trabajamos desde la transacción SE38.

Ayuda de SAP

Nota: Esta ayuda no esta en Eclipse, es un servicio web que consumimos del sistema SAP al que estamos conectados, si no os funciona, revisar que estén activo  los servicios  web HTTP correspondientes para poder acceder a la ayuda.

Error al acceder a la ayuda de SAP


Además, la ayuda incluye ejemplos ejecutables.
Por ejemplo en la ayuda busqueda de ADBC, Query:


Ejemplos ejecutables en la ayuda


Entradas anteriores:
Abap in Eclipse (AiE)
Abap in Eclipse (AiE): Instalación
Abap in Eclipse (AiE) : El entorno de trabajo de Eclipse

Entradas siguientes:
Abap in Eclipse (Aie) : Nuevas funcionalidades II  ( en proceso )

jueves, 6 de noviembre de 2014

Filtrar los datos para las ayudas busquedas

Una ayuda búsqueda para un campo de una dynpro, no tiene porque mostrar toda la información al usuario. Podemos filtrar la información que aparece en un ayuda búsqueda basándonos en los datos introducidos por el usuario en otros campos de la dynpro.

Por ejemplo, imaginemos dos campos SOCIEDAD y CLIENTE.

Si el usuario rellena primero el campo SOCIEDAD y después activa la ayuda búsqueda del campo PROVEEDOR, queda mucho mejor que aparezcan solamente los clientes de la sociedad que ha indicado que todos los clientes de todas las sociedades del sistema.

Ayuda búsqueda filtrada

Vamos con el  programa de ejemplo, seria sencillo, un modulpool con una dynpro y dos campos.



El proceso, cuando el usuario active la ayuda búsqueda del campo Proveedores, sera :
  1. Leer los campos que necesitamos para filtrar la ayuda búsqueda
  2. Crear y lanzar la ayuda búsqueda
  3. Completar los campos con los datos seleccionados de la ayuda búsqueda por el usuario.
PROCESS ON VALUE-REQUEST  es el proceso de la dynpro que se lanza cuando el usuario activa la ayuda búsqueda de un campo.  Si el campo , tiene asociado en esta sección un modulo, este sera lanzado cuando el usuario active la ayuda búsqueda del campo. No viene por defecto en la pestaña log. de proceso cuando creamos la dynpro, tenemos que añadirlo nosotros.


PROCCES ON VALUE-REQUEST


Y dentro del modulo, llamamos a nuestra subrutina.

Modulo y subrutina para la ayuda búsqueda
La subrutina, esta completa al final de la entrada.

Y aquí tenéis el resultado, dos capturas de la misma ayuda búsqueda, pero en una hemos rellenado el campo SOCIEDAD y la ayuda búsqueda queda filtrada por ese campo.


Ayuda búsqueda sin filtrar , el campo SOCIEDAD esta vació

Ayuda búsqueda filtrada por el contenido del campo SOCIEDAD
Hay que tener en cuenta que si el usuario , introduce la sociedad, no pulsa intro o provoca otro evento e inmediatamente activa la ayuda búsqueda, el campo SOCIEDAD nos llegara vació a a la ayuda búsqueda.

Para evitarlo, utilizaremos la bapi  DYNP_VALUES_READ para leer el contenido ACTUAL de los campos de la dynpro.


Y esta sera la subrutina encargada de filtrar y generar la ayuda búsqueda:

*&---------------------------------------------------------------------*
*&      Form  F4_LIFNR_HELP_F01
*&---------------------------------------------------------------------*
FORM f4_lifnr_help_f01 .

  TYPES: BEGIN OF type_f4_help_lifnr,
           bukrs TYPE lfb1-bukrs,
           butxt TYPE t001-butxt,
           lifnr TYPE lfa1-lifnr,
           name1 TYPE lfa1-name1,
         END OF type_f4_help_lifnr.

  DATA: tl_map        TYPE TABLE OF dselc.
  DATA: tl_help_lifnr TYPE TABLE OF type_f4_help_lifnr.
  DATA: tl_ddshretval TYPE TABLE OF ddshretval.
  DATA: tl_dynpread   TYPE TABLE OF dynpread.
  RANGES: r_bukrs FOR   lfb1-bukrs.

  FIELD-SYMBOLS: <fs_ddshretval> TYPE ddshretval,
                 <fs_dynpread>   TYPE dynpread,
                 <fs_dselc>      TYPE dselc.

  APPEND INITIAL LINE TO tl_dynpread ASSIGNING <fs_dynpread>.
  <fs_dynpread>-fieldname = 'WL_BUKRS'.  "Campo de la dynpro

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = tl_dynpread
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.

  CHECK sy-subrc EQ 0.

*  Si todo ha ido bien, ya podemos crear el rango para el filtro
  READ TABLE tl_dynpread  INDEX 1 ASSIGNING <fs_dynpread>.
  IF <fs_dynpread>-fieldvalue IS NOT INITIAL.
    r_bukrs-sign   = 'I'.
    r_bukrs-option = 'EQ'.
    r_bukrs-low    = <fs_dynpread>-fieldvalue.
    APPEND r_bukrs.
  ENDIF.

  SELECT  b~bukrs t~butxt a~lifnr a~name1
   INTO CORRESPONDING FIELDS OF TABLE tl_help_lifnr
   FROM lfa1 AS a
   INNER JOIN lfb1 AS b
           ON a~lifnr EQ b~lifnr
   INNER JOIN t001 AS t
           ON b~bukrs EQ t~bukrs
   WHERE b~bukrs IN r_bukrs.

   CHECK ( sy-subrc EQ 0 ).

   SORT tl_help_lifnr ASCENDING BY BUKRS lifnr.

*  Mapeamos los campos de la ayuda busqueda con los de la dynpro
   APPEND INITIAL LINE TO tl_map ASSIGNING <fs_dselc>.
   <fs_dselc>-fldname   = 'F0001'.    "1º columna de la tabla interna tl_help_lifnr
   <fs_dselc>-dyfldname = 'WL_BUKRS'. "Campo de la dynpro correspondiente

   APPEND INITIAL LINE TO tl_map ASSIGNING <fs_dselc>.
   <fs_dselc>-fldname   = 'F0003'.    "3º columna de la tabla interna tl_help_lifnr
   <fs_dselc>-dyfldname = 'WL_LIFNR'. "Campo de la dynpro correspondiente

*  Lanzamosla ayuda busqueda
   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'LIFNR'
      dynprofield      = 'WL_LIFNR'
      value_org        = 'S'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      callback_program = sy-repid
    TABLES
      value_tab        = tl_help_lifnr
      return_tab       = tl_ddshretval
      dynpfld_mapping  = tl_map.

ENDFORM.                    " F4_LIFNR_HELP_F01


Entradas relacionadas:
Recuperar varios campos con una ayuda busqueda

miércoles, 5 de noviembre de 2014

Abap in Eclipse (AiE) : Hello World

Llego el momento de escribir nuestro primer programa en Abap con Eclipse: "Hello World".

Antes de empezar, recordar que es necesario que tengamos acceso a un sistema SAP.

Si estáis utilizando un SAP NetWeaver AS ABAP 7.03 SP04 64-bit Trial o superior, aseguraros de que el servicio esta activo en windows, en INICIO accedemos a EJECUTAR y tecleamos "services.msc".

Buscamos el servicio SAPXXX_00 ( donde XXXX es el ID sel sistema ) con el botón derecho del ratón, nos sale el menú para activar el servicio.


Ejecutamos el Sap Management Console para arrancar el sistema SAP.


Arrancamos Eclipse y activamos la perspectiva ABAP.

Desde el menú superior File -> New ->Abap Project
También  desde el explorador de proyectos -> Menu contextual ( click botón derecho ) -> New ->Proyect
Crear nuevo proyecto en Eclipse

Abrimos la carpeta Abap -> Abap proyect -> Next



Introducir los datos de conexión al sistema SAP,
Es posible importar los datos de  conexión si tenemos instalado el  cliente de SAP SapGUI.

Importar la conexión del SapGUI

Crear conexión a SAP manualmente



El siguiente paso, es autentificarse en el sistema con nuestro usuario/contraseña. Si no hay ningún error de compatibilidad ( recordar que necesitamos que le sistema Sap tenga SAP Kernerl 7.20 y el SAP BASIS 7.31 con el nivel de parche 4 ) nos conectaremos al sistema desde Eclipse y podremos empezar a trabajar.

usuario / contraseña para acceder al sistema SAP

Empezemos a crear nuestro programa "Hello World":

  1. Seleccionar el  proyecto ( systema SAP ).
  2. Botón derecho del ratón para desplegar el menu contextual
  3. New -> Others... -> Abap Repository Object,
  4. Seleccionar Source Library -> Abap Program




Se puede  crear cualquier objeto del repositorio de SAP desde tablas, funciones, enhancements, BSP, paquetes, etc...
Introducimos los datos del programa como el  nombre (que empieze por Z o Y ), descripción y paquete para transporte.
Como yo  no voy a transportar el programa a otro sistema lo he incluido en el paquete local $TMP.

atributos del nuevo rapport ABAP

Siguiente .-> Finalizar y se abre el editor ABAP ( transacción SE38 en el sistema Sap ).

Escribimos la siguiente linea:

write "Hello World, programado en Eclipse".



En la barra superior, tenemos los botones básicos, como verificación de sintaxis, activar , el "where used list...", etc...  todos los botones del editor Abap están en Eclipse. 


Revisamos la sintaxis y activamos el programa:


Os va a dar un error de verificación de sintaxis, la cadenas de texto van con comillas simples no dobles, fijaos en la ventana inferior con la pestaña Problems:
















Cambiamos las comillas dobles por comillas dobles, verificar y activar si no hay más errores.
Para ejecutarlo:

Como veis, la integración de Eclipse - Abap - Sistema SAp es total, es un gran avance con respecto al editor actual de Abap. Otro ejemplo, vamos a buscar desde Eclipse todas las tablas donde se este usando el elemento de datos KUNNR ( nº de cliente ) en el sistema Sap. 





En las siguientes entradas seguiremos probando más sobre Abap in Eclipse.

Entradas siguientes:

martes, 4 de noviembre de 2014

Abap in Eclipse (AiE) : El entorno de trabajo de Eclipse

En la anterior entrada explicamos como instalar Eclipse +  ADT. 


En esta entrada vamos a hacer un breve recorrido por el entorno de trabajo de Eclipse.
En la siguiente imagen, como podéis apreciar,  Eclipse no se parece en nada a la transacción SE38.


"Toto, creo que ya no estamos en Kansas"

En Eclipse existen 3 elementos principales:

    • Vistas
    • Editores
    • Perspectivas

Vistas: Muestran, de forma gráfica, información que esta relacionada con un área en concreto. La informacion que muestran no es modificable directamente. No podemos modificar o introducir datos en una vista directamente. En algunas vistas es posible, pero siempre a través de algún menú contextual.

Por ejemplo, son vistas: 
    • El Explorador de Proyectos muestra informacion de los proyectos existentes.
    • La vista Outline muestra información sobre los métodos y atributos de un objeto.
    • El log de errores es otra vista,  etc... 
Para acceder a las vistas disponibles  -> Windows -> Show view -> Other 
Si no conocéis el nombre completo de la vista, podéis utilizar el filtro de la ventana para encontrarlo.

Vistas en Eclipse

Filtro para buscar vistas
Debido al gran número de vistas que podemos utilizar en el entorno de trabajo, las vistas tiene la característica de que pueden apilarse. Normalmente, suelen apilarse y ubicarse en los bordes izquierdo, derecho e inferior del entorno de trabajo. 

Para apilar una vista , simplemente arrastrarla hasta uno de estos bordes.



Editores: Son similares a una vista, comparten con ellas la capacidad de ser apilados pero, al contrario de las vistas, permite modificar su contenido directamente. Por ejemplo cuando escribimos código Abap/Java/C++/Phyton...  estamos trabajando sobre un editor. 

Generalmente todos los editores se sitúan en la parte central del entorno de trabajo de Eclipse.

Eclipse, automáticamente seleccionara el editor adecuado para el archivo que intentemos abrir. El contenido del archivo aparecerá  en el editor correspondiente porque Eclipse selecciona el editor adecuado en base a la extensión del archivo a abrir. Para archivos java (.java) el editor asignado es JDT, Para XML seleccionar el editor correspondiente, y así sucesivamente.

Mas adelante explicare como configurar el editor, la sintaxis resaltada, etc...


Editor de código


Perspectivas:  Es un conjunto bien definido de vistas y editores o si lo preferís, una perspectiva es un contenedor de vistas y editores con un objetivo comun definido.

Por ejemplo, tenemos predefinidas las siguientes perspectivas:
  • Java: Se centra en la programación sobre Java, contiene vistas para visualizar paquetes, clases, métodos y atributos, ademas de editores para la programación en Java
  • Debug: Tareas de depuración. Las vistas y editores que contiene se centra en los procesos ejecutados, puntos de ruptura o break-points, variables, salida, etc
  • Resource: Esta perspectiva está estrechamente relacionada con el sistema de archivos puesto que representa la localización física de los recursos almacenados dentro de los proyectos
  • Plug-in development: La perspectiva de desarrollo de plug-in permite a los desarrolladores añadir nuevos módulos de Eclipse.
  • Install/Update: Permite gestión de la configuración. Muestra los componentes instalados así como sus versiones y conflictos.
  • Java Browsing: Esta perspectiva permite ojear rápidamente código, proyectos, paquetes y jerarquías.
Estas son unas pocas, para seleccionar perspectivas -> Windows -> Open Perspective -> Other...


Perspectivas en Eclipse

Si hemos instalado correctamente  ADT, aparecerán  perspectivas para ABAP:

Perspectivas para trabajar con ABAP

En la imagen anterior, esa barra de herramientas que aparece con algunas perspectivas, es la barra de acceso rápido a las perspectivas perspectivas que tenemos abiertas actualmente, cada vez que abráis una nueva perspectiva, se añadirá a la barra  y si la cerráis, desaparecerá de la barra.

A mi, personalmente me gusta colocarla a la izquierda del entorno de trabajo y que solo muestre el icono de la perspectiva. Para que muestre o no el texto:

  1. Situar el cursor sobre una perpectiva de la barra 
  2. desplegar el menú contextual con un clic del boton derecho del rato.
  3. Podéis cerrar la perspectiva o activar/desactivar las descripciones de las perspectivas.

Podéis desplazar la barra colocando el cursos sobre el comienzo de la barra, sabréis que lo estais haciendo bien porque el cursor cambiara a una cruz con flechas en las puntas, pulsar y mantener el botón izquierdo del ratón y mover la barra a la nueva posición.




Puedes añadir, mover, borrar vistas y editores en una perspectiva y así podre crear tus propias perspectivas personalizadas. Una vez que tengas a tu gusto las visas y editores, guarda los cambios en una nueva perspectiva, resetear una perspectiva estándar, cerrar... desde el menu Windows.


Menú Windows; opciones para perspectivas

  • Save Perspective As: Guarda una copia de perspectiva en uso con un nuevo nombre.
  • Reset Perspective:  Reinicia la perspectiva a sus valores por defecto.
  • Close Perspective: Cierra la perspectiva en uso.
  • Close All Perspectives: Cierras todas las perspectivas abiertas en Eclipse
  • Customize Perspective: Permite personalizar ciertos aspectos de una perspectiva, como el menu superior o los pulsadores para acceso rápido en la parte superior...

Customize Perspective


Eclipse en la lengua de Cervantes.

Eclipse, por si no os habíais dado cuenta, viene en ingles por defecto. 

Para cambiar de la lengua de Shakespeare a la legua de Cervantes o incluso al Catalan y Vasco, es necesario instalar los paquetes de Babel Language Packs:
  1. Abrir el instalador -> Help -> Instal new software
  2. Introducir la direccion del repositorio de Babel:
    •  Eclipse Kepler: http://download.eclipse.org/technology/babel/update-site/R0.12.0/kepler
    •  Eclipse Luna   : http://download.eclipse.org/technology/babel/update-site/R0.12.0/luna
  3. Seleccionar   el idioma, el % indica lo completa que es la traducción
  4. Instalar el paquete.

Eclipse Babel Project

Una vez instalado, para cambiar el idioma:
  1. Cerrar Eclipse.
  2. Buscar el archivo eclipse.ini en la carpeta donde has instalado eclipse. Editalo 
  3. Añade estas 2 lineas al principio del archivo eclipse.ini:



Los valores posibles de la opción NL deben seguir las convenciones de nomenclatura de configuración regional estándar de Java . 

Guarda los cambios y vuelve a arrancar Eclipse, si todo va bien, los textos aparecerán traducidos pero tener en cuenta que puede que algunos textos aun no estén traducidos a, fíjate bien en el indicado % cuando selecciones el paquete de un idioma para Eclipse.

Menús traducidos al Castellano

Bueno, esto seria lo básico para ir moviéndonos por nuestra nueva SE38 :)


Entradas anteriores:
Abap in ECLIPSE (AiE)
Abap in eclipse (AiE) - Instalación