<BR><BR> <BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid"><BR> <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> <div> <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.</BLOCKQUOTE><BR><p> 
<hr size=1>Expecting? Get great news right away with <a href="http://us.rd.yahoo.com/evt=49982/*http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html">email Auto-Check.</a><br>Try the <a href="http://us.rd.yahoo.com/evt=49982/*http://advision.webevents.yahoo.com/mailbeta/newmail_tools.html">Yahoo! Mail Beta.</a>