- REPORT z58_int_prg_bi_loader.
- TABLES: t000.
- SELECT-OPTIONS: p_mandt FOR sy-mandt,
- p_user FOR sy-uname,
- p_fecha FOR sy-datum.
- SELECTION-SCREEN SKIP 1.
- PARAMETERS: p_save AS CHECKBOX DEFAULT ' '. "<-- Save to DB
- DATA: p_name TYPE z58_int_de_bi_name.
- DATA: ess LIKE apqi OCCURS 0 WITH HEADER LINE,
- esp LIKE apqi OCCURS 0 WITH HEADER LINE,
- eax LIKE bdcdata OCCURS 0 WITH HEADER LINE,
- ah(20),
- al(20),
- ebx(60),
- ecx(2) TYPE n,
- edx(2) TYPE n,
- edi(255),
- esi LIKE eax.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ IECI:INI 20200519 Ejemplo de USO
- * Ini : BAT-BI v 1.3 ----------------- 07.01.2005
- DEFINE bi_create.
- DATA: bi_tab LIKE bdcdata OCCURS 0 WITH HEADER LINE,
- bi_err LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
- bi_mod(1) VALUE 'N',
- bi_upd(1) VALUE 'S',
- bi_wt100 LIKE t100,
- bi_tt LIKE tline OCCURS 0 WITH HEADER LINE,
- bi_tout(255) OCCURS 0 WITH HEADER LINE,
- bi_amp TYPE x VALUE 80. "Truco
- FIELD-SYMBOLS: <bi_fs>.
- END-OF-DEFINITION.
- DEFINE bi_clear.
- CLEAR: bi_tab, bi_err, bi_tt, bi_tout.
- REFRESH: bi_tab, bi_err, bi_tt, bi_tout.
- END-OF-DEFINITION.
- DEFINE bi_add.
- CLEAR bi_tab.
- IF NOT &1 IS INITIAL.
- bi_tab-program = &2.
- bi_tab-dynpro = &3.
- bi_tab-dynbegin = 'X'.
- IF &1 NE 'X'.
- APPEND bi_tab.
- CLEAR bi_tab.
- bi_tab-fnam = 'BDC_OKCODE'.
- bi_tab-fval = &1.
- ENDIF.
- ELSE.
- bi_tab-fnam = &2.
- bi_tab-fval = &3.
- ENDIF.
- APPEND bi_tab.
- END-OF-DEFINITION.
- DEFINE bi_call.
- CALL TRANSACTION &1 USING bi_tab MODE bi_mod UPDATE bi_upd
- MESSAGES INTO bi_err.
- END-OF-DEFINITION.
- DEFINE bi_error.
- REFRESH bi_tt.
- DESCRIBE TABLE bi_err LINES sy-pexpi.
- CHECK sy-pexpi GT 0.
- SORT bi_err.
- DELETE ADJACENT DUPLICATES FROM bi_err.
- * Se subrimen los mensajes de tipo 'S' num: 402:"Campo tranf. a visu" y
- * num: 432:"Sistema ha ejecutado c.
- DELETE bi_err WHERE msgtyp = 'S'
- AND ( msgnr = '402' OR msgnr = '432'
- OR msgnr = '000' ).
- LOOP AT bi_err.
- CLEAR bi_wt100.
- SELECT SINGLE text INTO bi_wt100-text FROM t100
- WHERE sprsl = sy-langu AND
- arbgb = bi_err-msgid AND
- msgnr = bi_err-msgnr.
- IF sy-subrc = 0 AND NOT bi_wt100-text IS INITIAL.
- * d_len = strlen( bi_err-msgv1 ).
- CLEAR sy-pexpi.
- TRANSLATE bi_wt100-text USING ' ~'.
- SPLIT bi_wt100-text AT bi_amp INTO TABLE bi_tout.
- CLEAR bi_wt100-text.
- LOOP AT bi_tout.
- CHECK NOT bi_tout IS INITIAL.
- ADD 1 TO sy-pexpi.
- IF sy-pexpi < 5.
- CONCATENATE 'bi_err-msgv' sy-pexpi INTO sy-repi2.
- ASSIGN (sy-repi2) TO <bi_fs>.
- ENDIF.
- CONCATENATE bi_wt100-text bi_tout <bi_fs> INTO bi_wt100-text.
- CONDENSE bi_wt100-text NO-GAPS.
- ENDLOOP.
- CONDENSE bi_wt100-text NO-GAPS.
- TRANSLATE bi_wt100-text USING '~ '.
- bi_tt-tdline = bi_wt100-text.
- APPEND bi_tt.
- ENDIF.
- ENDLOOP.
- DESCRIBE TABLE bi_tt LINES sy-pexpi.
- CHECK sy-pexpi > 0.
- * Si contiene errores.se muestran en una ventana.
- CALL FUNCTION 'COPO_POPUP_TO_DISPLAY_TEXTLIST'
- EXPORTING task = 'DISPLAY'
- titel = 'Errores en transaccin'
- TABLES text_table = bi_tt.
- END-OF-DEFINITION.
- * Fin : BAT-BI v 1.3 ----------------- 07.01.2005
- **Ejemplo
- *end-of-selection.
- * bi_create.
- * bi_clear.
- * bi_add: 'X' 'SAPLWBABAP' '0100',
- * ' ' 'BDC_OKCODE' '=BACK'.
- * bi_call 'SE38'.
- *--[ IECI:FIN 20200519 Ejemplo de USO
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- START-OF-SELECTION.
- PERFORM data_bi_get.
- PERFORM data_bi_list.
- FORM data_bi_to_db_clipboard.
- TYPES:
- BEGIN OF ty_clipdata,
- data TYPE c LENGTH 500,
- END OF ty_clipdata.
- DATA: lt_clipdata TYPE STANDARD TABLE OF ty_clipdata.
- DATA: ls_clipdata LIKE LINE OF lt_clipdata.
- CALL FUNCTION 'BDC_OBJECT_READ'
- EXPORTING
- queue_id = ess-qid
- TABLES
- dynprotab = eax
- EXCEPTIONS
- not_found = 1
- system_failure = 2
- invalid_datatype = 3
- OTHERS = 4.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Grabamos en tabla
- IF NOT p_save IS INITIAL." AND NOT p_name IS INITIAL.
- TYPES: BEGIN OF ty_100,
- mandt TYPE mandt,
- bi_name TYPE c LENGTH 20,
- bi_cont TYPE n LENGTH 4,
- bi_no_actiu TYPE xfeld,
- bi_dynbegin TYPE bdc_start,
- bi_program TYPE bdc_prog,
- bi_dynpro TYPE bdc_dynr,
- bi_fnam TYPE fnam_____4,
- bi_fval TYPE bdc_fval,
- bi_desc TYPE c LENGTH 60,
- END OF ty_100.
- DATA: l_100 TYPE z58_int_tb_100. "<-- BD Tabla como la ty_100
- l_100-bi_name = p_name.
- l_100-bi_cont = 0.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Borramos la tabla de BI
- DATA: t_sval TYPE STANDARD TABLE OF sval,
- l_sval TYPE sval,
- l_return TYPE c.
- l_sval-tabname = 'Z58_INT_TB_100'.
- l_sval-fieldname = 'BI_NAME'.
- l_sval-value = ess-groupid.
- l_sval-field_obl = 'X'.
- APPEND l_sval TO t_sval.
- *FIELD_ATTR
- *FIELD_OBL
- *COMP_CODE
- *FIELDTEXT
- *COMP_TAB
- *COMP_FIELD
- *NOVALUEHLP
- CALL FUNCTION 'POPUP_GET_VALUES'
- EXPORTING
- * NO_VALUE_CHECK = ' '
- popup_title = 'Nom del BI'
- start_column = '45'
- start_row = '8'
- IMPORTING
- returncode = l_return
- TABLES
- fields = t_sval
- EXCEPTIONS
- error_in_fields = 1
- OTHERS = 2.
- READ TABLE t_sval INTO l_sval INDEX 1.
- p_name = l_sval-value.
- DELETE FROM z58_int_tb_100 WHERE bi_name = p_name.
- LOOP AT eax.
- ADD 10 TO l_100-bi_cont.
- l_100-bi_dynbegin = eax-dynbegin.
- l_100-bi_program = eax-program.
- l_100-bi_dynpro = eax-dynpro.
- l_100-bi_fnam = eax-fnam.
- l_100-bi_fval = eax-fval.
- l_100-bi_desc = ''.
- CLEAR edi.
- IF NOT eax-program IS INITIAL.
- PERFORM descrip_dynp.
- ELSE.
- IF eax-fnam CA '-'. PERFORM descrip_field. ENDIF.
- IF eax-dynbegin = 'T'.
- esi = l_100-bi_fnam.
- PERFORM descrip_tran.
- ENDIF.
- ENDIF.
- l_100-bi_desc = edi.
- SHIFT l_100-bi_desc LEFT DELETING LEADING '"'.
- SHIFT l_100-bi_desc LEFT DELETING LEADING ' '.
- *--[ Insertamos en tabla
- INSERT z58_int_tb_100 FROM l_100. "<-- BD tabla como la ty_100
- ENDLOOP.
- ENDIF.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Volcamos en salida
- LOOP AT eax.
- IF eax-dynbegin = 'T'.
- CONCATENATE 'bi_call ''' esi-fnam '''.' INTO edi.
- CONDENSE edi.
- PERFORM descrip_tran.
- esi = eax.
- IF sy-tabix NE 1.
- * WRITE: / edi.
- ls_clipdata = edi. APPEND ls_clipdata TO lt_clipdata.
- * SKIP 1.
- ENDIF.
- IF sy-tabix = 1. "WRITE: / 'bi_create.'.
- ls_clipdata = 'bi_create.'. APPEND ls_clipdata TO lt_clipdata.
- ENDIF.
- * WRITE: / 'bi_clear.', / 'bi_add:'.
- ls_clipdata = 'bi_clear. bi_add:'. APPEND ls_clipdata TO lt_clipdata.
- CONTINUE.
- ENDIF.
- IF NOT eax-program IS INITIAL.
- CONCATENATE '''X'' ''' eax-program ''' ''' eax-dynpro
- ''',' INTO edi.
- CONDENSE edi.
- PERFORM descrip_dynp.
- ELSE.
- edx = 0.
- ecx = strlen( eax-fval ).
- IF ecx NE 0.
- TRANSLATE eax-fval+edx(ecx) USING ' ~'.
- ENDIF.
- IF eax-fnam NP 'BDC*SCR'.
- CONCATENATE ''' '' ''' eax-fnam ''' ''' eax-fval ''''
- ',' INTO edi.
- ELSE.
- CONCATENATE ''' '' ''' eax-fnam '''' INTO edi.
- ENDIF.
- CONDENSE edi.
- TRANSLATE edi USING '~ '.
- IF eax-fnam CP 'BDC*SOR'.
- IF edi NA '()'. CONTINUE. ENDIF.
- ENDIF.
- IF eax-fnam CA '-'. PERFORM descrip_field. ENDIF.
- ENDIF.
- * WRITE: /9 edi. ls_clipdata = edi. APPEND ls_clipdata TO lt_clipdata.
- IF eax-fnam CP 'BDC*SCR'.
- CONCATENATE '''' eax-fval ''',' INTO edi. CONDENSE edi.
- TRANSLATE edi USING '~ '.
- * WRITE /9 edi.
- ls_clipdata = edi. APPEND ls_clipdata TO lt_clipdata.
- ENDIF.
- ENDLOOP.
- CONCATENATE 'bi_call ''' esi-fnam '''.' INTO edi. CONDENSE edi.
- PERFORM descrip_tran.
- * WRITE: / edi.
- ls_clipdata = edi. APPEND ls_clipdata TO lt_clipdata.
- LOOP AT lt_clipdata INTO ls_clipdata WHERE data CP '''*'.
- CONCATENATE ' ' ls_clipdata-data INTO ls_clipdata-data RESPECTING BLANKS.
- MODIFY lt_clipdata INDEX sy-tabix FROM ls_clipdata.
- ENDLOOP.
- DATA: lv_rc TYPE i.
- cl_gui_frontend_services=>clipboard_export(
- IMPORTING
- data = lt_clipdata
- CHANGING
- rc = lv_rc
- EXCEPTIONS
- cntl_error = 1
- error_no_gui = 2
- not_supported_by_gui = 3
- no_authority = 4
- OTHERS = 5 )
- .
- MESSAGE s398(00) WITH 'BI copiado al clipboard'.
- ENDFORM.
- FORM descrip_tran.
- SELECT SINGLE ttext INTO ebx FROM tstct WHERE sprsl = sy-langu
- AND tcode = esi-fnam.
- CONCATENATE edi ' "' ebx INTO edi.
- ENDFORM.
- FORM descrip_dynp.
- SELECT SINGLE dtxt INTO ebx FROM d020t WHERE prog = eax-program
- AND dynr = eax-dynpro
- AND lang = sy-langu.
- CONCATENATE edi ' "' ebx INTO edi.
- ENDFORM.
- FORM descrip_field.
- SPLIT eax-fnam AT '-' INTO ah al.
- CHECK NOT ah IS INITIAL AND NOT al IS INITIAL.
- SEARCH al FOR '('.
- IF sy-subrc EQ 0.
- sy-index = 0.
- al = al+sy-index(sy-fdpos).
- ENDIF.
- SELECT SINGLE rollname INTO ebx FROM dd03l WHERE tabname = ah
- AND fieldname = al.
- CHECK sy-subrc EQ 0.
- SELECT SINGLE ddtext INTO ebx FROM dd04t WHERE rollname = ebx
- AND ddlanguage = sy-langu.
- CHECK sy-subrc EQ 0.
- CONCATENATE edi ' "' ebx INTO edi.
- ENDFORM.
- FORM data_bi_list.
- DATA bess LIKE ess.
- SORT ess BY credate DESCENDING cretime DESCENDING groupid userid.
- DATA: lt_fieldcat TYPE slis_t_fieldcat_alv,
- ls_fieldcat TYPE slis_fieldcat_alv,
- ls_selfield TYPE slis_selfield,
- l_exit(1) TYPE c.
- CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
- EXPORTING
- i_structure_name = 'APQI'
- CHANGING
- ct_fieldcat = lt_fieldcat
- EXCEPTIONS
- inconsistent_interface = 1
- program_error = 2
- OTHERS = 3.
- LOOP AT lt_fieldcat INTO DATA(lf).
- CASE lf-fieldname.
- WHEN 'USERID' OR 'GROUPID' OR 'CREDATE' OR 'CRETIME'." or 'QID'.
- CLEAR sy-subrc.
- WHEN OTHERS.
- lf-no_out = 'X'.
- lf-tech = 'X'.
- ENDCASE.
- MODIFY lt_fieldcat INDEX sy-tabix FROM lf.
- ENDLOOP.
- CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
- EXPORTING
- i_title = 'Selecciona'
- i_selection = 'X'
- i_zebra = 'X'
- * i_checkbox_fieldname = 'FLAG'
- i_tabname = 'APQI'
- it_fieldcat = lt_fieldcat
- IMPORTING
- es_selfield = ls_selfield
- e_exit = l_exit
- TABLES
- t_outtab = ess
- EXCEPTIONS
- program_error = 1
- OTHERS = 2.
- IF sy-subrc EQ 0 AND ls_selfield-tabindex > 0.
- READ TABLE ess INDEX ls_selfield-tabindex.
- IF sy-subrc EQ 0.
- PERFORM data_bi_to_db_clipboard.
- ENDIF.
- ELSE.
- CLEAR ess.
- ENDIF.
- ENDFORM.
- FORM data_bi_get.
- CLEAR ess. REFRESH ess.
- SELECT * FROM t000 WHERE cccategory = 'C'.
- CLEAR esp. REFRESH esp.
- CALL FUNCTION 'BDC_OBJECT_SELECT'
- EXPORTING
- name = '*'
- datatype = '%BDC'
- client = t000-mandt
- TABLES
- apqitab = esp
- EXCEPTIONS
- invalid_datatype = 1
- OTHERS = 2.
- APPEND LINES OF esp TO ess.
- ENDSELECT.
- ENDFORM.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Rutinas de soporte para ser llamadas desde fuera
- FORM bi_100_save USING p_name
- p_bi_tab TYPE bdcdata_tab.
- DATA: bi_100 TYPE z58_int_tb_100 .
- CLEAR bi_100.
- SELECT SINGLE * FROM z58_int_tb_100
- INTO CORRESPONDING FIELDS OF bi_100
- WHERE bi_name = p_name.
- CHECK sy-subrc NE 0.
- bi_100-bi_name = p_name.
- bi_100-bi_cont = 0.
- LOOP AT p_bi_tab INTO DATA(l_tab).
- ADD 10 TO bi_100-bi_cont.
- bi_100-bi_program = l_tab-program.
- bi_100-bi_dynpro = l_tab-dynpro.
- bi_100-bi_dynbegin = l_tab-dynbegin.
- bi_100-bi_fnam = l_tab-fnam.
- bi_100-bi_fval = l_tab-fval.
- INSERT z58_int_tb_100 FROM bi_100.
- ENDLOOP.
- ENDFORM.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Carga un BI
- FORM bi_100_load USING p_name
- CHANGING p_bi_tab TYPE bdcdata_tab.
- DATA: bi_100 TYPE z58_int_tb_100 .
- SELECT SINGLE * FROM z58_int_tb_100
- INTO CORRESPONDING FIELDS OF bi_100
- WHERE bi_name = p_name.
- CHECK sy-subrc EQ 0.
- REFRESH p_bi_tab.
- SELECT bi_program AS program
- bi_dynpro AS dynpro
- bi_dynbegin AS dynbegin
- bi_fnam AS fnam
- bi_fval AS fval
- FROM z58_int_tb_100
- INTO CORRESPONDING FIELDS OF TABLE p_bi_tab
- WHERE bi_name = p_name AND
- bi_no_actiu NE 'X' AND
- bi_dynbegin NE 'T'. "<-- La transacción no hay que traerla
- ENDFORM.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Modifica valores de todos los campos del BI
- FORM bi_100_fill USING p_field
- p_value
- p_bi_tab TYPE bdcdata_tab.
- LOOP AT p_bi_tab INTO DATA(l_tab).
- CHECK ( p_field CA '*' AND l_tab-fnam CP p_field ) OR
- ( l_tab-fnam = p_field ).
- l_tab-fval = p_value.
- MODIFY p_bi_tab INDEX sy-tabix FROM l_tab.
- ENDLOOP.
- ENDFORM.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Modifica la clave de un BI
- FORM bi_100_fill_key USING p_field
- p_value
- p_bi_tab TYPE bdcdata_tab.
- LOOP AT p_bi_tab INTO DATA(l_tab).
- CHECK ( p_field CA '*' AND l_tab-fnam CP p_field ) OR
- ( l_tab-fnam = p_field ).
- l_tab-fnam = p_value.
- MODIFY p_bi_tab INDEX sy-tabix FROM l_tab.
- ENDLOOP.
- ENDFORM.
Última modificación de la página el 20 May 2020 a las 09h28
Powered by
PmWiki