REPORT zkk.
*----------------------------------------------------------------------*
* CLASS bi_class DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS bi_class DEFINITION.
PUBLIC SECTION.
DATA: bi_tab TYPE STANDARD TABLE OF bdcdata,
bi_err TYPE STANDARD TABLE OF bdcmsgcoll,
bi_mod(1),
bi_upd(1).
METHODS: constructor IMPORTING p_MODE TYPE ANY OPTIONAL
P_updATE TYPE ANY OPTIONAL,
_clear,
_add IMPORTING value(p_1) TYPE any
p_2 TYPE any
p_3 TYPE any,
_call IMPORTING p_1 TYPE any,
_error.
PRIVATE SECTION.
DATA: bi_wa_err TYPE bdcmsgcoll,
bi_wa_tab TYPE bdcdata,
bi_tt TYPE STANDARD TABLE OF tline,
bi_wa_tt TYPE tline,
bi_tout TYPE STANDARD TABLE OF char255,
bi_wa_tout type char255.
ENDCLASS. "bi_class DEFINITION
*----------------------------------------------------------------------*
* CLASS bi_class IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS bi_class IMPLEMENTATION.
METHOD constructor.
IF NOT p_MODE IS INITIAL. ME->BI_MOD = p_MODE. ELSE. me->bi_mod = 'N'. ENDIF.
IF NOT p_UPDATE IS INITIAL. ME->BI_MOD = p_UPDATE. ELSE. me->bi_mod = 'S'. ENDIF.
ENDMETHOD. "constructor
METHOD _clear.
CLEAR: bi_tab, bi_err, bi_tt, bi_tout.
REFRESH: bi_tab, bi_err, bi_tt, bi_tout.
ENDMETHOD. "bi_clear
METHOD _add.
CLEAR bi_wa_tab.
IF NOT p_1 IS INITIAL.
bi_wa_tab-program = p_2.
bi_wa_tab-dynpro = p_3.
bi_wa_tab-dynbegin = 'X'.
IF p_1 NE 'X'.
APPEND bi_wa_tab TO bi_tab.
CLEAR bi_wa_tab.
bi_wa_tab-fnam = 'BDC_OKCODE'.
bi_wa_tab-fval = p_1.
ENDIF.
ELSE.
bi_wa_tab-fnam = p_2.
bi_wa_tab-fval = p_3.
ENDIF.
APPEND bi_wa_tab TO bi_tab.
ENDMETHOD. "bi_add
METHOD _call.
CALL TRANSACTION p_1 USING bi_tab MODE bi_mod UPDATE bi_upd
MESSAGES INTO bi_err.
ENDMETHOD. "bi_call
METHOD _error.
FIELD-SYMBOLS <bi_fs> TYPE bdc_vtext1.
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 suprimen 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 INTO bi_wa_err.
CLEAR sy-lisel.
SELECT SINGLE text INTO sy-lisel FROM t100
WHERE sprsl = sy-langu AND
arbgb = bi_wa_err-msgid AND
msgnr = bi_wa_err-msgnr.
IF sy-subrc = 0 AND NOT sy-lisel IS INITIAL.
* d_len = strlen( bi_err-msgv1 ).
CLEAR sy-pexpi.
TRANSLATE sy-lisel USING ' ~'.
SPLIT sy-lisel AT '&' INTO TABLE bi_tout.
CLEAR sy-lisel.
LOOP AT bi_tout INTO bi_wa_tout.
CHECK NOT bi_wa_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 sy-lisel bi_wa_tout <bi_fs> INTO sy-lisel.
CONDENSE sy-lisel NO-GAPS.
ENDLOOP.
TRANSLATE sy-lisel USING '~ '.
bi_wa_tt-tdline = sy-lisel.
APPEND bi_wa_tt TO 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 transaccion'
TABLES
text_table = bi_tt.
ENDMETHOD. "bi_error
ENDCLASS. "bi_class IMPLEMENTATION
END-OF-SELECTION.
DATA: my_bi TYPE REF TO bi_class.
CREATE OBJECT my_bi.
my_bi->_clear( ).
my_bi->bi_mod = 'A'.
my_bi->_add( EXPORTING p_1 = 'X' p_2 = 'SAPLWBABAP' p_3 = '0100').
my_bi->_add( EXPORTING p_1 = 'X' p_2 = 'SAPLWBABAP' p_3 = '0100').
my_bi->_add( EXPORTING p_1 = ' ' p_2 = 'BDC_OKCODE' p_3 = '=BACK').
my_bi->_call('SE38').