Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
dairolozano
Contributor
  • 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.