Ir al contenido principal

LEER DATOS DE OTRO PROGRAMA ABAP

  • INTRODUCCION
  • METODO 1 – Con módulo de Función
  • METODO 2 – Con Field Symbol
  • Observaciones

INTRODUCCION
En ocasiones sucede que necesitamos leer datos desde un programa, por ejemplo un user exit o BADI, pero estos se encuentran en otro programa o en una dynpro que no está disponible en los datos que tenemos a nuestra disposición.
Existen 2 métodos que nos pueden ser útiles en esta situación.

MODO 1 – Con módulo de función
Este es el método más sencillo.  Se trata simplemente de hacer un CALL FUNCTION al módulo de función UA_READ_FIELD_FROM_DYNPRO, indicando el nombre del programa en el parámetro id_program, la dynpro en id_dynpro y el nombre del campo en id_field_name. 
El valor leído lo retorna en el parámetro ed_field_value.
Ejemplo:
CALL FUNCTION ‘UA_READ_FIELD_FROM_DYNPRO’
      EXPORTING
        id_program     = sy-cprog
        id_dynpro      = sy-dynnr
id_field_name  = ‘PWERKS’
      IMPORTING
        ed_field_value = l_werks
      EXCEPTIONS
failed         = 1
        OTHERS         = 2.


Modo 2 – Con Field symbols
El segundo método es mediante el uso de Field Symbols. Para ello miremos el siguiente ejemplo:

types: begin of t_jest.
            include structure jest_upd.
types:
            mod,
            inact_old like jest-inact,
          end of t_jest.
data:
  lf_text(40)   type c,
  lt_jest       type standard table of t_jest.
field-symbols:
  <ls_jest_buf>      type any table.
lf_text = ‘(SAPLBSVA)JEST_BUF[]’.
assign (lf_text) to <ls_jest_buf>.
check sy-subrc = 0.
lt_jest[] = <ls_jest_buf>. 
Prestemos atención a la línea:

lf_text = ‘(SAPLBSVA)JEST_BUF[]’.
En este caso vamos a leer todo el contenido de la tabla interna JEST_BUF[], que se encuentra en el programa SAPLBSVA .
Para ello primero definimos el field symbol <ls_jest_buf> de tipo any table.

field-symbols:
  <ls_jest_buf>      type any table.
Si estuvieramos leyendo una variable en lugar de una tabla interna, definiríamos nuestro field symbol de tipo TYPE ANY.
Al hacer la asignación mediante la sentencia assign (lf_text) to <ls_jest_buf>, lo que hacemos enlazar el field symbol a la tabla JEST_BUF[], que se encuentra en el programa SAPLBSVA.  Posteriormente, con la sentencia lt_jest[] = <ls_jest_buf> copiamos su contenido a la tabla interna lt_jest[].


Observaciones
Los field symbols operan como los apuntadores en otros lenguajes de programación, razón por la cual, como se explicó anteriormente, lo que hace la sentencia assign es enlazar el field symbol con la variable destino que se indica en el campo texto.
Hay que tener especial cuidado con esto ya que no se trata de una simple asignación de valores entre variables como la que se hace con el operador “=” o la sentencia move, sino que en realidad una vez hecha se asigna el field symbol es como si estuviéramos tratando directamente la variable enlazada.  Dicho en otras palabras, si luego de asignado un field symbol utilizamos la sentencia clear  o le asignamos algún valor estaremos modificando realmente el contenido de la variable o tabla asignada.


Fuente:

Comentarios

Entradas más populares de este blog

A to Z of OLE Excel in ABAP 7.4

  SAP users, both business and end users always need to download the output of a report to spreadsheet and do their analytics.   The standard excel output from a report is very simple process but it is old fashioned and the spreadsheet looks quite boring.  There is no default formatting and the users have to do all the hard work of changing the fonts, coloring the texts, marking the borders etc. Updated 16th Aug 2019  –  If you are working in non-ABAP 7.4 (below), there is complete reference program for you too. Go to the end of this article.  Thank you  Legxis  ( LeonievonK ) for the share. I acknowledge, whatever I mentioned above can be achieved in many ways programmatically. We can do it in the old traditional ABAP way but  providing multiple tabs in the spreadsheet and formatting is quite tricky with non  OLE  method. OLE = Object Linking and Embedding The high level agenda of this article is to be the  G.O.A.T.  (ple...
How to add custom field in Additional B Tab for SAP Sales Order In this article we want to explain step by step how to add custom field in SAP Sales Order transaction VA01/VA02/VA03. This time Mr ABAPGurus will give the tutorial of enhancement to add custom field in SAP Sales order. In this sample we will add new custom field for comments and customer satisfaction, this data will save into separate table from SAP Standard table ( VBAK / VBAP ). SAP provided us with ADDITIONAL TAB in the sales order transaction ( VA01/VA02/VA03 ) which allow customer to add custom fields.  T he different between ADDITIONAL A and ADDITIONAL B is the ADDITIONAL A for field which already predefine in Sales Order Header ( VBAK ) fields and ADDITIONAL B is for field that freely define. This sample we will use ADDITIONAL B because we will store data from customer satisfaction into Z database table. 1. Create one Z table using SE11 SAP Transaction code. 2.Using SE38 Transactio...

CÓMO ENCONTRAR LA BADI Enhacements Exits

¿Cómo encontrar la BADI que necesitamos? Existen varios caminos para encontrar la BADI que requerimos en un momento dado, vamos a ver algunas de ellas: Opción A. Entramos a la transacción SE80, buscamos en el explorador la clase “CL_BADI_FLT_DATA_TRANS_AND_DB”, luego ubicamos el método “ACT_IMPS_PER_FLT_VAL” y entramos al código, apelamos al buscador para ubicar el comentario “read BADI attributes”, y justo debajo del SELECT que veremos, fijamos un break-point. Luego, abrimos otro modo para ejecutar la transacción que se desea analizar, y veremos que se detendrá cada vez que pase por el break-point fijado, ahora revisamos en el debugger los campos “exit_name” e “internal” para dar con las BADI’s que toca dicha transacción. Opción B. Utilizamos la transacción SE93 para ver los atributos de la transacción estándar que queremos evaluar, buscamos su paquete (clase de desarrollo), luego nos dirigimos a la transacción SE18, optamos por la opción de búsqueda ampliada, indicam...