WS14500015 Not working properly

Nash John emailtonash at gmail.com
Mon Apr 9 10:12:05 EDT 2007


Arghadip,

Why don't you put a break point in your BAdi and see whether approval table
is getting filled.To debugg do following.
1. put a break point in your BAdi.
2. Create a shopping cart. Don't 'order' it but 'held'.
3. go to tcodee : BBP_PD
    enter Object Type as BUS2121 and Object ID your SC #.
4. execute. It should stop in your break point.

-Nash
On 4/9/07, arghadip kar <arghadipkar at yahoo.com> wrote:
>
> Hi All
>
>        I am having problem to execute Workflow Template WS14500015.TheWorkflow 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"<http://us.rd.yahoo.com/evt=49979/*http://tv.yahoo.com/>on Yahoo! TV.
>
>
> _______________________________________________
> SAP-WUG mailing list
> SAP-WUG at mit.edu
> http://mailman.mit.edu/mailman/listinfo/sap-wug
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/sap-wug/attachments/20070409/45cd9a33/attachment.htm


More information about the SAP-WUG mailing list