✒️ABAP Los destinos RFC
ABAP Los destinos RFC
Programa de ejemplo de llamada al RFC_READ_TABLE (y documentado).
Lo que recupera son los registros de la tabla estándar de SAP KNA1 de Clientes.
Códigos menores de 50.
El destino que ves en la variable es un destino RFC sin parámetros, así que la llamada
la hará al sistema donde te encuentras (recursivo). Variando el destino obtendrás datos del SAP
que le indiques.
*&---------------------------------------------------------------------*
*& Report ZTEST_RFC
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_rfc.
* Variable para todas las comunicaciones
DATA: v_destino(13) TYPE c.
*---------------------------------------------------------------------*
START-OF-SELECTION.
*---------------------------------------------------------------------*
CLEAR v_destino.
v_destino = 'DESTINO_HF78E'.
PERFORM llamar_rfc_read_table.
*&---------------------------------------------------------------------*
*& Form LLAMAR_RFC_READ_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM llamar_rfc_read_table .
* Descripción de las variables que vienen a continuación para RFC_READ_TABLE
* ti_fields, ti_data y ti_options son las tablas para la comunicación con RFC_READ_TABLE
* wa_fields es el area de trabajo en la que cargo los campos que quiero de la tabla
* y que posteriormente inserto en la tabla ti_fields que le pasaré a la función RFC
* ti_data contendrá los datos que me devuelva RFC_READ_TABLE
* ti_options es la tabla con las opciones de selección para la consulta SELECT
DATA: ti_fields TYPE TABLE OF rfc_db_fld, " Solo cargo el campo FIELDNAME
ti_data TYPE TABLE OF tab512, " Registro con un solo campo de 512 caracteres de ancho
ti_options TYPE TABLE OF rfc_db_opt, " Registro con un solo campo de 72 caracteres de ancho
wa_fields LIKE LINE OF ti_fields, " Para cargar los nombres de campo a la tabla ti_fields
wa_data LIKE LINE OF ti_data, " Para mostrar los datos devueltos por RFC_READ_TABLE
wa_options LIKE LINE OF ti_options, " Para cargar las condiciones de seleccíón
vl_comilla(1) TYPE c VALUE '''', " El valor de esta variable sería '
vl_codigo TYPE kna1-kunnr VALUE '0000000050'. "El campo de la tabla es un tipo char(10)
CLEAR wa_fields.
wa_fields-fieldname = 'KUNNR'.
APPEND wa_fields TO ti_fields.
wa_fields-fieldname = 'NAME1'.
APPEND wa_fields TO ti_fields.
* El select que quiero hacer es SELECT KUNNR NAME1
* FROM KNA1
* WHERE KUNNR < '0000000050'.
* A la consulta solo hay que pasarle KUNNR < '0000000050', ya que el WHERE lo
* pone la función RFC y los campos a seleccionar van en la tabla ti_fields.
* Importante: fijate cómo concateno los literales para la consulta
CONCATENATE 'KUNNR < ' vl_comilla vl_codigo vl_comilla INTO wa_options-text. "No utilizar SEPARATED BY SPACE
APPEND wa_options TO ti_options.
CALL FUNCTION 'RFC_READ_TABLE'
DESTINATION v_destino
EXPORTING
query_table = 'KNA1'
delimiter = ';'
* NO_DATA = ' '
* ROWSKIPS = 0
* ROWCOUNT = 0
TABLES
OPTIONS = ti_options
fields = ti_fields
data = ti_data
EXCEPTIONS
table_not_available = 1
table_without_data = 2
option_not_valid = 3
field_not_valid = 4
not_authorized = 5
data_buffer_exceeded = 6
OTHERS = 7
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
LOOP AT ti_data INTO wa_data.
WRITE:/ wa_data-wa.
ENDLOOP.
ENDIF.
ENDFORM. " LLAMAR_RFC_READ_TABLE
Espero que este aporte te sea de utilidad.
Fernando Morales
Las Palmas de Gran Canaria
 
 
 
Sobre el autor
Publicación académica de Fernando Morales Del Rosario, en su ámbito de estudios para la Carrera Consultor ABAP.
Fernando Morales Del Rosario
Profesión: Analista Programador - España - Legajo: HF78E
✒️Autor de: 17 Publicaciones Académicas
🎓Cursando Actualmente: Master ABAP for HANA
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Mi objetivo es poner en práctica lo aprendido y alcanzar un buen nivel como programador abap.
Certificación Académica de Fernando Morales