Nuestro objetivo sera la carga inicia l a la tabla ZTABLA_USUARIOS, para ello creamos un archivo de texto con los datos de tabla usuarios,
TYPE-POOLS: slis. * 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 mensajes DATA: BEGIN OF ti_messages OCCURS 0. INCLUDE STRUCTURE bdcmsgcoll. DATA: END OF ti_messages. * Estructura de mensajes DATA: st_messages TYPE bdcmsgcoll. * Tabla de usuarios DATA: ti_archivo TYPE STANDARD TABLE OF ztabla_usuarios, st_archivo LIKE LINE OF ti_archivo. * Tabla de errores DATA: BEGIN OF ti_errores OCCURS 0, dni TYPE z_dni, descripcion(100) TYPE c, END OF ti_errores.
La estrucutra BDCMSGCOLL es utilizada para definir la tabla interna que almacena los mensajes del batch input.
2DO PASO LECTURA DE DATOS DE ARCHIVOS DE ENTRADA
Ejecutamos el metodo GUI_UPLOAD para levantar el archivo de entrada con la informacion para generar el batch input,
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.
3ER PASO CARGA DE LA TABLA BDCDATA
Para la carga usamos la subrutina BDC_FIELD, antes debemos inicializar la tabla interna.
Como vamos a ingresar mas de un registro tendremos que manejar indices para saber en que fila estamos cargando los datos, para esto concatenamos al nombte del campo el numero de fila que le corresponde.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-NOMBRE_APE(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-nombre_ape.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_USU(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-estado_usu.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-DIRECCION(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-direccion.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-CODIGO_POSTAL(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-codigo_postal.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-FECHA_NAC(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-fecha_nac.
CLEAR v_campo.
CONCATENATE 'ZTABLA_USUARIOS-ESTADO_CIVIL(' v_indice ')' INTO v_campo.
PERFORM bdc_field USING ' ' v_campo st_archivo-estado_civil.
4TO PASO EJECUCION DE LA SENTENCIA CALL TRANSACTION
Vamos a ejecutar la sentencia CALL TRANSACTION de la siguinte manera.
CALL TRANSACTION v_cod_trans USING ti_bdc_data
MODE v_modo
UPDATE v_update
MESSAGES INTO ti_messages.
IF NOT sy-subrc IS INITIAL.
v_error = 'X'.
ENDIF.
USING: es donde ponemos la tabla BDCDATA que se utilizara.
MODE: determina el procesamiento que usara el BATCH INPUT los posibles son:
A = procesamiento con la visualizacion de todas las pantallas
E = procesa donde se muestran las pantallas solo si ocurre un error. se terminar el procesamiento con SUBRC igual a 1001, el campo SY-MSGTY contendra 'S' SY-MSGID contrendra '00' SY-MSGNO contendra '344' SY-MSGV1 contendra 'SAPMSSY3' y SY-MSGV2 contendra '0131'.
N = procesa donde no se muestran las pantallas
P = procesa donde no se muestran las pantallas si se alcanza un break pasa al control del debug.
AUDIO 1: Mientras desarrollamos un programa mediante Transaction, es preferible el mode A en el cual nos permite visualizar cada una de las pantallas, y en caso del error se detiene en el error mismo, una vez detectado y corregido podemos modificarlo a N.
UPDATE: determina el modo de actualizacion de cambios. Los posibles son:
A = actualizacion asincronica, se produce igual que un COMMIT WORK
S = actualizacion sincronica, se produce igual que un COMMIT WORK AND WAIT
L = actualizacion local.
Una vez terminado ejecutamos con modo "A" y lo primero que hacemos es ingresar a la SM30, con el nombre de la tabla y presionamos Actualizar. Entradas Nuevas, y damos grabar, salimos la TX y ejecutamos cuantos registros de usuario ingresemos en la tabla.