✒️ABAP El Batch Input utilizando Call transaction
ABAP El Batch Input utilizando Call transaction
El Batch Input utilizando Call transaction
LECCION 4º DE 7:
1 - Mi primer BI usando Call transaction
1 - declaracion de los datos propios del BI.
*&---------------------------------------------------------------------*
*& Report ZTEST_CALL_TRANSACCTION
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_call_transacction.
* Tipos
TYPE-POOLS: slis.
* Tabla interna del BI con la estructura de BDCDATA
DATA: BEGIN OF ti_bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF ti_bdcdata.
* Estructura del BI
DATA: wa_bdcdata TYPE bdcdata.
* Tabla interna de mensajes
DATA: BEGIN OF ti_mensajes OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF ti_mensajes.
* Estructura de mensajes
DATA: wa_mensajes TYPE bdcmsgcoll.
* Tabla interna de usuarios
DATA: ti_archivo TYPE STANDARD TABLE OF ztabla_usuarios,
wa_archivo LIKE LINE OF ti_archivo.
* Tabla interna de errores
DATA: BEGIN OF ti_errores OCCURS 0,
dni TYPE z_dni,
descripcion(100) TYPE c,
END OF ti_errores.
* Estructura de errores
DATA: wa_errores LIKE LINE OF ti_errores.
Estructura BDCMSGCOLL: se usa para almacenar los mensajes del BI.
2 - Lectura de datos del archivo de entrada.
*&---------------------------------------------------------------------*
*& Form LEVANTAR_ARCHIVO_ENTRADA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM levantar_archivo_entrada .
DATA: vl_file TYPE string.
IF p_path IS INITIAL.
MESSAGE s000(z_prueba) WITH text-003.
ELSE.
vl_file = p_path.
* Se abre el archivo de entrada para lectura
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = vl_file
filetype = 'ASC'
has_field_separator = ''
CHANGING
data_tab = ti_archivo[]
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc NE 0.
MESSAGE e000(z_prueba) WITH text-004.
ENDIF.
IF ti_archivo[] IS INITIAL.
MESSAGE s000(z_prueba) WITH text-005.
ENDIF.
ENDIF.
ENDFORM. " LEVANTAR_ARCHIVO_ENTRADA
3 - Carga de ti bdcdata.
*&---------------------------------------------------------------------*
*& Form CARGAR_TABLA_BDCDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cargar_tabla_bdcdata .
CLEAR: ti_bdcdata, ti_mensajes.
REFRESH: ti_bdcdata, ti_mensajes.
* Ingresamos a la primer pantalla y presionamos el botón de mantenimiento
PERFORM llenar_tabla_bdcdata USING 'X' 'SAPMSVMA' '0100'.
PERFORM llenar_tabla_bdcdata USING ' ' 'VIEWNAME' 'ZTABLA_USUARIOS'.
PERFORM llenar_tabla_bdcdata USING ' ' 'BDC_OKCODE' '=UPD'.
* Hacemos clic en el botón nuevas entradas
PERFORM llenar_tabla_bdcdata USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
PERFORM llenar_tabla_bdcdata USING ' ' 'BDC_OKCODE' '=NEWL'.
ADD 1 TO v_indice.
PERFORM completo_ceros_izq.
* Cargamos los datos del usuario
PERFORM llenar_tabla_bdcdata USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DNI(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-dni.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-NOMBRE_APE(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-nombre_ape.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_USU(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-estado_usu.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DIRECCION(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-direccion.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-FNACIMIENTO(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-fnacimiento.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-NACIONALIDAD(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-nacionalidad.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-CODIGO_POSTAL(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-codigo_postal.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_CIVIL(' v_indice ')' INTO v_campo.
PERFORM llenar_tabla_bdcdata USING ' ' v_campo wa_archivo-estado_civil.
* Grabamos los registros
PERFORM llenar_tabla_bdcdata USING ' ' 'BDC_OKCODE' '=SAVE'.
* Cerramos la segunda pantalla
PERFORM llenar_tabla_bdcdata USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
PERFORM llenar_tabla_bdcdata USING ' ' 'BDC_OKCODE' '=ENDE'.
* Cerramos la primer pantalla
PERFORM llenar_tabla_bdcdata USING 'X' 'SAPMSVMA' '0100'.
PERFORM llenar_tabla_bdcdata USING ' ' 'BDC_OKCODE' '/EENDE'.
ENDFORM. " CARGAR_TABLA_BDCDATA
4 - Ejecucion de CALl Transaction
*&---------------------------------------------------------------------*
*& Form CALL_SM30
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM call_sm30 .
CLEAR: ti_mensajes, v_error.
REFRESH ti_mensajes.
IF p_a EQ c_x.
v_modo = c_a.
ELSE.
v_modo = c_n.
ENDIF.
* Call transaction
CALL TRANSACTION v_cod_trans USING ti_bdcdata
MODE v_modo
UPDATE v_update
MESSAGES INTO ti_mensajes.
IF NOT sy-subrc IS INITIAL.
v_error = c_x.
ENDIF.
ENDFORM. " CALL_SM30
La sentencia Call Transaction tambien se usa en reportes, para acceder a una determinada transaccion ,
a partir de los datos ingresados por pantalla , con el agregado de la clausula AND SKIP FIRST SCREEN.
 
 
 
Sobre el autor
Publicación académica de Pablo Adrian Oggero, en su ámbito de estudios para la Carrera Consultor ABAP.
Pablo Adrian Oggero
Profesión: Scrum - Analista Funcional - Argentina - Legajo: MC99M
✒️Autor de: 179 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial