Você está na página 1de 5

ABAP Cdigo simple para crear los dominios del diccionario

con el BATCH INPUT va un fichero texto

El Programa
**********************************************************************
**
* REPORT Z_BATCH_CREACCION_DOM
* ....................................................................
* Descripcin : ES un BATCH INPUT de creacin de los dominios
* del diccionario va un fichero texto que tiene las informaciones
* de los dominios.
* NB : hay que crear el fichero de datos Como el ejemplo abajo
*
* AUTOR :Ahmed BENJELLOUN FECHA: 16/08/2007
*
**********************************************************************
**
REPORT z_batch_creaccion_dom.
**********************************************************************
**
* Pantalla de seleccin
**********************************************************************
**
SELECTION-SCREEN BEGIN OF BLOCK block1
WITH FRAME TITLE text-t01. "text-t01 = Descargar el Fichero
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY, "El Fichero de entrada
p_user LIKE sy-uname OBLIGATORY DEFAULT sy-uname,
"El Usario
p_packag(40) OBLIGATORY DEFAULT '$TMP'.
"El Package
SELECTION-SCREEN END OF BLOCK block1.
**********************************************************************
**
* Tablas internas
**********************************************************************
**
* Tabla interna i_tab para contener los datos del fichero
DATA : BEGIN OF i_tab OCCURS 0,
dom(15), "Nom
descri(30), "Description
type(7), "Numero
long(2), "Unit
END OF i_tab.
* Tabla interna i_bdcdata para contener los datos del fichero
DATA : i_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
**********************************************************************
**
* AT SELECTION-SCREEN ON VALUE-REQUEST.
**********************************************************************
**
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* Selectionar el Fichero
CALL FUNCTION 'F4_FILENAME'

EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name
= p_file.
**********************************************************************
**
* AT SELECTION-SCREEN .
**********************************************************************
**
AT SELECTION-SCREEN.
* Chequear si existe el fichero
PERFORM control_file.
**********************************************************************
**
* START-OF-SELECTION.
**********************************************************************
**
START-OF-SELECTION.
* Llenar la tabla interna i_tab con los datos del fichero
PERFORM lecture_file.
* Abrir El BATCH
PERFORM open_batch.
* Insertar El BATCH
PERFORM insert_batch.
* Cerrar El BATCH
PERFORM close_batch.
**********************************************************************
**
* END-OF-SELECTION.
**********************************************************************
**
END-OF-SELECTION.
WRITE :/ 'El Fin del BATCH'.
**********************************************************************
**
* Routines
**********************************************************************
**
*&---------------------------------------------------------------------*
*& Form control_file
*&---------------------------------------------------------------------*
* Controlar El nombre del fichero
*----------------------------------------------------------------------*
FORM control_file .
IF p_file IS INITIAL.
* Mensaje de error 'Fichero no existe'.
MESSAGE e000(zmm) WITH 'Hay que selectionar el fichero'.
ENDIF.
ENDFORM. " control_file
*&---------------------------------------------------------------------*

*& Form lecture_file


*&---------------------------------------------------------------------*
* Llenar la tabla interna del fichero
*----------------------------------------------------------------------*
FORM lecture_file.
DATA : ld_file TYPE string.
MOVE p_file TO ld_file.
CLEAR i_tab[].
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename
= ld_file
has_field_separator = 'X'
TABLES
data_tab
= i_tab.
ENDFORM. " lecture_file
*&---------------------------------------------------------------------*
*& Form open_batch
*&---------------------------------------------------------------------*
* Abrir El Grupo Batch Input
*----------------------------------------------------------------------*
FORM open_batch .
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client
= sy-mandt
group
= 'GROUP1'
keep
= 'X'
user
= sy-uname
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.
ENDFORM. " open_batch
*&---------------------------------------------------------------------*
*& Form close_batch
*&---------------------------------------------------------------------*
* Cerar El Grupo Batch Input
*----------------------------------------------------------------------*
FORM close_batch .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS
= 3.
ENDFORM. " close_batch

*&---------------------------------------------------------------------*
*& Form insert_batch
*&---------------------------------------------------------------------*
* Insertar DATA en el Batch Input
*----------------------------------------------------------------------*
FORM insert_batch .
DATA : l_len TYPE i,
l_cmpt TYPE i.
CLEAR : i_bdcdata[] , l_len, l_cmpt.
DESCRIBE TABLE i_tab LINES l_len.
LOOP AT i_tab.
ADD 1 TO l_cmpt.
* La Primera Pantalla
PERFORM bdc_dynpro USING 'SAPMSRD0' '0102'.
PERFORM bdc_filed USING 'BDC_CURSOR' 'RSRD1-DOMA_VAL'.
PERFORM bdc_filed USING 'RSRD1-DOMA' 'X'.
PERFORM bdc_filed USING 'RSRD1-DOMA_VAL' i_tab-dom.
PERFORM bdc_filed USING 'BDC_OKCODE' '=ADD'.
* La Segunda Pantalla
PERFORM bdc_dynpro USING 'SAPLSD11' '1200'.
PERFORM bdc_filed USING 'DD01D-DDTEXT' i_tab-descri.
PERFORM bdc_filed USING 'BDC_SUBSCR' 'SAPLSD11
PERFORM bdc_filed USING 'BDC_CURSOR' 'DD01D-LENG'.
PERFORM bdc_filed USING 'DD01D-DATATYPE' i_tab-type.
PERFORM bdc_filed USING 'DD01D-LENG' i_tab-long.
PERFORM bdc_filed USING 'BDC_OKCODE' '=WB_SAVE'.
* La Tercera Pantalla
PERFORM bdc_dynpro USING 'SAPLSTRD' '0100'.
PERFORM bdc_filed USING 'BDC_CURSOR' 'KO007-L_DEVCLASS'.
PERFORM bdc_filed USING 'KO007-L_DEVCLASS' p_packag.
PERFORM bdc_filed USING 'KO007-L_AUTHOR' p_user.
PERFORM bdc_filed USING 'BDC_OKCODE' '=ADD'.
* La Cuarta Pantalla
PERFORM bdc_dynpro USING 'SAPLSD11' '1200'.
PERFORM bdc_filed USING 'BDC_SUBSCR' 'SAPLSD11
PERFORM bdc_filed USING 'BDC_CURSOR' 'DD01D-LENG'.
PERFORM bdc_filed USING 'BDC_OKCODE' '=WB_ACTIVATE'.
* La Quinta Pantalla
PERFORM bdc_dynpro USING 'SAPLSEWORKINGAREA' '0205'.
PERFORM bdc_filed USING 'BDC_OKCODE' '=WEIT'.
* La Sexta Pantalla
PERFORM bdc_dynpro USING 'SAPLSD11' '1200'.
PERFORM bdc_filed USING 'BDC_SUBSCR' 'SAPLSD11
PERFORM bdc_filed USING 'BDC_OKCODE' '=WB_BACK'.
IF l_len = l_cmpt.
PERFORM bdc_dynpro USING 'SAPMSRD0' '0102'.
PERFORM bdc_filed USING 'BDC_CURSOR' 'RSRD1-DOMA_VAL'.
PERFORM bdc_filed USING 'BDC_OKCODE' '/ENDE'.
EXIT.
ENDIF.
ENDLOOP.
* La insercion de los datos en el BATCH
CALL FUNCTION 'BDC_INSERT'
EXPORTING

1201TS_SCREEN'.

1201TS_SCREEN'.

1201TS_SCREEN'.

tcode
= 'SE11'
TABLES
dynprotab
= i_bdcdata
EXCEPTIONS
internal_error = 1
not_open
=2
queue_error
=3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS
= 7.
ENDFORM. " insert_batch
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR i_bdcdata.
i_bdcdata-program = program.
i_bdcdata-dynpro = dynpro.
i_bdcdata-dynbegin = 'X'.
APPEND i_bdcdata.
ENDFORM. " bdc_dynpro
*&---------------------------------------------------------------------*
*& Form bdc_filed
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
FORM bdc_filed USING fnam fval.
CLEAR i_bdcdata.
i_bdcdata-fnam = fnam.
i_bdcdata-fval = fval.
APPEND i_bdcdata.
ENDFORM. " bdc_filed
**********************************************************************
**

Ejemplo Del fichero


*Y_DOMINE_1
*Y_DOMINE_2
*Y_DOMINE_3
*Y_DOMINE_4
*Y_DOMINE_5
*Y_DOMINE_6
*Y_DOMINE_7
*Y_DOMINE_8
*Y_DOMINE_9

decription
decription
decription
decription
decription
decription
decription
decription
decription

1
2
3
4
5
6
7
8
9

int1
char
char
char
char
int1
char
char
char

3
5
3
5
10
3
10
5
10

Você também pode gostar