================= ******** UNIDAD 7 ******** =================
******** Lección 6: "Batch Input Utilizando Juego de datos" *********
1ER PASO: DECLARACION DE DATOS PROPIOS DE BATCH INPUT
Declaramos la tabla interna y una estructura de tipo BDCDATA y otra tabla interna que contendra los registros de entrada.
2DO PASO LECTURA DE DATOS DE ARCHIVO DE ENTRADA
Ejecutamos el metodo GUI_UPLOAD para levantar el archivo de entrada,
3ER PASO APERTURA DE LA SESION DE JUEGO DE DATOS
Para la apertura usamos la funcion BDC_OPEN_GROUP especificando el mandante, grupo y usuario.
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.
4TO CARGA DE LA TABLA BDCDATA
Para la carga usamos la subrutina BDC_FIELD pero antes debemos iniciar la tabla del batch input.
FORM bdc_field USING dyn_begin TYPE c
campo1
campo2.
CLEAR st_bdc_data.
IF dyn_begin = 'X'.
st_bdc_data-program = campo1.
st_bdc_data-dynpro = campo2.
st_bdc_data-dynbegin = dyn_begin.
ELSE.
st_bdc_data-fnam = campo1.
st_bdc_data-fval = campo2.
ENDIF.
APPEND st_bdc_data TO ti_bdc_data.
ENDFORM
5TO PASO INSERCIÓN DEL JUEGO DE DATOS
para la insercion usamos la funcion BDC_INSERT
FORM insertar_jd .
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.
ENDFORM.
6TO PASO CIERRE DE LA SESION DEL JUEGO DE DATOS Para cerrar usamos la funcion
BDC_CLOSE_GROUP
FORM cerrar_jd .
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.
ENDFORM
7MO EJECUCION DEL JUEGO DE DATOS
Para la ejecucion entramos a la TX SM35, y seleccionamos juego de datos,
En la ventana de dialogo marcamos la opcion invisible(BACKGROUND) y presionamos Ejecutar(Process)
Finalmente la sesion cambiara de status dependiendo del resultado de la ejecucion y los datos se actualizaran en la tabla.
AUDIO: Mediante CALL TRANSACTION EL BATCH INPUT ES ONLINE MIENTRAS JUEGO DE DATOS ES DE FONDO, mientras CALL TRANSACTION SE HACE SOLO MEDIANTE UNA TX MIENTRAS EN JUEGO DE DATOS ES A VARIAS Y GENERA LOG POR CADA SECCION.
Utilizacion del programa
RSBDCBTC para la ejecucion de juego de datos
Podemos ejecutar el juego de datos de manera online mediante el programa estandar RSBDCBTC, para ello tenemos que crear un JOB
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.
Y cerramos el JOB
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = v_jobcount
jobname = v_jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
Luego nos vamos al TX SM35 vemos que el juego dedato se proceso sin la necesidad de hacerlo manualmente.