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