
Crear Batch Input utilizando Juego de Datos:
--------------------------------------------------------------------------------------------
1- Declaración de datos propios del Batch Input:
* Tabla del BI con la estructura de BDCDATA
DATA: BEGIN OF ti_bdc_data OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF ti_bdc_data.
* Estructura del BI
DATA: st_bdc_data TYPE bdcdata.
* Tabla de usuarios
DATA: BEGIN OF ti_archivo OCCURS 0,
dni(8) TYPE c, "Dni
nombre_ape(35) TYPE c, "Nombre y Apellido
estado_usu(1) TYPE c, "Estado del usuario
direccion(30) TYPE c, "Dirección
codigo_postal(4) TYPE c, "Código Postal
f_nacimiento(8) TYPE c, "Fecha Nacimiento
estado_civil(1) TYPE c, "Estado civil
END OF ti_archivo.
DATA: st_archivo LIKE LINE OF ti_archivo.
* Variables
DATA: v_campo(35) TYPE c,
v_indice(2) TYPE c,
v_qid TYPE apq_quid,
v_group TYPE apq_grpn.
--------------------------------------------------------------------------------------------
2- Lectura de datos de archivo de entrada:
Ejecutamos GUI_UPLOAD para levantar el archivo de entrada con la información para generar el Batch Input.
--------------------------------------------------------------------------------------------
3- Apertura de la sesión del Juego de Datos:
v_group = sy-repid.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = v_group
keep = 'X'
user = sy-uname
IMPORTING
qid = v_qid
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
--------------------------------------------------------------------------------------------
4- Carga de la tabla BDCDATA:
Se utiliza la subrutina BDC_FIELD.
Al ingresar mas de un registro, será necesario utilizar indices.
Ejemplo:
* Cargo datos del usuario
PERFORM bdc_field USING 'X' 'SAPLZTABLA_USUARIOS' '0001'.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DNI(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-dni.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-NOMBRE_APE(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-nombre_ape.
--------------------------------------------------------------------------------------------
5- Inserción del Juego de Datos:
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'SM30'
TABLES
dynprotab = ti_bdc_data
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 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.
* Se ha lanzado el juego de datos, verificarlo en la trx SM35
MESSAGE s000(z_prueba) WITH text-010.
ENDIF.
--------------------------------------------------------------------------------------------
6- Cierre de la sesión del Juego de Datos:
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
--------------------------------------------------------------------------------------------
7- Ejecución del Juego de Datos:
------------------------------------------------------------------------------------
A través de SM35:
Dentro de SM35, seleccionamos el Juego de Datos y presionamos 'Ejecutar' o 'Process'.
Luego, en la nueva ventana, seleccionamos 'Invisible' o 'Background' y presionamos 'Ejecutar' o 'Process'.
------------------------------------------------------------------------------------
A través del modo 'Online':
Se basa en la creación de un JOB y la ejecución del programa estándar RSBDCBTC.
Ejemplo:
SUBMIT rsbdcbtc
USER sy-uname
VIA JOB v_jobgroup
NUMBER v_jobcount
WITH queue_id = v_qid
WITH mappe = v_jobgroup
WITH modus = 'N' "No display
WITH logall = ''
AND RETURN.
--------------------------------------------------------------------------------------------
Diferencias entre modo Online y modo Juego de Datos:
------------------------------------------------------------------------------------
Modo Online:
Se realiza de forma síncrona.
Se transfieren datos a una sola transacción en cada CALL TRANSACTION.
No se generan logs.
------------------------------------------------------------------------------------
Modo Juego de Datos:
Se realiza de forma asíncrona.
Se transfieren datos a múltiples transacciones.
Se generan logs en cada sesión.