Need Help in SRM Workflow WS145000015(Item Based approval For shopping Cart)
arghadip kar
arghadipkar at yahoo.com
Fri May 4 12:30:32 EDT 2007
Hi All
I am Arghadip. I was implementing SRM Workflow WS145000015(Item Based approval For shopping Cart). I am facing the issue of Workitem getting Logically Deleted as soon as a Approver is approving a Line Item. I have also checked and found that the Restart event is getting triggered which is Logically deleting the Workitem and starting the approval Step all to over again. Can anyone tell me what is wrong in my programming in BADI.Please get back to me as it is urgent. Thanks in advance
I am attaching my Code here Please reiew:
METHOD
*-----------------------------------------------------------------------
METHOD if_ex_bbp_wfl_approv_badi~get_remaing_approvers .
* -------------------------------------------------------------------- *
* Interface parameters:
* -------------------------------------------------------------------- *
* OBJECT_ID TYPE CRMT_OBJECT_ID "Import
* OBJECT_TYPE TYPE CRMT_SUBOBJECT_CATEGORY "Import
* GUID TYPE BBP_GUID_32 "Import
* ACTUAL_APPROVAL_INDEX TYPE SWH_NUMC10 "Import
* APPROVAL_HISTORY_TABLE TYPE BBP_WFL_APPROVAL_HISTORY_BADI "Import
* ITEM_APPROVAL_HISTORY_TABLE TYPE BBPT_WFL_ITEM_APPROVAL_BADI "Import
* APPROVAL_TABLE TYPE BBPT_WFL_APPROVAL_TABLE_BADI "Export
* ITEM_APPROVAL_TABLE TYPE BBPT_WFL_ITEM_APPROVAL_BADI "Export
* NO_FURTHER_APPROVAL_NEEDED TYPE BOOLEAN "Export
* ITEM_APPROVAL_OBJ TYPE BBPT_WFL_ITEM_APPROVAL_OBJ "Changing
* -------------------------------------------------------------------- *
* This a default implementation that gives idea about of how line item
* approval should work as well to find the number of approval required
* and to find the approvers.
* Global data---------------------------------------------------------*
* TYPES---------------------------------------------------------------*
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.
* FIELD-SYMBOLS-------------------------------------------------------*
FIELD-SYMBOLS :
<l_fs_account> TYPE ty_account.
* DATA----------------------------------------------------------------*
DATA : it_item_info TYPE ty_item_info,
wa_item_info TYPE zrp2p0bgst001.
DATA : v_tabix TYPE sytabix,
v_num_apprv TYPE swh_numc10 VALUE '0',
v_value_per_con TYPE bbp_value VALUE '0',
v_value_per TYPE bbp_value.
DATA : v_temp_value TYPE bbp_value VALUE '0',
v_temp_level TYPE swh_numc10 VALUE '0'.
DATA: v_call_crit1 TYPE bbp_wfl_app_criterion,
v_call_value1 TYPE bbp_wfl_app_property,
v_co_code TYPE bbp_wfl_app_property,
v_plant_value TYPE bbp_wfl_app_property,
v_account_type TYPE bbp_wfl_app_criterion ,
v_comp_code TYPE bbp_wfl_app_criterion ,
v_plant TYPE bbp_wfl_app_criterion ,
v_acc_desc TYPE bbp_step_description .
DATA: v_guid TYPE crmt_object_guid.
* WORKAREA------------------------------------------------------------*
DATA: wa_header TYPE bbp_pds_sc_header_d,
* tables and work area.
it_item TYPE TABLE OF bbp_pds_sc_item_d,
wa_item TYPE bbp_pds_sc_item_d,
it_item_copy TYPE TABLE OF bbp_pds_sc_item_d,
wa_item_copy TYPE bbp_pds_sc_item_d,
* accounting structures
it_account TYPE TABLE OF bbp_pds_acc,
wa_account TYPE bbp_pds_acc,
wa_account_copy TYPE ty_account,
wa_approver TYPE bbp_wfl_approval_table_badi.
* CONSTANTS-----------------------------------------------------------*
* Business objects
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
CONSTANTS:
c_cost_centre TYPE bbp_wfl_app_criterion VALUE 'COST_CTR',
c_prod_categ TYPE bbp_wfl_app_criterion VALUE 'PROD_CAT'.
* Case when the object type bus212...---------------------------------*
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 = wa_header
TABLES
e_item = it_item
e_account = it_account.
* Proceed if it_item is not initial.
IF NOT it_item IS INITIAL.
* Keep the copy the it_item into it_item_copy
* and keep the unique be_plant.
it_item_copy[] = it_item[].
SORT it_item_copy BY be_plant.
DELETE ADJACENT DUPLICATES FROM it_item_copy
COMPARING be_plant.
SELECT mandt
zplant
zcost_ctr
zorder_no
zasset_no
zlevel
zvalue
zapprover
FROM zrp2p0bgst001
INTO TABLE it_item_info
FOR ALL ENTRIES IN it_item
WHERE
zplant = it_item-be_plant.
* No sy-subrc check is required as this method is called only
* if the table contains some value such checks done before this.
SORT it_item_info BY zplant zcost_ctr
zorder_no zasset_no zlevel zvalue.
SORT it_item BY guid.
SORT it_account BY p_guid.
* looping at it_item is done to fetch the approver for every
* line item
LOOP AT it_item INTO wa_item WHERE del_ind IS INITIAL.
READ TABLE it_account INTO wa_account
WITH KEY p_guid = wa_item-guid.
IF sy-subrc = 0.
v_tabix = sy-tabix.
* looping is done at every account so that every approver is
* found for every acc corresponding to each line item.
LOOP AT it_account INTO wa_account FROM v_tabix.
IF wa_account-p_guid <> wa_item-guid.
EXIT.
ELSE.
* Comments for process -----------------------------------------------*
* CALCULATING THE VALUE PER COST CENTER /INTERNAL ORDER OR ASSET.
* ALONG WITH ,CALCULATING THE VALUE THE AMT NEED TO BE CONVERTED
* IN USD AS THE VALUES ARE MAINTAINED IN USD.
* SO FUNCTION MODULE IS CALLED TO CONVERT THE WA_ITEM-CURRENCY
* INTO USD USING CONVERT_TO_LOCAL_CURRENCY.
*---------------------------------------------------------------------*
v_value_per_con = wa_account-distr_perc * wa_item-value / 100.
* CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
* EXPORTING
** CLIENT = SY-MANDT
* date = sy-datum
* foreign_amount = v_value_per_con
* foreign_currency = wa_item-currency
* local_currency = 'USD'
* type_of_rate = 'M'
* read_tcurr = 'X'
* IMPORTING
* local_amount = v_value_per
* EXCEPTIONS
* no_rate_found = 1
* overflow = 2
* no_factors_found = 3
* no_spread_found = 4
* derived_2_times = 5
* OTHERS = 6
* .
** if error occurs system generated message is displayed.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
*--------------------------------------------------------------------*
v_value_per = v_value_per_con.
*--------------------------------------------------------------------*
READ TABLE it_item_info INTO wa_item_info WITH KEY
zplant = wa_item-be_plant
zcost_ctr = wa_account-cost_ctr
zorder_no = wa_account-order_no
zasset_no = wa_account-asset_no.
* Comment on logic----------------------------------------------------*
* 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 AS THE it_ITEM_INFO IS SORTED.
* FIRST RECORD WITH THE REQUIRED VALUE IS READ.
*---------------------------------------------------------------------*
*--------------------------------------------------------------------*
* begin of modification.--
* IF sy-subrc = 0.
* v_temp_value = wa_item_info-zvalue.
* v_temp_level = wa_item_info-zlevel.
*
* IF v_value_per < v_temp_value.
* v_num_apprv = -1. " NO APPROVER REQUIRED.
*
* ELSE.
* LOOP AT it_item_info INTO wa_item_info
* WHERE
* zplant = wa_item-be_plant AND
* zcost_ctr = wa_account-cost_ctr AND
* zorder_no = wa_account-order_no AND
* zasset_no = wa_account-asset_no .
*
* IF wa_item_info-zvalue GE v_value_per
* AND v_value_per GT v_temp_value .
* v_num_apprv = v_temp_level.
* EXIT.
* ELSE.
* v_temp_value = wa_item_info-zvalue.
* v_temp_level = wa_item_info-zlevel.
* ENDIF.
*
* ENDLOOP.
* ENDIF.
*
* IF v_num_apprv IS INITIAL.
* v_num_apprv = v_temp_level.
* ENDIF.
* ELSE.
* CLEAR: v_temp_value,v_temp_level.
* ENDIF.
* end of modification.--
*--------------------------------------------------------------------*
* As the v_num_apprv is assigned some value other than 0.
* and for all values v_num_apprv <> -1 it shud proceed.
*-begin of modification ++-------------------------------------------*
v_num_apprv = actual_approval_index .
*-end of modification ++-------------------------------------------*
IF v_num_apprv <> -1.
* Comment on logic----------------------------------------------------*
* NOW THE NUMBER OF APPROVER IS KNOWN SO THE APPROVER IS
* FOUND USING THE RFC AND THE CUSTOM TABLE ZRP2P0BGST001 IS UPDATED
* WITH LATEST APPROVERS.
*---------------------------------------------------------------------*
* To Find out Account id of what type ie cost center/IO/Asset.
IF NOT wa_account-cost_ctr IS INITIAL.
v_call_value1 = wa_account-cost_ctr.
v_account_type = 'COST_CTR'.
v_acc_desc = 'Cost center approval'.
ENDIF.
IF NOT wa_account-order_no IS INITIAL.
v_call_value1 = wa_account-order_no.
v_account_type = 'ORDER_NO'.
v_acc_desc = 'Internal Order approval'.
ENDIF.
IF NOT wa_account-asset_no IS INITIAL.
v_call_value1 = wa_account-asset_no.
v_account_type = 'ASSET_NO'.
v_acc_desc = 'Asset Number approval'.
v_comp_code = 'COMPANY_CODE'.
v_co_code = wa_item-be_co_code.
ENDIF.
* Defining the PLANT and plant value.
v_plant = 'PLANT'.
v_plant_value = wa_item-be_plant.
* Calling the Custom function to find the approvers.
CALL FUNCTION 'ZBBP_WFL_DIN_ITEM_APPROVAL_GET'
EXPORTING
sc_guid = wa_header-guid
item_guid = wa_item-guid
approval_description = v_acc_desc
hide_items_not_responsible = 'X'
* each cost center approver should see only items he is responsible
criterion1 = v_account_type
criterion2 = v_comp_code
criterion3 = v_plant
value1 = v_call_value1
value2 = v_co_code
value3 = v_plant_value
approval_index = v_num_apprv
CHANGING
approval_table = approval_table
item_approval_table = item_approval_table
item_approval_obj = item_approval_obj.
ENDIF.
ENDIF.
CLEAR wa_account.
ENDLOOP.
ENDIF.
ENDLOOP.
* Once done clear the wa_approver
CLEAR: wa_approver , wa_account,wa_item, wa_item_info.
ENDIF.
ENDCASE.
*--------------------------------------------------------------------*
* temporary change adding one more line to apprv table.
IF approval_table IS INITIAL.
no_further_approval_needed = 'X'.
ENDIF.
* DATA:
* l_wa_approval_table TYPE bbp_wfl_approval_table_badi.
*
* READ TABLE approval_table INTO l_wa_approval_table INDEX 1.
* l_wa_approval_table-approval_agent = 'USARGK'.
* l_wa_approval_table-approval_index = '0000000003'.
* APPEND l_wa_approval_table TO approval_table.
*--------------------------------------------------------------------*
ENDMETHOD.
FUNCTION MODULE
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
*"----------------------------------------------------------------------
* Local data-----------------------------------------------------------*
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:
l_wa_approval_table TYPE bbp_wfl_approval_table_badi,
l_wa_item_approval_table TYPE bbps_wfl_item_approval,
l_wa_approval_def TYPE zrp2p0bgst001.
DATA:
l_v_app_obj_guid TYPE bbp_guid_32,
l_v_is_new_approval_object TYPE boolean.
DATA : l_it_update_tab TYPE STANDARD TABLE OF zrp2p0bgst001,
l_it_approval_def TYPE STANDARD TABLE OF zrp2p0bgst001,
l_wa_update_tab TYPE zrp2p0bgst001.
DATA : l_it_actor_tab TYPE STANDARD TABLE OF swhactor,
l_wa_actor_tab TYPE swhactor,
l_it_ac_container TYPE STANDARD TABLE OF swcont,
l_wa_ac_container TYPE swcont.
DATA : l_it_options TYPE ty_option,
l_it_fields TYPE ty_fields,
l_it_data TYPE ty_data.
DATA : l_wa_options TYPE rfc_db_opt,
l_wa_fields TYPE rfc_db_fld,
l_wa_data TYPE tab512.
DATA : l_v_apprv_asset TYPE usnam,
l_v_apprv_cc TYPE verak.
DATA : l_v_cost_ctr TYPE bbp_wfl_app_property VALUE '',
l_v_order_no TYPE bbp_wfl_app_property VALUE '',
l_v_asset_no TYPE bbp_wfl_app_property VALUE ''.
DATA : l_v_query_table TYPE dd02l-tabname.
DATA : l_apprv_count TYPE char1 VALUE '0'.
* Constants-----------------------------------------------------------*
CONSTANTS:
l_c_agent_is_user TYPE otype VALUE 'US'.
* Comment on login ---------------------------------------------------*
* First find the right approval object the item belongs to.
* All items of an approval object are approved together in
* this approval step, and therefore only one workitem is
* created for this items.
*---------------------------------------------------------------------*
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 = l_v_app_obj_guid
TABLES
item_app_obj = item_approval_obj
.
* Check what type of account is ie Order no/Internal order/ASSET.
IF criterion1 = 'ORDER_NO'.
l_v_order_no = value1.
CONCATENATE 'AUFNR' '=' value1 INTO l_wa_options-text
SEPARATED BY space.
APPEND l_wa_options TO l_it_options.
l_wa_fields-fieldname = 'AUFNR'.
l_wa_fields-length = '000012'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_wa_fields-fieldname = 'KOSTV'.
l_wa_fields-length = '000010'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'E10CLNT121'
EXPORTING
query_table = 'COAS'
delimiter = '|'
TABLES
OPTIONS = l_it_options
fields = l_it_fields
data = l_it_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 l_it_data table contains only one record
* so no sorting required.
READ TABLE l_it_data INTO l_wa_data INDEX 1.
value1 = l_wa_data-wa+12(10).
ENDIF.
* at the end of this if internal order is passed its responsible
* cost obtained and is placed in value1 field.
CLEAR : l_wa_data , l_wa_options , l_wa_fields ,
l_it_data , l_it_options , l_it_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'.
l_v_cost_ctr = value1.
ENDIF.
CONCATENATE 'KOSTL' '=' value1 INTO l_wa_options-text
SEPARATED BY space.
APPEND l_wa_options TO l_it_options.
l_wa_fields-fieldname = 'VERAK'.
l_wa_fields-length = '000020'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_wa_fields-fieldname = 'KOSTL'.
l_wa_fields-length = '000010'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_v_query_table = 'CSKS'.
WHEN 'ASSET_NO' .
l_v_asset_no = value1.
CONCATENATE 'ANLN1' '=' value1 'AND' 'BUKRS' '=' value2 INTO
l_wa_options-text SEPARATED BY space.
APPEND l_wa_options TO l_it_options.
l_wa_fields-fieldname = 'XV0NM'.
l_wa_fields-length = '000012'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_wa_fields-fieldname = 'ANLN1'.
l_wa_fields-length = '000012'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_wa_fields-fieldname = 'BUKRS'.
l_wa_fields-length = '000004'.
l_wa_fields-offset = '000000'.
l_wa_fields-type = 'C'.
APPEND l_wa_fields TO l_it_fields.
l_v_query_table = 'ANLX'.
ENDCASE.
* select all the record friom zrp2p0bgst001...
* based on above plant and cost_ctr/io/asset.
SELECT * FROM zrp2p0bgst001
INTO TABLE l_it_update_tab
WHERE
zplant = value3 AND
zcost_ctr = l_v_cost_ctr AND
zorder_no = l_v_order_no AND
zasset_no = l_v_asset_no.
IF sy-subrc = 0.
SORT l_it_update_tab BY zplant zcost_ctr
zorder_no zasset_no zlevel zvalue.
* now prepare the workarea for updating the table zrp2p0bgst001.
READ TABLE l_it_update_tab INTO l_wa_approval_def WITH
KEY zplant = value3
zcost_ctr = l_v_cost_ctr
zorder_no = l_v_order_no
zasset_no = l_v_asset_no
zlevel = 1 .
* sy-subrc check not required as the function module is caled
* only when the table contains the value and as such abvoe
* sy-subrc is true so below will fetch atleast one record.
ENDIF.
CALL FUNCTION 'RFC_READ_TABLE' DESTINATION 'E10CLNT121'
EXPORTING
query_table = l_v_query_table
delimiter = '|'
TABLES
OPTIONS = l_it_options
fields = l_it_fields
data = l_it_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 l_it_data INTO l_wa_data INDEX 1.
IF l_v_query_table = 'CSKS'.
l_v_apprv_cc = l_wa_data-wa+0(20).
l_wa_approval_def-zapprover = l_v_apprv_cc.
ENDIF.
IF l_v_query_table = 'ANLX'.
l_v_apprv_asset = l_wa_data-wa+0(12).
l_wa_approval_def-zapprover = l_v_apprv_asset.
ENDIF.
ENDIF.
**********************************************************************
*--BEGING OF CHANGE MAJOR ONE.------------------------------------*
**********************************************************************
* IF ( approval_index = 0 or approval_index = 1. ).
* this will pick max three records as per the requirement
DO 3 TIMES. " begin of do.
l_apprv_count = l_apprv_count + 1.
l_wa_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 as per.
IF l_apprv_count > 1.
l_apprv_count = l_apprv_count - 1.
READ TABLE l_it_update_tab INTO l_wa_update_tab
WITH KEY zlevel = l_apprv_count .
IF sy-subrc = 0 .
* Comment on login ------------------------------------------------*
* 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
*-------------------------------------------------------------------*
REFRESH : l_it_ac_container.
l_wa_ac_container-element = 'ORG_OBJECT'.
l_wa_ac_container-tab_index = '000001'.
l_wa_ac_container-elemlength = '006'.
l_wa_ac_container-type = 'C'.
CONCATENATE l_c_agent_is_user l_wa_update_tab-zapprover
INTO l_wa_ac_container-value .
APPEND l_wa_ac_container TO l_it_ac_container.
CALL FUNCTION 'SWX_GET_MANAGER' DESTINATION 'E10CLNT121'
TABLES
actor_tab = l_it_actor_tab
ac_container = l_it_ac_container
EXCEPTIONS
nobody_found = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE l_it_actor_tab INTO l_wa_actor_tab WITH KEY
otype = l_c_agent_is_user.
l_wa_approval_def-zapprover = l_wa_actor_tab-objid.
ENDIF.
ENDIF.
l_apprv_count = l_apprv_count + 1.
ENDIF.
* before updating populate the table l_it_approval_def
* l_it_update_tab is read based on next l_apprv_count and
* updates the approver and its value.
READ TABLE l_it_update_tab INTO l_wa_update_tab
WITH KEY zlevel = l_apprv_count .
IF sy-subrc = 0.
l_wa_approval_def-zplant = l_wa_update_tab-zplant.
l_wa_approval_def-zcost_ctr = l_wa_update_tab-zcost_ctr.
l_wa_approval_def-zorder_no = l_wa_update_tab-zorder_no.
l_wa_approval_def-zasset_no = l_wa_update_tab-zorder_no.
l_wa_approval_def-zvalue = l_wa_update_tab-zvalue.
APPEND l_wa_approval_def TO l_it_approval_def.
ENDIF.
* modify the table l_it_update_tab so that along with the custom
* database table the table in use in this function module ie
* l_it_update_tab also remain updated.
* benefit is that if the modify to dtab fails. the process works fine.
MODIFY l_it_update_tab FROM l_wa_approval_def
TRANSPORTING zapprover
WHERE zlevel = l_wa_approval_def-zlevel AND
zvalue = l_wa_approval_def-zvalue.
* 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 updation of approver.
IF sy-subrc = 0.
MODIFY zrp2p0bgst001 FROM l_wa_approval_def.
* if sy-subrc goes 0 commit work is called.
* also the l_it_update_tab need to be updated.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
ENDIF.
* now dequeue the table after the updation.
CALL FUNCTION 'DEQUEUE_E_TABLE'
EXPORTING
tabname = 'ZRP2P0BGST001'.
* once all done clear the work areas.
CLEAR : l_wa_approval_def-zlevel , l_wa_approval_def-zapprover.
ENDDO. " END OF DO STATEMENT.
* sort l_it_approval_def table.
SORT l_it_approval_def BY zlevel ASCENDING.
IF approval_index = 2 .
DELETE l_it_approval_def INDEX 1.
ENDIF.
IF approval_index = 3.
DELETE l_it_approval_def INDEX 1.
DELETE l_it_approval_def INDEX 1.
ENDIF.
IF approval_index > 3.
REFRESH : l_it_approval_def .
ENDIF.
*ENDIF.
**********************************************************************
*--end of major change.---------------------------------------------*
**********************************************************************
* fill approval table (who is responsible for which approval
* object in which approval step)
SORT l_it_approval_def BY zplant zcost_ctr zorder_no zasset_no
zlevel zvalue.
LOOP AT l_it_approval_def INTO l_wa_approval_def.
l_wa_approval_table-approval_index = l_wa_approval_def-zlevel.
CONCATENATE l_c_agent_is_user l_wa_approval_def-zapprover
INTO l_wa_approval_table-approval_agent.
l_wa_approval_table-approval_description = approval_description.
l_wa_approval_table-approval_object_guid = l_v_app_obj_guid.
l_wa_approval_table-hide_items_not_responsible =
hide_items_not_responsible.
APPEND l_wa_approval_table TO approval_table.
ENDLOOP.
* fill item table (which items belongs to which approval object)
l_wa_item_approval_table-approval_object_guid = l_v_app_obj_guid.
l_wa_item_approval_table-approval_item_guid = item_guid.
APPEND l_wa_item_approval_table TO item_approval_table.
ENDFUNCTION.
Arghadip Kar
email:dharam015 at gmail.com
phone no :913325579917
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
Check outnew cars at Yahoo! Autos.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.mit.edu/pipermail/sap-wug/attachments/20070504/9978eb22/attachment.htm
More information about the SAP-WUG
mailing list