BADI For WS14500015 Not working properly

arghadip kar arghadipkar at yahoo.com
Tue Apr 10 07:23:12 EDT 2007



  
  Hi All
   
         I am having problem to execute Workflow Template WS14500015.The Workflow is not recognizing any of the Approval table that I am populating in the BADI. The BADI is getting called as a custom table is getting updated. Can anyone tell me what is missing in my code that is hindering in populating the approval table that will help me poulate agents. Do I need to implement any OSS Notes for it. I found that there is a Function Module bbp_pdh_wfl_trace. Do I need to pouplate any field of any table to enable Workflow to work. Here I am attaching my piece of code:
   
  Implementation Name
ZR0BGS_EBP_SC
  interface : IF_EX_BBP_WFL_APPROV_BADI~GET_REMAING_APPROVERS
METHOD if_ex_bbp_wfl_approv_badi~get_remaing_approvers .
* This a default implementation that gives idea about of how line item
* approval should work
  *****begin of code : Dharmendra ***********
    TYPES : BEGIN OF ty_account.
  INCLUDE TYPE bbp_pds_acc.
  TYPES:  app_crit_name  TYPE bbp_wfl_app_criterion,
          app_crit_value TYPE char32.
  TYPES:  END OF ty_account.
    TYPES :BEGIN OF ty_item_copy,
          app_crit_value1 TYPE bbp_wfl_app_property,
         END OF ty_item_copy.
    TYPES :
          ty_item_info TYPE STANDARD TABLE OF zrp2p0bgst001,
          ty_account_copy TYPE STANDARD TABLE OF ty_account.
   
    DATA : lt_item_info TYPE ty_item_info,
         lt_account_copy TYPE ty_account_copy,
         ls_item_info TYPE zrp2p0bgst001.
    DATA :l_tabix    TYPE sytabix,
        l_num_apprv TYPE SWH_NUMC10 VALUE '0',
        l_value_per TYPE bbp_value.
  DATA : l_temp_value TYPE bbp_value VALUE '0',
         l_temp_level TYPE SWH_NUMC10 VALUE '0'.
  
  FIELD-SYMBOLS :
            <l_fs_account>    TYPE ty_account.
  
*****end of code***************************
   
    DATA:
   ls_header         TYPE bbp_pds_sc_header_d,
  * tables for different approval criteria
   lv_call_crit1     TYPE bbp_wfl_app_criterion,
   lv_call_value1    TYPE bbp_wfl_app_property,
   lv_co_code        TYPE bbp_wfl_app_property,
   lv_plant_value    TYPE bbp_wfl_app_property,
  * local help variables
   lv_guid           TYPE crmt_object_guid,
  * item fields and structures
   ls_item           TYPE bbp_pds_sc_item_d,
****dk****
   lt_item_copy       TYPE TABLE OF bbp_pds_sc_item_d,
   ls_item_copy       TYPE bbp_pds_sc_item_d,
   lv_account_type    TYPE bbp_wfl_app_criterion ,
   lv_comp_code       TYPE bbp_wfl_app_criterion ,
   lv_plant           TYPE bbp_wfl_app_criterion ,
   lv_acc_desc        TYPE bbp_step_description ,
****dk****
   lt_item           TYPE TABLE OF bbp_pds_sc_item_d,
* accounting structures
   ls_account        TYPE bbp_pds_acc,
   lt_account        TYPE TABLE OF bbp_pds_acc,
   ls_account_copy   TYPE ty_account.
    DATA: ls_approver TYPE bbp_wfl_approval_table_badi.
  
* Business objects (local)
  CONSTANTS:
   c_po            TYPE crmt_subobject_category_db VALUE 'BUS2201',
   c_shop          TYPE crmt_subobject_category_db VALUE 'BUS2121',
   c_contract      TYPE crmt_subobject_category_db VALUE 'BUS2000113'.
  .
  * Approval Criteria and properties used (local)
  CONSTANTS:
    c_cost_centre  TYPE bbp_wfl_app_criterion  VALUE 'COST_CTR',
    c_prod_categ   TYPE bbp_wfl_app_criterion  VALUE 'PROD_CAT'.
  
  CASE object_type.
      WHEN c_shop.
* -----------   shopping cart ---------------------------------- *
  *** get the details of the shopping cart
      CALL FUNCTION 'BBP_PD_SC_GETDETAIL'
       EXPORTING
         i_object_id                      = object_id
      IMPORTING
        e_header                         = ls_header
      TABLES
        e_item                           = lt_item
        e_account                        = lt_account
              .
****dk****
        lt_account_copy[] = lt_account[].
        IF NOT lt_item IS INITIAL.
          lt_item_copy[] = lt_item[].
        SORT lt_item_copy BY be_plant.
        DELETE ADJACENT DUPLICATES FROM lt_item_copy
        COMPARING be_plant.
          SELECT  mandt
                zplant
                zcost_ctr
                zorder_no
                zasset_no
                zlevel
                zvalue
                zapprover
        FROM zrp2p0bgst001
        INTO TABLE lt_item_info
        FOR ALL ENTRIES IN lt_item
        WHERE
              zplant = lt_item-be_plant.
          SORT lt_item_info BY zplant zcost_ctr
              zorder_no zasset_no zlevel zvalue.
      ENDIF.
****dk~~****
      SORT lt_item BY guid.
      SORT lt_account BY p_guid.
        LOOP AT lt_item INTO ls_item WHERE del_ind IS INITIAL.
        READ TABLE lt_account INTO ls_account
                                WITH KEY p_guid = ls_item-guid.
          IF sy-subrc = 0.
          l_tabix = sy-tabix.
            LOOP AT lt_account  INTO ls_account FROM l_tabix.
            IF ls_account-p_guid <> ls_item-guid.
              EXIT.
            ELSE.
********logic**dk*****
** CALCULATING THE VALUE PER COST CENTER /INTERNAL ORDER OR ASSET.
                l_value_per = ls_account-distr_perc * ls_item-value / 100.
                READ TABLE lt_item_info INTO ls_item_info WITH KEY
                         zplant    = ls_item-be_plant
                         zcost_ctr = ls_account-cost_ctr
                         zorder_no = ls_account-order_no
                         zasset_no = ls_account-asset_no.
** AS THE TABLE ZRP2P0BGST001, ONLY ONE OUT OF COST CENTER
**,INTERNAL ORDER AND ASSET NUMBER
** WILL BE FILLED AND REST WILL BE EMPTY. ..
** CORRSOPONDING TO COMPANY CODE , SO ABOVE WILL
** FETCH FIRST RECORD.
  ** FIRST RECORD WITH THE REQUIRED VALUE IS READ.
              l_temp_value = ls_item_info-zvalue.
              l_temp_level = ls_item_info-zlevel.
                IF l_value_per < l_temp_value.
                l_num_apprv = -1. " NO APPROVER REQUIRED.
                ELSE.
                LOOP AT lt_item_info INTO ls_item_info
                        WHERE
                           zplant    = ls_item-be_plant      AND
                           zcost_ctr = ls_account-cost_ctr   AND
                           zorder_no = ls_account-order_no   AND
                           zasset_no = ls_account-asset_no .
                    IF ls_item_info-zvalue  GE l_value_per
                        AND l_value_per GT l_temp_value  .
                    l_num_apprv  =  l_temp_level.
                    EXIT.
                  ELSE.
                    l_temp_value = ls_item_info-zvalue.
                    l_temp_level = ls_item_info-zlevel.
                  ENDIF.
                  ENDLOOP.
              ENDIF.
                IF l_num_apprv IS INITIAL.
                l_num_apprv = l_temp_level.
              ENDIF.
  *** IF L_NUM_APPRV IS -1 THEN CALL BELOW.
              IF l_num_apprv = -1.
                IF approval_table[] IS INITIAL.
* if no approver found because send sc to default administrator
                  ls_approver-approval_index = actual_approval_index.
*** the agent is 'US' + user
                  ls_approver-approval_agent = 'USADMNIN1'.
                  ls_approver-name = 'Peter Admin'.
                  APPEND ls_approver TO approval_administrators.
                ENDIF.
              ELSE.
  ** NOW THE NUMBER OF APPROVER IS KNOWN SO THE APPROVER IS
** FOUND USING THE RFC AND THE CUSTOM
** TABLE ZRP2P0BGST001 IS UPDATED WITH LATEST APPROVER.
  *** Found out to which cost center/IO/AN this item belongs
                READ TABLE lt_account INTO ls_account
                                WITH KEY p_guid = ls_item-guid.
                IF sy-subrc = 0.
                  IF NOT ls_account-cost_ctr IS INITIAL.
                    lv_call_value1 = ls_account-cost_ctr.
                    lv_account_type = 'COST_CTR'.
                    lv_acc_desc  = 'Cost center approval'.
                  ENDIF.
                  IF NOT ls_account-order_no IS INITIAL.
                    lv_call_value1 = ls_account-order_no.
                    lv_account_type = 'ORDER_NO'.
                    lv_acc_desc  = 'Internal Order approval'.
                  ENDIF.
                  IF NOT ls_account-asset_no IS INITIAL.
                    lv_call_value1 = ls_account-asset_no.
                    lv_account_type = 'ASSET_NO'.
                    lv_acc_desc  = 'Asset Number approval'.
                    lv_comp_code = 'COMPANY_CODE'.
                    lv_co_code   = ls_item-be_co_code.
                  ENDIF.
                ENDIF.
  *** above to Found out to which cost center/IO/AN this item belongs
***** DEFINING THE PLANT VALUE IN THE LV_PLANT_VALUE.
                  lv_plant = 'PLANT'.
                lv_plant_value = ls_item-be_plant.
                  CALL FUNCTION 'ZBBP_WFL_DIN_ITEM_APPROVAL_GET'
                  EXPORTING
                    sc_guid                    = ls_header-guid
                    item_guid                  = ls_item-guid
                    approval_description       = lv_acc_desc
                    hide_items_not_responsible = 'X'
* each cost center approver should see only items he is responsible
                    criterion1                 = lv_account_type
                    criterion2                 = lv_comp_code
                    criterion3                 = lv_plant
                    value1                     = lv_call_value1
                    value2                     = lv_co_code
                    value3                     = lv_plant_value
                    approval_index             = l_num_apprv
                  CHANGING
                    approval_table             = approval_table
                    item_approval_table        = item_approval_table
                    item_approval_obj          = item_approval_obj.
                ENDIF.
*******logic***~~~*****
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    ENDCASE.
  ENDMETHOD.
   
  
function modue
   
  FUNCTION zbbp_wfl_din_item_approval_get.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(SC_GUID) TYPE  BBP_GUID
*"     VALUE(ITEM_GUID) TYPE  BBP_GUID
*"     VALUE(APPROVAL_DESCRIPTION) TYPE  BBP_STEP_DESCRIPTION OPTIONAL
*"     VALUE(HIDE_ITEMS_NOT_RESPONSIBLE) TYPE  BOOLEAN OPTIONAL
*"     VALUE(CRITERION1) TYPE  BBP_WFL_APP_CRITERION
*"     VALUE(CRITERION2) TYPE  BBP_WFL_APP_CRITERION DEFAULT ''
*"     VALUE(CRITERION3) TYPE  BBP_WFL_APP_CRITERION DEFAULT ''
*"     VALUE(VALUE1) TYPE  BBP_WFL_APP_PROPERTY DEFAULT ''
*"     VALUE(VALUE2) TYPE  BBP_WFL_APP_PROPERTY DEFAULT ''
*"     VALUE(VALUE3) TYPE  BBP_WFL_APP_PROPERTY DEFAULT ''
*"     VALUE(APPROVAL_INDEX) TYPE  SWH_NUMC10
*"  CHANGING
*"     REFERENCE(APPROVAL_TABLE) TYPE  BBPT_WFL_APPROVAL_TABLE_BADI
*"     REFERENCE(ITEM_APPROVAL_TABLE) TYPE  BBPT_WFL_ITEM_APPROVAL_BADI
*"     REFERENCE(ITEM_APPROVAL_OBJ) TYPE  BBPT_WFL_ITEM_APPROVAL_OBJ
*"       OPTIONAL
*"----------------------------------------------------------------------
  
***************************************************************
*** This is only an example function you could use as an example
*** for implementing your own logic for approval determination!!
***!!! It is not designed to be used in productive systems!!!
****************************************************************
    DATA:
    ls_approval_table      TYPE bbp_wfl_approval_table_badi,
    ls_item_approval_table TYPE bbps_wfl_item_approval,
    ls_approval_def        TYPE zrp2p0bgst001.
    DATA:
    lv_app_obj_guid   TYPE bbp_guid_32,
    lv_is_new_approval_object TYPE boolean.
    CONSTANTS:
      c_agent_is_user TYPE otype VALUE 'US'.
  *** First find the right approval object the item belongs to.
*** All items of an approval object are approved togheter in
*** this approval step, and therefore only one workitem is
*** created for this items. IF possible use this standard function
*** BBP_WFL_DIN_APP_OBJ_GET for creating the approval object.
    CALL FUNCTION 'BBP_WFL_DIN_APP_OBJ_GET'
    EXPORTING
      sc_guid                 = sc_guid
      criterion1              = criterion1
*   CRITERION2              = ''
*   CRITERION3              = ''
      value1                  = value1
*   VALUE2                  = ''
*   VALUE3                  = ''
   IMPORTING
*** If 2 items of the same shopping cart have the same
*** values for the criterias, this function returns the
*** same (!!!) approval object guid
     approval_obj_guid       = lv_app_obj_guid
    TABLES
*** This table saves the criterias  for which the approval object
*** was created. For example:
*** |approval object1| "cost center" | 1000   |
*** |approval object2| "cost center" | 1200   |
*** |approval object3| "prod categ " | office |
     item_app_obj            = item_approval_obj
            .
  *** Check if this approval object already exists in the approval
*** table
******  READ TABLE approval_table INTO ls_approval_table
******          WITH KEY approval_object_guid = lv_app_obj_guid
******                   approval_index       = approval_index.
******  IF sy-subrc EQ 4.
******    lv_is_new_approval_object = 'X'.
******  ENDIF.
******
******  IF lv_is_new_approval_object = 'X'.
  *** Now read your own approval table based on your criteria's
  *********************dk******************
  TYPES: ty_option TYPE STANDARD TABLE OF rfc_db_opt,
         ty_fields TYPE STANDARD TABLE OF rfc_db_fld,
         ty_data TYPE STANDARD TABLE OF tab512.
    DATA : lt_update_tab TYPE STANDARD TABLE OF zrp2p0bgst001,
         lt_approval_def TYPE STANDARD TABLE OF zrp2p0bgst001,
         ls_update_tab TYPE zrp2p0bgst001.
    DATA : lt_actor_tab TYPE STANDARD TABLE OF swhactor,
         ls_actor_tab TYPE swhactor,
         lt_ac_container TYPE STANDARD TABLE OF swcont,
         ls_ac_container TYPE swcont.
  
  DATA : lt_options TYPE ty_option,
         lt_fields TYPE ty_fields,
         lt_data TYPE ty_data.
    DATA : ls_options TYPE  rfc_db_opt,
         ls_fields  TYPE  rfc_db_fld,
         ls_data    TYPE  tab512.
    DATA : lv_apprv_asset TYPE usnam,
         lv_apprv_cc    TYPE verak.
    DATA : lv_cost_ctr TYPE  bbp_wfl_app_property VALUE '',
         lv_order_no TYPE  bbp_wfl_app_property VALUE '',
         lv_asset_no TYPE  bbp_wfl_app_property VALUE ''.
    DATA : lv_query_table TYPE dd02l-tabname.
  DATA : l_apprv_count TYPE char1 VALUE '0'.
  ***** if passed value is an internal order then ******
***** cost center is derived from the coas and then preson
***** responsible from the cskx table.
  IF criterion1 = 'ORDER_NO'.
      lv_order_no = value1.
  *    ls_options-text = 'AUFNR = VALUE1'.
    CONCATENATE 'AUFNR' '=' VALUE1 INTO LS_OPTIONS-TEXT
    SEPARATED BY SPACE.
    APPEND ls_options TO lt_options.
      ls_fields-fieldname = 'AUFNR'.
    ls_fields-length    = '000012'.
    ls_fields-offset    = '000000'.
    ls_fields-type      = 'C'.
    APPEND ls_fields TO lt_fields.
      ls_fields-fieldname = 'KOSTV'.
    ls_fields-length    = '000010'.
    ls_fields-offset    = '000000'.
    ls_fields-type      = 'C'.
    APPEND ls_fields TO lt_fields.
      CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'E10CLNT121'
      EXPORTING
        query_table          = 'COAS'
        delimiter            = '|'
      TABLES
        OPTIONS              = lt_options
        fields               = lt_fields
        data                 = lt_data
      EXCEPTIONS
        table_not_available  = 1
        table_without_data   = 2
        option_not_valid     = 3
        field_not_valid      = 4
        not_authorized       = 5
        data_buffer_exceeded = 6
        OTHERS               = 7.
      IF sy-subrc = 0.
  **AS LT_DATA TABLE CONTAINS ONLY ONE RECORD SO NO SORTING REQUIRED.
      READ TABLE lt_data INTO ls_data INDEX 1.
      value1 = ls_data-wa+12(10).
      ENDIF.
*** AT THE END OF THIS IF INTERNAL ORDER IS PASSED ITS RESPONSIBLE
*** COST OBTAINED AND PLACED IN VALUE1 FIELD.
    CLEAR : ls_data , ls_options , ls_fields ,
            lt_data , lt_options , lt_fields .
  ENDIF.
****************************************
  *** RFC TO READ TABLE FOR FINDING THE PERSON RESPONSIBLE FOR THE
*** COST CENTER / ASSET IE APPROVER.
  CASE criterion1 .
      WHEN 'COST_CTR' OR 'ORDER_NO'.
        IF criterion1 = 'COST_CTR'.
        lv_cost_ctr = value1.
      ENDIF.
  *      ls_options-text = 'KOSTL = VALUE1'.
      CONCATENATE 'KOSTL' '=' VALUE1 INTO LS_OPTIONS-TEXT
      SEPARATED BY SPACE.
      APPEND ls_options TO lt_options.
        ls_fields-fieldname = 'VERAK'.
      ls_fields-length    = '000020'.
      ls_fields-offset    = '000000'.
      ls_fields-type      = 'C'.
      APPEND ls_fields TO lt_fields.
        ls_fields-fieldname = 'KOSTL'.
      ls_fields-length    = '000010'.
      ls_fields-offset    = '000000'.
      ls_fields-type      = 'C'.
      APPEND ls_fields TO lt_fields.
        lv_query_table = 'CSKS'.
  
    WHEN 'ASSET_NO'      .
        lv_asset_no = value1.
  *      ls_options-text = 'ANLN1 = VALUE1 AND BUKRS = VALUE2'.
      CONCATENATE 'ANLN1' '=' VALUE1 'AND' 'BUKRS' '=' VALUE2 INTO
      LS_OPTIONS-TEXT SEPARATED BY SPACE.
      APPEND ls_options TO lt_options.
        ls_fields-fieldname = 'XV0NM'.
      ls_fields-length    = '000012'.
      ls_fields-offset    = '000000'.
      ls_fields-type      = 'C'.
      APPEND ls_fields TO lt_fields.
        ls_fields-fieldname = 'ANLN1'.
      ls_fields-length    = '000012'.
      ls_fields-offset    = '000000'.
      ls_fields-type      = 'C'.
      APPEND ls_fields TO lt_fields.
        ls_fields-fieldname = 'BUKRS'.
      ls_fields-length    = '000004'.
      ls_fields-offset    = '000000'.
      ls_fields-type      = 'C'.
      APPEND ls_fields TO lt_fields.
        lv_query_table = 'ANLX'.
    ENDCASE.
  *** SELECT ALL THE RECORD FRIOM ZRP2P0BGST001...
*** BASED ON ABOVE PLANT AND COST_CTR/IO/ASSET.
  SELECT * FROM zrp2p0bgst001
  INTO TABLE lt_update_tab
  WHERE
      zplant = value3    AND
      zcost_ctr = lv_cost_ctr AND
      zorder_no = lv_order_no AND
      zasset_no = lv_asset_no.
    IF sy-subrc = 0.
    SORT lt_update_tab BY zplant zcost_ctr
             zorder_no zasset_no zlevel zvalue.
  **** NOW PREPARE THE WORKAREA FOR UPDATING THE TABLE ZRP2P0BGST001..
    READ TABLE LT_UPDATE_TAB INTO LS_APPROVAL_DEF WITH
    KEY zplant    = value3
        zcost_ctr = lv_cost_ctr
        zorder_no = lv_order_no
        zasset_no = lv_asset_no
        ZLEVEL    = 1  .
      IF SY-SUBRC = 0.
*      LS_APPROVAL_DEF-ZVALUE =
    ENDIF.
    ELSE.
*** RAISE ERROR AS NO RECORDS FOUND.
  ENDIF.
    CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'E10CLNT121'
    EXPORTING
      query_table          = lv_query_table
      delimiter            = '|'
    TABLES
      OPTIONS              = lt_options
      fields               = lt_fields
      data                 = lt_data
    EXCEPTIONS
      table_not_available  = 1
      table_without_data   = 2
      option_not_valid     = 3
      field_not_valid      = 4
      not_authorized       = 5
      data_buffer_exceeded = 6
      OTHERS               = 7.
    IF sy-subrc = 0.
    READ TABLE lt_data INTO ls_data INDEX 1.
    IF lv_query_table = 'CSKS'.
      lv_apprv_cc = ls_data-wa+0(20).
      ls_approval_def-zapprover = lv_apprv_cc.
    ENDIF.
    IF lv_query_table = 'ANLX'.
      lv_apprv_asset = ls_data-wa+0(12).
      ls_approval_def-zapprover = lv_apprv_asset.
    ENDIF.
  ENDIF.
  **** NOW PREPARE THE WORKAREA FOR UPDATING THE TABLE ZRP2P0BGST001..
****  ls_approval_def-mandt = sy-mandt.
****  ls_approval_def-zplant = value3.
****  ls_approval_def-zcost_ctr = lv_cost_ctr.
****  ls_approval_def-zorder_no = lv_order_no.
****  ls_approval_def-zasset_no = lv_asset_no.
   
  *** THIS WILL PICK MAX THREE RECORDS AS PER THE CORRECT
*** REQUIREMENT.
    DO approval_index TIMES.  " begin of do.
    l_apprv_count = l_apprv_count + 1.
    ls_approval_def-zlevel    = l_apprv_count .
*** IF THE COUNT IS MORE THAN ONE THEN NEXT LEVEL OF APPROVER
*** IS FOUND USING THE RFC CALL SWX_GET_MANAGER AND STORED.
    IF l_apprv_count > 1.
      l_apprv_count = l_apprv_count - 1.
      READ TABLE lt_update_tab INTO ls_update_tab
           WITH KEY zlevel = l_apprv_count .
      IF sy-subrc = 0 .
*** NOW FOR FINDING THE SECOND LEVEL OF APPROVER
*** 1ST LEVEL OF APPROVER IS FOUND USING ABOVE READ.
*** THE FIRST LEVEL OF APPROVER IS USED TO FIND THE SECOND
*** LEVEL OF APPROVER USING THE SWX_GET_MANAGER.
*** PREPARE THE TABLES FOR SWX_GET_MANAGER
        ls_ac_container-element = 'ORG_OBJECT'.
        ls_ac_container-tab_index = '000001'.
        ls_ac_container-elemlength = '006'.
        ls_ac_container-type       = 'C'.
        CONCATENATE 'US' ls_update_tab-zapprover
        INTO ls_ac_container-value .
*          ls_ac_container-value      = ls_update_tab-zapprover.
        APPEND ls_ac_container TO lt_ac_container.
          CALL FUNCTION 'SWX_GET_MANAGER' DESTINATION 'R10CLNT120'
          TABLES
            actor_tab    = lt_actor_tab
            ac_container = lt_ac_container
          EXCEPTIONS
            nobody_found = 1
            OTHERS       = 2.
        IF sy-subrc = 0.
          READ TABLE lt_actor_tab INTO ls_actor_tab INDEX 1.
          ls_approval_def-zapprover = ls_actor_tab-objid.
        ENDIF.
*** CODE ENDS FOR FINDING THE HIGHER OERDR OF MANAGER.
      ENDIF.
      l_apprv_count = l_apprv_count + 1.
    ENDIF.
*** BEFORE UPDATING POPULATE THE TABLE LT_APPROVAL_DEF***
*** LT_UPDATE_TAB IS READ BASED ON NEXT L_APPRV_COUNT AND
*** UPDATING THE APPROVER AND VALUE.
    READ TABLE lt_update_tab INTO ls_update_tab
           WITH KEY zlevel = l_apprv_count .
    IF SY-SUBRC = 0.
    LS_APPROVAL_DEF-ZVALUE = LS_UPDATE_TAB-ZVALUE.
    APPEND ls_approval_def TO lt_approval_def.
    ENDIF.
*** NOW ENQUEUE THE TABLE FOR MODIFICATION.*****
    CALL FUNCTION 'ENQUEUE_E_TABLE'
      EXPORTING
        tabname        = 'ZRP2P0BGST001'
      EXCEPTIONS
        foreign_lock   = 1
        system_failure = 2
        OTHERS         = 3.
**** NOW MODIFY THE TABLE FOR UPDATING THE APPROVER.
    IF sy-subrc = 0.
      MODIFY zrp2p0bgst001 FROM ls_approval_def.
      IF SY-SUBRC = 0.
        COMMIT WORK.
      ENDIF.
    ENDIF.
**** NOW DEQUEUE THE TABLE AFTER THE UPDATION.
    CALL FUNCTION 'DEQUEUE_E_TABLE'
      EXPORTING
        tabname = 'ZRP2P0BGST001'.
      CLEAR : ls_approval_def-zlevel , ls_approval_def-zapprover.
  ENDDO. " END OF DO STATEMENT.
  *********************~~~******************
  
*      IF sy-subrc NE 4.
*** Fill approval table (who is responsible for which approval
*** object in which approval step)
  SORT lt_approval_def BY zplant zcost_ctr zorder_no zasset_no
                          zlevel zvalue.
  LOOP AT lt_approval_def INTO ls_approval_def.
      ls_approval_table-approval_index       = ls_approval_def-zlevel.
    CONCATENATE c_agent_is_user ls_approval_def-zapprover
                            INTO ls_approval_table-approval_agent.
  *        ls_approval_table-name = ls_approval_def-agent_string1.
    ls_approval_table-approval_description = approval_description.
      ls_approval_table-approval_object_guid = lv_app_obj_guid.
      ls_approval_table-hide_items_not_responsible =
                            hide_items_not_responsible.
      APPEND ls_approval_table TO approval_table.
  ENDLOOP.
***        IF ls_approval_def-approval_agent2 IS NOT INITIAL.
****** Second approver for the same workitem exists
***          CONCATENATE c_agent_is_user ls_approval_def-approval_agent2
***                              INTO ls_approval_table-approval_agent.
***          ls_approval_table-name = ls_approval_def-agent_string2.
***          APPEND ls_approval_table TO approval_table.
***        ENDIF.
*      ENDIF.
******    ENDIF.
  *** Fill item table (Which items belongs to which approval object)
  ls_item_approval_table-approval_object_guid = lv_app_obj_guid.
  ls_item_approval_table-approval_item_guid   = item_guid.
  APPEND ls_item_approval_table TO item_approval_table.
   
  ENDFUNCTION.
   
  Please analyse the code and provide me solution. Thanks in advance
  Thanks and Regards
  Arghadip
   
   
    
---------------------------------
  TV dinner still cooling?
Check out "Tonight's Picks" on Yahoo! TV.

       
---------------------------------
Expecting? Get great news right away with email Auto-Check.
Try the Yahoo! Mail Beta.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/sap-wug/attachments/20070410/da6a444f/attachment.htm


More information about the SAP-WUG mailing list