W Pub: ABAP Rut BIOOP

  1. REPORT zkk.
  2. *----------------------------------------------------------------------*
  3. * CLASS bi_class DEFINITION
  4. *----------------------------------------------------------------------*
  5. *
  6. *----------------------------------------------------------------------*
  7. CLASS bi_class DEFINITION.
  8. PUBLIC SECTION.
  9. DATA: bi_tab TYPE STANDARD TABLE OF bdcdata,
  10. bi_err TYPE STANDARD TABLE OF bdcmsgcoll,
  11. bi_mod(1),
  12. bi_upd(1).
  13.  
  14. METHODS: constructor IMPORTING p_MODE TYPE ANY OPTIONAL
  15. P_updATE TYPE ANY OPTIONAL,
  16. _clear,
  17. _add IMPORTING value(p_1) TYPE any
  18. p_2 TYPE any
  19. p_3 TYPE any,
  20. _call IMPORTING p_1 TYPE any,
  21. _error.
  22. PRIVATE SECTION.
  23. DATA: bi_wa_err TYPE bdcmsgcoll,
  24. bi_wa_tab TYPE bdcdata,
  25. bi_tt TYPE STANDARD TABLE OF tline,
  26. bi_wa_tt TYPE tline,
  27. bi_tout TYPE STANDARD TABLE OF char255,
  28. bi_wa_tout type char255.
  29. ENDCLASS. "bi_class DEFINITION
  30.  
  31. *----------------------------------------------------------------------*
  32. * CLASS bi_class IMPLEMENTATION
  33. *----------------------------------------------------------------------*
  34. *
  35. *----------------------------------------------------------------------*
  36. CLASS bi_class IMPLEMENTATION.
  37.  
  38. METHOD constructor.
  39. IF NOT p_MODE IS INITIAL. ME->BI_MOD = p_MODE. ELSE. me->bi_mod = 'N'. ENDIF.
  40. IF NOT p_UPDATE IS INITIAL. ME->BI_MOD = p_UPDATE. ELSE. me->bi_mod = 'S'. ENDIF.
  41. ENDMETHOD. "constructor
  42.  
  43. METHOD _clear.
  44. CLEAR: bi_tab, bi_err, bi_tt, bi_tout.
  45. REFRESH: bi_tab, bi_err, bi_tt, bi_tout.
  46. ENDMETHOD. "bi_clear
  47.  
  48. METHOD _add.
  49. CLEAR bi_wa_tab.
  50. IF NOT p_1 IS INITIAL.
  51. bi_wa_tab-program = p_2.
  52. bi_wa_tab-dynpro = p_3.
  53. bi_wa_tab-dynbegin = 'X'.
  54. IF p_1 NE 'X'.
  55. APPEND bi_wa_tab TO bi_tab.
  56. CLEAR bi_wa_tab.
  57. bi_wa_tab-fnam = 'BDC_OKCODE'.
  58. bi_wa_tab-fval = p_1.
  59. ENDIF.
  60. ELSE.
  61. bi_wa_tab-fnam = p_2.
  62. bi_wa_tab-fval = p_3.
  63. ENDIF.
  64. APPEND bi_wa_tab TO bi_tab.
  65. ENDMETHOD. "bi_add
  66.  
  67. METHOD _call.
  68. CALL TRANSACTION p_1 USING bi_tab MODE bi_mod UPDATE bi_upd
  69. MESSAGES INTO bi_err.
  70. ENDMETHOD. "bi_call
  71.  
  72. METHOD _error.
  73.  
  74. FIELD-SYMBOLS <bi_fs> TYPE bdc_vtext1.
  75.  
  76. REFRESH bi_tt.
  77. DESCRIBE TABLE bi_err LINES sy-pexpi.
  78. CHECK sy-pexpi GT 0.
  79. SORT bi_err.
  80. DELETE ADJACENT DUPLICATES FROM bi_err.
  81. * Se suprimen los mensajes de tipo 'S' num: 402:"Campo tranf. a visu" y
  82. * num: 432:"Sistema ha ejecutado c.
  83. DELETE bi_err WHERE msgtyp = 'S'
  84. AND ( msgnr = '402' OR msgnr = '432'
  85. OR msgnr = '000' ).
  86. LOOP AT bi_err INTO bi_wa_err.
  87. CLEAR sy-lisel.
  88. SELECT SINGLE text INTO sy-lisel FROM t100
  89. WHERE sprsl = sy-langu AND
  90. arbgb = bi_wa_err-msgid AND
  91. msgnr = bi_wa_err-msgnr.
  92. IF sy-subrc = 0 AND NOT sy-lisel IS INITIAL.
  93. * d_len = strlen( bi_err-msgv1 ).
  94. CLEAR sy-pexpi.
  95. TRANSLATE sy-lisel USING ' ~'.
  96. SPLIT sy-lisel AT '&' INTO TABLE bi_tout.
  97. CLEAR sy-lisel.
  98. LOOP AT bi_tout INTO bi_wa_tout.
  99. CHECK NOT bi_wa_tout IS INITIAL.
  100. ADD 1 TO sy-pexpi.
  101. IF sy-pexpi < 5.
  102. CONCATENATE 'bi_err-msgv' sy-pexpi INTO sy-repi2.
  103. ASSIGN (sy-repi2) TO <bi_fs>.
  104. ENDIF.
  105. CONCATENATE sy-lisel bi_wa_tout <bi_fs> INTO sy-lisel.
  106. CONDENSE sy-lisel NO-GAPS.
  107. ENDLOOP.
  108. TRANSLATE sy-lisel USING '~ '.
  109. bi_wa_tt-tdline = sy-lisel.
  110. APPEND bi_wa_tt TO bi_tt.
  111. ENDIF.
  112. ENDLOOP.
  113. DESCRIBE TABLE bi_tt LINES sy-pexpi.
  114. CHECK sy-pexpi > 0.
  115. * Si contiene errores.se muestran en una ventana.
  116. CALL FUNCTION 'COPO_POPUP_TO_DISPLAY_TEXTLIST'
  117. EXPORTING
  118. task = 'DISPLAY'
  119. titel = 'Errores en transaccion'
  120. TABLES
  121. text_table = bi_tt.
  122. ENDMETHOD. "bi_error
  123. ENDCLASS. "bi_class IMPLEMENTATION
  124.  
  125. END-OF-SELECTION.
  126.  
  127. DATA: my_bi TYPE REF TO bi_class.
  128. CREATE OBJECT my_bi.
  129. my_bi->_clear( ).
  130. my_bi->bi_mod = 'A'.
  131. my_bi->_add( EXPORTING p_1 = 'X' p_2 = 'SAPLWBABAP' p_3 = '0100').
  132. my_bi->_add( EXPORTING p_1 = 'X' p_2 = 'SAPLWBABAP' p_3 = '0100').
  133. my_bi->_add( EXPORTING p_1 = ' ' p_2 = 'BDC_OKCODE' p_3 = '=BACK').
  134. my_bi->_call('SE38').