<div>Arghadip,</div>
<div> </div>
<div>Why don't you put a break point in your BAdi and see whether approval table is getting filled.To debugg do following.</div>
<div>1. put a break point in your BAdi.</div>
<div>2. Create a shopping cart. Don't 'order' it but 'held'.</div>
<div>3. go to tcodee : BBP_PD</div>
<div> enter Object Type as BUS2121 and Object ID your SC #.</div>
<div>4. execute. It should stop in your break point.<br><br>-Nash</div>
<div><span class="gmail_quote">On 4/9/07, <b class="gmail_sendername">arghadip kar</b> <<a href="mailto:arghadipkar@yahoo.com">arghadipkar@yahoo.com</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<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_c
o_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><span class="sg">
<div>Arghadip</div></span><span class="ad">
<div> </div>
<div> </div>
<p>
<hr size="1">
TV dinner still cooling?<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://us.rd.yahoo.com/evt=49979/*http://tv.yahoo.com/" target="_blank">Check out "Tonight's Picks"</a> on Yahoo! TV.
<p></p></p></span><br>_______________________________________________<br>SAP-WUG mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:SAP-WUG@mit.edu">SAP-WUG@mit.edu</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://mailman.mit.edu/mailman/listinfo/sap-wug" target="_blank">
http://mailman.mit.edu/mailman/listinfo/sap-wug</a><br><br></blockquote></div><br>