CRM and CX Blogs by Members
Find insights on SAP customer relationship management and customer experience products in blog posts from community members. Post your own perspective today!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
0 Kudos

*&---------------------------------------------------------------------
*& Report  BUPA_TEST_DELETE                                            *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  BUPA_TEST_DELETE                        .


********* Data definitions ****************************************
tables: but000.


types: begin of ty_partner,
           partner type bu_partner,
           end of ty_partner.


DATAgv_cursor TYPE cursor,
       lv_partner type bu_partner,
       gt_partners type sorted table of ty_partner with unique key
       partner,
       lv_message type char80,
       lv_answer,
       lv_dele1_check type boole_d,
       lt_results type bapiret2_t,
       ls_result  type bapiret2,
       lt_partner_range type standard table of bus0range,
       ls_partner_range type bus0range,
       lt_partners_deleted type standard table of BUSSDELYES,
       ls_partner like line of lt_partners_deleted,
       lv_counter type i,
       lv_error   type boole_d.

*changes to implement the authorisation check

DATALS_RETURN                LIKE BAPIRET2,
        LV_MSGV1                 LIKE SY-MSGV1,
        LV_RC                    LIKE SY-SUBRC,
        LV_AUTH_CHECK_SUPPRESSED LIKE BOOLE-BOOLE,
        IV_AKTYP                 LIKE TBZ0K-AKTYP,
        IV_AUTHORIZATIONGROUP    like BUT000-AUGRP.

*end of changes to implement the authorisation check



constants: gc_X type boole_d value 'X',
                 gc_max_commit type i value '750'.

*********** Selection screen ***************************************
select-options: partner for but000-partner obligatory.

parameters:     xdele   type boole_d as checkbox default ' ',
                       statd   type boole_d as checkbox default 'X',
                      test    type boole_d as checkbox default 'X'.


parameters: nodial type boole_d default ' ' no-display.

CLEAR: lv_counter, lv_error.

******** Main program *********************************************
if test is initial and sy-batch is initial and nodial is initial.
*changes are done to implement the authorisation check

    IV_AKTYP = '06'.
    IV_AUTHORIZATIONGROUP = 'DEL'.
    AUTHORITY-CHECK OBJECT 'B_BUPA_GRP'
            ID 'ACTVT' FIELD IV_AKTYP
            ID 'BEGRU' FIELD IV_AUTHORIZATIONGROUP.
       LV_RC = SY-SUBRC.

  IF NOT LV_RC IS INITIAL.
        MESSAGE E777(R11) WITH IV_AUTHORIZATIONGROUP.
        EXIT.
  ELSE.

*end of changes to implement the authorisation check

  CALL FUNCTION 'POPUP_TO_CONFIRM'
    EXPORTING
      TITLEBAR              = text-p00
      TEXT_QUESTION         = text-p01
      TEXT_BUTTON_1         = text-p02
      ICON_BUTTON_1         = 'ICON_CHECKED'
      TEXT_BUTTON_2         = text-p04
      ICON_BUTTON_2         = 'ICON_INCOMPLETE'
      DEFAULT_BUTTON        = '2'
      DISPLAY_CANCEL_BUTTON = ' '
      START_COLUMN          = 25
      START_ROW             = 6
    IMPORTING
      ANSWER                = lv_answer
    EXCEPTIONS
      TEXT_NOT_FOUND        = 1
      OTHERS                = 2.
  IF SY-SUBRC <> 0 .
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    exit.
  ENDIF.
  if lv_answer = 'A' or lv_answer = '2'.
    exit.
  endif.
endif.
endif.

if xdele = gc_X and statd = ' '.
* OPEN CURSOR WITH HOLD gv_cursor FOR
     SELECT  partner FROM  BUT000
        INTO TABLE gt_partners
        WHERE  PARTNER  in partner
        AND    XDELE    = gc_X.
elseif xdele = ' ' and statd = gc_X.

*  OPEN CURSOR WITH HOLD gv_CURSOR FOR
           SELECT t3~partner
                 INTO TABLE gt_partners
                 from  CRM_JSTO AS t1
                       inner join CRM_JEST as t2
                             on t1~OBJNR = t2~OBJNR
                       inner join BUT000 as t3
                             on t3~PARTNER_GUID = t2~OBJNR
                 WHERE ( t2~STAT    = 'I1102'   "deleted
                         or t2~STAT = 'I0812' )
                                 "as long as I1102 is not in ABA
                   and t2~INACT = ' '
                   and t3~partner in partner.
elseif  xdele = gc_X and statd = gc_X.

*  OPEN CURSOR WITH HOLD gv_CURSOR FOR
           SELECT t3~partner
                 INTO TABLE gt_partners
                 from  CRM_JSTO AS t1
                       inner join CRM_JEST as t2
                             on t1~OBJNR = t2~OBJNR
                       inner join BUT000 as t3
                             on t3~PARTNER_GUID = t2~OBJNR
                 WHERE ( t2~STAT     = 'I1102'   "deleted
                         OR t2~STAT  = 'I0812' )
                                 "as long as I1102 is not in ABA
                   and t2~INACT = ' '
                   and t3~partner in partner
                   and t3~xdele = gc_X.
else.

* OPEN CURSOR WITH HOLD gv_cursor FOR
     SELECT  partner FROM  BUT000
        INTO TABLE gt_partners
        WHERE  PARTNER  in partner.
endif.

if statd = ' '.
  lv_dele1_check = gc_X.
endif.


IF gt_partners IS INITIAL.
* nothing was selected
  write:/ text-t04.
ELSE.
refresh: lt_partner_range.

LOOP AT gt_partners INTO lv_partner.

  ls_partner_range-tname  = 'BUT000'.
  ls_partner_range-fname  = 'PARTNER'.
  ls_partner_range-option = 'EQ'.
  ls_partner_range-sign   = 'I'.
  ls_partner_range-low = lv_partner.
  append ls_partner_range to lt_partner_range.


  lv_counter = lv_counter + 1.
* Don't commit changes until package size reached
  IF lv_counter LT gc_max_commit.
*  commit changes on DB
  ELSE.
    PERFORM commit_changes TABLES
                             lt_partner_range
                           USING
                             test
                             xdele
                             lv_dele1_check
                           CHANGING
                             lv_error.
    IF NOT lv_error is INITIAL.
       EXIT.
    ENDIF.

*   refresh structures for new run
    refresh lt_partner_range.
    MOVE 0 TO lv_counter.
  ENDIF.
ENDLOOP.

* delete remaining BP's
IF NOT lt_partner_range IS INITIAL.
   PERFORM commit_changes TABLES
                            lt_partner_range
                          USING
                            test
                            xdele
                            lv_dele1_check
                          CHANGING
                            lv_error.
ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*&      Form  commit_changes
*&---------------------------------------------------------------------*
*       Delete package of business partner on DB
*----------------------------------------------------------------------*
*      -->LT_PARTNER_RANGE  partners to be deleted
*      -->TEST              test mode
*      -->XDELE             only partners with XDELE set
*      -->LV_DELE1_CHECK    check deletion allowed
*----------------------------------------------------------------------*

form commit_changes  tables
                       LT_PARTNER_RANGE structure bus0range
                     using
                       test           type boole_d
                       xdele          type boole_d
                       lv_dele1_check type boole_d
                     changing
                       lv_error       type boole_d.

*  delete given block of business partners
   CALL FUNCTION 'BUP_BUPA_MASS_DELETE'
    EXPORTING
      IV_TESTRUN           = test
      IV_XDELE             = xdele
      iv_with_check        = lv_dele1_check
    TABLES
      IT_PARTNERS          = lt_partner_range
      ET_PARTNERS_DELETED  = lt_partners_deleted
      ET_RESULTS           = lt_results
    EXCEPTIONS
      DELETION_NOT_ALLOWED = 1
      FATAL_ERROR          = 2
      OTHERS               = 3.
  IF SY-SUBRC <> 0.
    Case sy-subrc"NOTE 732410
      When 1.
        write: / text-t05.
        uline.
        write:/ text-t04.
        refresh: lt_partner_range.
      When 2.
        write: / text-t06.
        uline.
        write:/ text-t04.
        refresh: lt_partner_range.
        lv_error = 'X'.
        exit.
      When 3.
        write: / text-t07.
        uline.
        write:/ text-t04.
        refresh: lt_partner_range.
        lv_error = 'X'.
        exit.
    EndCase.
  ENDIF.

* no error occured, but message was returned
  IF NOT lt_results IS INTIAL.
      loop at lt_results into ls_result.
        IF ls_result-message is INITIAL.
           MESSAGE ID ls_result-ID TYPE ls_result-TYPE NUMBER ls_result-NUMBER
                   into ls_result-message
            WITH ls_result-MESSAGE_V1 ls_result-MESSAGE_V2 ls_result-MESSAGE_V3 ls_result-MESSAGE_V4.
        ENDIF.
        write: / ls_result-TYPE, ls_result-ID, ls_result-NUMBER,
                 ls_result-message.
      endloop.
      uline.
  ENDIF.

  loop at lt_partners_deleted into ls_partner.
    if test is initial.
      write: / ls_partner-value, text-t01.
    else.
      write: / ls_partner-value, text-t02.
    endif.
  endloop.


  if test is initial.
    commit work.
  endif.

endform.                    " commit_changes