WS14500015.....
Hi,
I have assigned to developed SC item level Approval workflow based on the Product Category.
i have found standard workflow and standard BAdi for the above scenario.
I know how to implement that BAdi.
my doubt is after i implemented that badi , i have to write my custom coding for determine approval agent based on the SC Product Category.
please if any body already done this same scenario, please help me to write coding on BAdi.
Small requiest,
one thread is going on the same issue but, i don't know who is Kavin Kumar, he made some mistake. so that i want to close that thread and open new thread.
Jayasankar, Vadim COURTHEOUX, please close that thread and please answer for this one. i am so very sorry.
thanks,
Durai
Hi Durai,
There are parameters called approval index.
If approval index is 1 then he will be the first approver, if it is 2 then he will be the second approver.
If you assign approval index as 1 to two approvers, you will see their names on first approval.
I am implemented this workflow in a very complex environment where approvers ( cost center managers) are sitting in R/3 and then I need to get them using RFC + in other scenarios I need to read attributes from org structure to get approvers.
Please go through sample coding of BBP_WFL_APPROV_BADI, there are 4 sample codes available but you will have to get idea from complex n-step itembased approval code.
I am having a coding of more than 1800 lines which may not suite your scenario plus it is specific to customer.
If you see sample code and compare with my following piece of code, it willbe useful and will give you a starting point.
Please reward few points if you find my answer as very helpful.
Fill Approval Table.
First Approval.
IF i_actual_approval_index <= 1.
LOOP AT lt_appr_def INTO ls_appr_def.
CASE ls_appr_def-app_crit_name1.
WHEN gc_field_cost_ctr.
l_step_desc = 'Cost Centre Approval'.
WHEN gc_field_wbs_elem_e.
l_step_desc = 'WBS Element Approval'.
WHEN gc_field_order_no.
l_step_desc = 'Internal Order Approval'.
ENDCASE.
CALL FUNCTION 'BBP_WFL_DIN_FILL_APPROVER'
EXPORTING
iv_approval_index = 1
ic_step_description = l_step_desc
iv_criterion1 = ls_appr_def-app_crit_name1
iv_hide_items_flag = 'X'
TABLES
it_approval_def = lt_appr_def
it_approval_object = item_approval_obj
et_approver = approval_table
it_approval_items = item_approval_table.
ENDLOOP.
ENDIF.
IF NOT approval_table[] IS INITIAL.
LOOP AT approval_table INTO ls_approval_table.
MOVE sy-tabix TO l_tabix.
PERFORM get_approvers_name USING ls_approval_table-approval_agent CHANGING ls_approval_table-name.
ls_approval_table-APPROVAL_DESCRIPTION = 'CCManager/WBSManager'
MODIFY approval_table FROM ls_approval_table INDEX l_tabix.
ENDLOOP.
ENDIF.
ENDIF.
Regards.
Pras
Similar Messages
-
WS14500015 is not working for Multilevel approval
We are trying to Implement the Workflow Template Ws14500015. We have implemented the BADI BBP_WFL_APPROVE_BADI. The workflow works perfectly for 1st level approval. We have checked that the ApproverList Container element gets pouplated with 3 levels of approval when 1 st level approver has not approved it. But as soon as the first level approver approves it this container element is updated with one entry. Please review the code I am attaching. Any help will be highly appreciated.
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 : ty_item_info TYPE STANDARD TABLE OF /fir/rmm0bgst001.
"to have the necessary values of custom table .
DATA----------------------------------------------------------------*
DATA : it_item_info TYPE ty_item_info,"to store the approval values.
wa_item_info TYPE /fir/rmm0bgst001. " work area for item_info.
DATA : v_value_per_cctr TYPE bbp_value, " contain value per account
" type in line item of SC
v_value_per TYPE bbp_value. " value for v_value_per_cctr
" in USD
DATA : v_apprv_value TYPE bbp_value. " amount of first level.
DATA: v_call_value1 TYPE bbp_wfl_app_property,"have cost_ctr,
"asset_no or order_no value.
v_co_code TYPE bbp_wfl_app_property," have company code
v_plant_value TYPE bbp_wfl_app_property," have plant value
v_account_type TYPE bbp_wfl_app_criterion ," Account type
" ie COST_CTR, ASSET_NO or ORDER_NO.
v_comp_code TYPE bbp_wfl_app_criterion ,"COMP_CODE
v_plant TYPE bbp_wfl_app_criterion ," PLANT
v_acc_desc TYPE bbp_step_description ." approval desc.
WORKAREA------------------------------------------------------------*
DATA: wa_header TYPE bbp_pds_sc_header_d, " header of line
" item
tables and work area.
it_item TYPE TABLE OF bbp_pds_sc_item_d,
" line item details
wa_item TYPE bbp_pds_sc_item_d,
" have one line item detail.
accounting structures
it_account TYPE TABLE OF bbp_pds_acc,
" account details
wa_account TYPE bbp_pds_acc .
" one account details.
DATA: v_req TYPE bbp_wfl_app_criterion. " for creator.
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_order_no TYPE bbp_wfl_app_criterion VALUE 'ORDER_NO',
c_asset_no TYPE bbp_wfl_app_criterion VALUE 'ASSET_NO',
c_comp_code TYPE bbp_wfl_app_criterion VALUE 'COMP_CODE',
c_plant TYPE bbp_wfl_app_criterion VALUE 'PLANT',
c_cc_desc TYPE bbp_step_description VALUE
'Cost center approval',
c_io_desc TYPE bbp_step_description VALUE
'Order type approval',
c_as_desc TYPE bbp_step_description VALUE
'Asset Num approval',
c_usd TYPE char3 VALUE 'USD',
c_m TYPE char1 VALUE 'M',
c_x TYPE char1 VALUE 'X',
c_apprv_times TYPE char1 VALUE 3,
c_1 TYPE char2 VALUE '1',
c_as TYPE BBP_ACC_CAT VALUE 'AS',
c_or TYPE BBP_ACC_CAT VALUE 'OR',
c_cc TYPE BBP_ACC_CAT VALUE 'CC',
c_us TYPE char2 VALUE 'US'.
Case when the object type bus212...---------------------------------*
CASE object_type.
WHEN c_shop.
----------- shopping cart --------------------------------------- *
IF NOT approval_table[] IS INITIAL.
approval_history_table[] = approval_table[].
item_approval_history_table[] = item_approval_table[].
REFRESH : approval_table, item_approval_table,
item_approval_obj .
ENDIF.
REFRESH : it_item,it_account.
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 AND NOT it_account IS INITIAL.
*read the lt_item for plant
READ TABLE it_item INTO wa_item INDEX 1.
CHANGE FOR REQEUSTOR.
CONCATENATE c_us wa_item-created_by INTO v_req.
now read the table with wa_item-be_plant.
SELECT *
FROM /fir/rmm0bgst001
INTO TABLE it_item_info
WHERE zplant = wa_item-be_plant.
SORT it_item BY guid .
SORT it_account BY p_guid .
IF actual_approval_index LE c_apprv_times AND
actual_approval_index GE c_1.
looping at it_item is done to fetch the approver for every
line item
CLEAR: wa_item, wa_account.
LOOP AT it_item INTO wa_item WHERE del_ind IS INITIAL.
LOOP AT it_account INTO wa_account
WHERE p_guid = wa_item-guid.
to calculate the amount before calling the funciton module for
approval table.value respective to account type
v_value_per_cctr =
wa_account-distr_perc * wa_item-value / 100.
read the table respective to account type and for level 1 approval
such that if the value is less than zvalue then no approval required.
CLEAR: wa_item_info.
CASE wa_account-acc_cat .
WHEN c_or.
READ TABLE it_item_info INTO wa_item_info
WITH KEY zlevel = c_1 " 1
zorder_no = wa_account-order_no
zplant = wa_item-be_plant.
WHEN c_as.
READ TABLE it_item_info INTO wa_item_info
WITH KEY zlevel = c_1 " 1
zasset_no = wa_account-asset_no
zplant = wa_item-be_plant.
WHEN c_cc.
READ TABLE it_item_info INTO wa_item_info
WITH KEY zlevel = c_1 " 1
zcost_ctr = wa_account-cost_ctr
zplant = wa_item-be_plant.
ENDCASE.
IF sy-subrc = 0.
v_apprv_value = wa_item_info-zvalue.
ENDIF.
now convert the amount to local currency ie usd
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
date = sy-datum
foreign_amount = v_value_per_cctr
foreign_currency = wa_item-currency
local_currency = c_usd
type_of_rate = c_m
read_tcurr = c_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 v_value_per GE v_apprv_value AND sy-subrc = 0.
To Find out Account id of what type ie cost center/IO/Asset.
IF wa_account-acc_cat eq c_cc.
v_call_value1 = wa_account-cost_ctr.
v_account_type = c_cost_centre.
v_acc_desc = c_cc_desc. "'Cost center approval'.
ELSEIF wa_account-acc_cat eq c_or.
v_call_value1 = wa_account-order_no.
v_account_type = c_order_no.
v_acc_desc = c_io_desc. "'Internal Order approval'.
ELSE.
IF NOT wa_account-asset_no IS INITIAL.
v_call_value1 = wa_account-asset_no.
v_account_type = c_asset_no..
v_acc_desc = c_as_desc. "'Asset Number approval'.
ENDIF.
ENDIF.
Defining the PLANT and plant value.
v_plant = c_plant.
v_plant_value = wa_item-be_plant.
defining the COMPNAY CODE and company value.
v_comp_code = c_comp_code.
v_co_code = wa_item-be_co_code.
Calling the Custom function to find the approvers.
CALL FUNCTION '/FIR/RP2P0BGS_ITEM_APPRV_GET'
EXPORTING
sc_guid = wa_header-guid
item_guid = wa_item-guid
approval_description = v_acc_desc
hide_items_not_responsible = c_x "'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 = actual_approval_index
TABLES
it_item_info = it_item_info
CHANGING
approval_table = approval_table
item_approval_table = item_approval_table
item_approval_obj = item_approval_obj.
ENDIF." end if if value per cost center is more than
" level one price.
CLEAR wa_account.
ENDLOOP. " end of loop of account.
CLEAR: wa_account,wa_item, wa_item_info.
ENDLOOP. " end of loop at item
CHANGE FOR REQUESTOR.----
DELETE approval_table WHERE approval_agent = v_req.
IF approval_table IS INITIAL.
no_further_approval_needed = c_x. " 'X'.
ENDIF.
ELSE. " end of if actual_approval_index le 3.
this BADI-implementation defines 3 steps
no_further_approval_needed = c_x. "'X'.
ENDIF.
ENDIF. " end of if the it_item is not initial.
ENDCASE. "end of case if bus type is 2121
ENDMETHOD.
Function Module
FUNCTION /fir/rp2p0bgs_item_apprv_get .
""Local Interface:
*" IMPORTING
*" REFERENCE(SC_GUID) TYPE BBP_GUID OPTIONAL
*" REFERENCE(ITEM_GUID) TYPE BBP_GUID OPTIONAL
*" REFERENCE(APPROVAL_DESCRIPTION) TYPE BBP_STEP_DESCRIPTION
*" OPTIONAL
*" REFERENCE(HIDE_ITEMS_NOT_RESPONSIBLE) TYPE BOOLEAN OPTIONAL
*" REFERENCE(CRITERION1) TYPE BBP_WFL_APP_CRITERION OPTIONAL
*" REFERENCE(CRITERION2) TYPE BBP_WFL_APP_CRITERION DEFAULT ''
*" REFERENCE(CRITERION3) TYPE BBP_WFL_APP_CRITERION DEFAULT ''
*" REFERENCE(VALUE1) TYPE BBP_WFL_APP_PROPERTY DEFAULT ''
*" REFERENCE(VALUE2) TYPE BBP_WFL_APP_PROPERTY DEFAULT ''
*" REFERENCE(VALUE3) TYPE BBP_WFL_APP_PROPERTY DEFAULT ''
*" REFERENCE(APPROVAL_INDEX) TYPE SWH_NUMC10 OPTIONAL
*" TABLES
*" IT_ITEM_INFO STRUCTURE /FIR/RMM0BGST001
*" 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:
wa_approval_table TYPE bbp_wfl_approval_table_badi,
wa_item_approval_table TYPE bbps_wfl_item_approval,
wa_approval_def TYPE /fir/rmm0bgst001.
DATA:
v_app_obj_guid TYPE bbp_guid_32,
v_is_new_approval_object TYPE boolean.
DATA : it_update_tab TYPE STANDARD TABLE OF /fir/rmm0bgst001,
it_approval_def TYPE STANDARD TABLE OF /fir/rmm0bgst001,
wa_update_tab TYPE /fir/rmm0bgst001.
DATA : it_actor_tab TYPE STANDARD TABLE OF swhactor,
wa_actor_tab TYPE swhactor,
it_ac_container TYPE STANDARD TABLE OF swcont,
wa_ac_container TYPE swcont.
DATA : it_options TYPE ty_option,
it_fields TYPE ty_fields,
it_data TYPE ty_data.
DATA : wa_options TYPE rfc_db_opt,
wa_fields TYPE rfc_db_fld,
wa_data TYPE tab512.
DATA : v_apprv_io TYPE aufuser2,
v_apprv_cc TYPE verak.
DATA : v_cost_ctr TYPE bbp_wfl_app_property ,
v_order_no TYPE bbp_wfl_app_property ,
v_asset_no TYPE bbp_wfl_app_property ,
v_as_value TYPE bbp_wfl_app_property .
DATA : v_query_table TYPE dd02l-tabname.
DATA : v_apprv_count TYPE char1 VALUE '0'.
to find the number of lines in the table it_update_tab.
DATA : v_lines TYPE i.
DATA : v_app_ind TYPE swh_numc10 VALUE '0'.
DATA : v_destination TYPE char10,
v_system TYPE sysysid,
v_mandt TYPE symandt.
Constants-----------------------------------------------------------*
CONSTANTS:
c_clnt TYPE char4 VALUE 'CLNT',
c_agent_is_user TYPE otype VALUE 'US',
c_x TYPE char1 VALUE 'X',
c_cost_centre TYPE bbp_wfl_app_criterion VALUE 'COST_CTR',
c_order_no TYPE bbp_wfl_app_criterion VALUE 'ORDER_NO',
c_asset_no TYPE bbp_wfl_app_criterion VALUE 'ASSET_NO',
c_csks TYPE char4 VALUE 'CSKS',
c_anlz TYPE char4 VALUE 'ANLZ',
c_coas TYPE char4 VALUE 'COAS',
c_verak TYPE char5 VALUE 'VERAK',
c_user2 TYPE char5 VALUE 'USER2',
c_kostl TYPE char5 VALUE 'KOSTL',
c_aufnr TYPE char5 VALUE 'AUFNR',
c_bukrs TYPE char5 VALUE 'BUKRS',
c_anln1 TYPE char5 VALUE 'ANLN1',
c_c TYPE char1 VALUE 'C',
c_and TYPE char3 VALUE 'AND',
c_eq TYPE char1 VALUE '=',
c_org_object TYPE swc_elem VALUE 'ORG_OBJECT',
c_deli TYPE char1 VALUE '|',
c_l12 TYPE ddleng VALUE '000012',
c_off0 TYPE doffset VALUE '000000',
c_l10 TYPE ddleng VALUE '000010',
c_l20 TYPE ddleng VALUE '000020',
c_l04 TYPE ddleng VALUE '000004',
c_ind01 TYPE swc_index VALUE '000001',
c_el06 TYPE swc_length VALUE '006',
c_tab_name TYPE tabname VALUE '/fir/rmm0bgst001',
c_r10 TYPE sysysid VALUE 'R10',
c_r15 TYPE sysysid VALUE 'R15',
c_r20 TYPE sysysid VALUE 'R20',
c_r40 TYPE sysysid VALUE 'R40',
c_e10 TYPE sysysid VALUE 'E10',
c_e15 TYPE sysysid VALUE 'E15',
c_e20 TYPE sysysid VALUE 'E20',
c_e40 TYPE sysysid VALUE 'E40',
c_121 TYPE symandt VALUE '121',
c_300 TYPE symandt VALUE '300',
c_100 TYPE symandt VALUE '100',
c_120 TYPE symandt VALUE '120',
begin of change for generic entry 06-06-2007----
c_cc TYPE kostl VALUE 'CC',
c_as TYPE anln1 VALUE 'AS',
c_or TYPE aufnr VALUE 'OR'.
end of change for generic entry 06-06-2007----
-perpare the system and client for RFC----
CASE sy-sysid .
WHEN c_r10. "' R10'.
IF sy-mandt = c_120. " '120'.
CONCATENATE c_e10 c_clnt c_121 INTO v_destination.
ENDIF.
WHEN c_r15. " 'R15'.
IF sy-mandt = c_120. " '120'.
CONCATENATE c_e15 c_clnt c_300 INTO v_destination.
ENDIF.
WHEN c_r20. " 'R20'.
IF sy-mandt = c_300. " '300'.
CONCATENATE c_e20 c_clnt c_300 INTO v_destination.
ENDIF.
WHEN c_r40. " 'R40'.
IF sy-mandt = c_100. " '100'.
CONCATENATE c_e40 c_clnt c_100 INTO v_destination.
ENDIF.
ENDCASE.
Comment on logic ---------------------------------------------------*
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
value1 = value1
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 = v_app_obj_guid
TABLES
item_app_obj = item_approval_obj
Check what type of account is ie Order no/Internal order/ASSET.
if the account type is asset_no then responsible cost center is
found.
CLEAR: it_update_tab, wa_update_tab.
CASE criterion1 .
WHEN c_asset_no. " 'ASSET_NO'.
v_asset_no = value1.
CONCATENATE c_anln1 c_eq value1 " 'ANLN1' '=' value1
c_and c_bukrs c_eq value2 INTO wa_options-text
SEPARATED BY space.
APPEND wa_options TO it_options.
wa_fields-fieldname = c_anln1. " 'ANLN1'.
wa_fields-length = c_l12. " '000012'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
wa_fields-fieldname = c_kostl. " 'KOSTL'.
wa_fields-length = c_l10. " '000010'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
wa_fields-fieldname = c_bukrs. " 'BUKRS'.
wa_fields-length = c_l04. " '000004'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
CALL FUNCTION 'RFC_READ_TABLE' DESTINATION v_destination
EXPORTING
query_table = c_anlz " 'ANLZ'
delimiter = c_deli " '|'
TABLES
OPTIONS = it_options
fields = it_fields
data = 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 it_data table contains only one record
so no sorting required.
READ TABLE it_data INTO wa_data INDEX 1.
v_as_value = wa_data-wa+13(10).
ENDIF.
at the end of this if asset is passed its responsible
cost is obtained and is placed in value1 field.
CLEAR : wa_data , wa_options , wa_fields .
REFRESH: it_data , it_options , it_fields .
v_cost_ctr = v_as_value.
CONCATENATE c_kostl c_eq v_cost_ctr INTO wa_options-text
SEPARATED BY space.
APPEND wa_options TO it_options.
CLEAR: wa_fields.
wa_fields-fieldname = c_verak. " 'VERAK'.
wa_fields-length = c_l20. " '000020'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
CLEAR: wa_fields.
wa_fields-fieldname = c_kostl. " 'KOSTL'.
wa_fields-length = c_l10. " '000010'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
v_query_table = c_csks. " 'CSKS'.
set the initial value of v_asset_no by value1.
CLEAR: v_cost_ctr .
v_asset_no = value1.
WHEN c_cost_centre . " 'COST_CTR' or 'ASSET_NO'.
v_cost_ctr = value1.
CONCATENATE c_kostl c_eq v_cost_ctr INTO wa_options-text
SEPARATED BY space.
APPEND wa_options TO it_options.
CLEAR: wa_fields.
wa_fields-fieldname = c_verak. " 'VERAK'.
wa_fields-length = c_l20. " '000020'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
CLEAR: wa_fields.
wa_fields-fieldname = c_kostl. " 'KOSTL'.
wa_fields-length = c_l10. " '000010'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
v_query_table = c_csks. " 'CSKS'.
WHEN c_order_no. " 'ORDER_NO'.
v_order_no = value1.
CONCATENATE c_aufnr c_eq value1 INTO wa_options-text
SEPARATED BY space.
APPEND wa_options TO it_options.
CLEAR: wa_fields.
wa_fields-fieldname = c_user2. " 'USER2'.
wa_fields-length = c_l20. " '000020'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
CLEAR: wa_fields.
wa_fields-fieldname = c_aufnr. " 'AUFNR'.
wa_fields-length = c_l12. " '000012'.
wa_fields-offset = c_off0. " '000000'.
wa_fields-type = c_c. " 'C'.
APPEND wa_fields TO it_fields.
v_query_table = c_coas. " 'COAS'.
ENDCASE.
LOOP AT it_item_info INTO wa_update_tab
WHERE
zplant = value3 AND
zcost_ctr = v_cost_ctr AND
zorder_no = v_order_no AND
zasset_no = v_asset_no.
APPEND wa_update_tab TO it_update_tab .
ENDLOOP.
-begin of change for generic entry 06-06-2007----
it_update_tab may or may not contain the value as the per the data
maintainted. if initial then only generic value is maintained and the
the record need to be appended.
so the record which need to be appended shud be appended to
it_update_tab appropiatly with the amt of generic entry.
CLEAR : wa_update_tab.
CASE criterion1 .
WHEN c_asset_no.
READ TABLE it_item_info INTO wa_update_tab WITH KEY
zplant = value3
zasset_no = c_as."'AS'
IF sy-subrc = 0.
wa_update_tab-zasset_no = v_asset_no .
wa_update_tab-zlevel = 1.
APPEND wa_update_tab TO it_update_tab.
ENDIF.
WHEN c_cost_centre.
READ TABLE it_item_info INTO wa_update_tab WITH KEY
zplant = value3
zcost_ctr = c_cc."'CC'
IF sy-subrc = 0.
wa_update_tab-zcost_ctr = v_cost_ctr .
wa_update_tab-zlevel = 1.
APPEND wa_update_tab TO it_update_tab.
ENDIF.
WHEN c_order_no.
READ TABLE it_item_info INTO wa_update_tab WITH KEY
zplant = value3
zorder_no = c_or."'OR'
IF sy-subrc = 0.
wa_update_tab-zorder_no = v_order_no .
wa_update_tab-zlevel = 1.
APPEND wa_update_tab TO it_update_tab.
ENDIF.
ENDCASE.
end of change for generic entry 06-06-2007----
RFC to read table for finding the person responsible for the
cost center / order ie approver.
CALL FUNCTION 'RFC_READ_TABLE' DESTINATION v_destination
EXPORTING
query_table = v_query_table
delimiter = c_deli "'|'
TABLES
OPTIONS = it_options
fields = it_fields
data = 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.
CLEAR :wa_approval_def.
READ TABLE it_data INTO wa_data INDEX 1.
IF v_query_table = c_csks. " 'CSKS'.
v_apprv_cc = wa_data-wa+0(20).
wa_approval_def-zapprover = v_apprv_cc.
ELSE.
v_apprv_io = wa_data-wa+0(20).
wa_approval_def-zapprover = v_apprv_io.
ENDIF.
ENDIF.
find the number of record in the update table.
DESCRIBE TABLE it_update_tab LINES v_lines.
The updation of table runs only for the number of records
avaiable in the update table ie v_lines.
DO v_lines TIMES. " begin of do to approval index times.
CLEAR: it_approval_def.
v_apprv_count = v_apprv_count + 1.
wa_approval_def-zlevel = v_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 v_apprv_count > 1.
v_apprv_count = v_apprv_count - 1.
READ TABLE it_update_tab INTO wa_update_tab
WITH KEY zlevel = v_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
REFRESH : it_ac_container.
wa_ac_container-element = c_org_object. " 'ORG_OBJECT'.
wa_ac_container-tab_index = c_ind01. " '000001'.
wa_ac_container-elemlength = c_el06. " '006'.
wa_ac_container-type = c_c. " 'C'.
CONCATENATE c_agent_is_user wa_update_tab-zapprover
INTO wa_ac_container-value .
APPEND wa_ac_container TO it_ac_container.
CALL FUNCTION 'SWX_GET_MANAGER' DESTINATION v_destination
TABLES
actor_tab = it_actor_tab
ac_container = it_ac_container
EXCEPTIONS
nobody_found = 1
OTHERS = 2.
IF sy-subrc = 0.
READ TABLE it_actor_tab INTO wa_actor_tab WITH KEY
otype = c_agent_is_user.
wa_approval_def-zapprover = wa_actor_tab-objid.
ENDIF.
ENDIF.
v_apprv_count = v_apprv_count + 1.
ENDIF.
before updating populate the table it_approval_def
it_update_tab is read based on next v_apprv_count and
updates the approver and its value.
READ TABLE it_update_tab INTO wa_update_tab
WITH KEY zlevel = v_apprv_count .
IF sy-subrc = 0.
wa_approval_def-zplant = wa_update_tab-zplant.
wa_approval_def-zcost_ctr = wa_update_tab-zcost_ctr.
wa_approval_def-zorder_no = wa_update_tab-zorder_no.
wa_approval_def-zasset_no = wa_update_tab-zasset_no.
wa_approval_def-zvalue = wa_update_tab-zvalue.
APPEND wa_approval_def TO it_approval_def.
modify the table it_update_tab so that along with the custom
database table the table in use in this function module ie
it_update_tab also remain updated.
benefit is that if the modify to dtab fails. the process works fine.
MODIFY it_update_tab FROM wa_approval_def
TRANSPORTING zapprover
WHERE zlevel = wa_approval_def-zlevel AND
zvalue = wa_approval_def-zvalue.
now enqueue the table for modification.
CALL FUNCTION 'ENQUEUE_E_TABLE'
EXPORTING
tabname = c_tab_name " '/fir/rmm0bgst001'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
now modify the table, for updation of approver.
IF sy-subrc = 0.
MODIFY /fir/rmm0bgst001 FROM wa_approval_def.
if sy-subrc goes 0 commit work is called.
also the 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 = c_tab_name. " '/fir/rmm0bgst001'.
ENDIF.
once all done clear the work areas.
CLEAR : wa_approval_def-zlevel , wa_approval_def-zapprover.
ENDDO. " END OF DO STATEMENT.
SORT it_approval_def BY zlevel ASCENDING.
as per the logic for the different level of approval.
for second level of approval only records above 2 should be
present in the apprval table.
so for approval index = 2 delete the first record ie for zlevel = 1.
and for approval index = 3 delete first two records ie zlevel = 1 and
zlevel = 2. thus only one approval of zlevel 3 is left in the table
which is used to update the approval table.
IF approval_index = 2 .
DELETE it_approval_def INDEX 1.
ELSEIF approval_index = 3.
DELETE it_approval_def INDEX 1.
DELETE it_approval_def INDEX 1.
ELSEIF approval_index GT 3.
REFRESH : it_approval_def .
ENDIF.
for above 3 as approval index there shud be no enteries in the table.
so the table is refreshed and thus the approval table will not
contain anything.
approval_index is assigned to a varaiable
v_app_ind = approval_index.
v_app_ind is incremented for every next record so that approver is
assigned to next approval index.
beign of change 28th may 2007----
clear : v_app_ind .
v_app_ind = v_app_ind + 1.
LOOP AT it_approval_def INTO wa_approval_def.
wa_approval_table-approval_index = v_app_ind.
CONCATENATE c_agent_is_user wa_approval_def-zapprover
INTO wa_approval_table-approval_agent.
wa_approval_table-approval_description = approval_description.
wa_approval_table-approval_object_guid = v_app_obj_guid.
wa_approval_table-hide_items_not_responsible =
hide_items_not_responsible.
APPEND wa_approval_table TO approval_table.
v_app_ind = v_app_ind + 1 .
CLEAR: wa_approval_def.
ENDLOOP.
sort the approval table so that approvers come in sequence.
SORT approval_table BY approval_index.
ENDIF.
fill item table (which items belongs to which approval object)
wa_item_approval_table-approval_object_guid = v_app_obj_guid.
wa_item_approval_table-approval_item_guid = item_guid.
APPEND wa_item_approval_table TO item_approval_table.
CLEAR :wa_item_approval_table,wa_approval_table,it_update_tab.
ENDFUNCTION.
Thanks
Arghadip
[email protected]Hi,
You have to debug the entire system behaviour , the approval process using the second approver.
As first step , please check the security level of the second approver. Restart of workflow is based on the security level of the approver.
you can find the parameter for security level in the personalization tab of the user .
there is one function module which determines wether the workflow should be restarted (or) not.
i do not remember the exact name of the function module.
1)start transaction se37
2)enter bbpwflrestart*.
3) system will return a number of function modules , of them one function module determines wether to restart the workflow (or) not.
Please check what does the above function module return for the user and the shopping cart , there will be one parameter 'restart' which triggers the start -
WS14500015 - changes in second approval level
Hi all,
I'm fine tuning our two step item level approval workflow based on the WS14500015 standard flow. I've come across a problem which seems to be quite commonly discussed here, but I've also gotten the feeling that it may result in a catch-22 situation.
Scenario:
We're using a custom model, in which approvers are fetched based on the criteria for the items in the basket from a table and are assigned approval objects. Second level approval is based on product category, where approvers are assigned approval objects only if they are found for the particular category.
The issue arises when the second level approver alters the cart above the limits of the manager who approved in the initial level. We would like this to trigger a new chain of approvals, in which the manager responsible for the new value (or cost center) has to process the new cart from step 1, but as of now the cart is automatically approved following acceptance from the initial agent.
In general, it would be best to just not let the second level approver alter the items since he or she is not really authorized to do so, but I can't see a way of controlling this, since we can't restrict the customer from using the same manager as first and second level approver (in cases where alteration rights based on security level is concerned).
I've debugged the code, and confirmed that the objects are updated as expected, but the cart is still completely approved after a second level change.
Is it in scope to allow interlevel cart changes? Can I use the BBP_WFL_SECUR_BADI to change security level according to current approval step?
I would greatly appreciate a small summary of what is possible and what is not possible regarding this general scenario, and the recommended approach (if such exists).
Many thanks in advance!as in all own implementations you should copy the sap workflow to an own one, like Siddharth proposed. I didn't try this, i never needed second level approval so take what i say with a grain of salt. Copy the task that deals with the approval (the one showed in the UWL of the first manager) for the next approval (second manager). It should be then inserted in the workflow after the first approval. Between the original approval task and the second one you should insert a step where you call your own abap class to set the new processor of the workflow - copy the one used by SAP in the first approver task and remove what you don't need, modify the stuff that you could use.
You might be able to get the approval in the approval application using the BADI proposed by Siddharth but I am not sure using that BADI will create a UWL entry for the second approver.
@SAP: a propos the class used for workflow task methods--> stop creating final classes ! -
Using WF WS14000133 and WS14500015 in same approval process
Dear WF-Experts,
we want to use the WF WS14000133 and WS14500015 in same approval process in BAdi "Determination of Approver for n-Step Dynamic Approval Workflow".
For Example:
- Shopping cart with 3 items and total value 1000,. EUR
- first approval step financial for complete shopping cart cause total value
- second approval step for item 1 and 3 cause cost center
- not seperate approval for position 2
- third and final approval step for complete shopping cart cause total value
Thank you for your support
Best regards
Heinz-GeorgFor one approval process you can use only one workflow. But as you want some steps for the complete shopping cart and others on line item, use the line item approval. If you want to do the approval on "header" level just make sure all the items get the same approval object guid. That way all the items are assigned to the same approver and in that way you have a "header" approval.
I used this for a similar requirement and it works fine.
Regards,
Martin -
Email notification to approvers WS14500015
Hi all,
I'm on SRM 5.0 SRM_SERVER 550 SAPKIBKT12, we've configured WS14500015, this is working fine, I need to notify to approvers the responsability of each work item, which are the steps to have this functionality? please provide me where exactly step by step need to be configured or developed
Regards,
José Luis DHi Muthu
I have SC Approve Shopping Cart-AP Approver and all options selected: Rejection, Approval, Changes and Deletion of Application Object I execute report RSWUWFML or RSWUWFMLEC and the result is:
A Total of 1 Work Items Scanned.
No Work Items Found that Needed Forwarding.
What I missing?
Regards,
José Luis -
WS14500015 - n-step WF, item based
Hi Guys,
I'm developing an item based approval WF for my customer (WS14500015), using the BAdI BBP_WFL_APPR_WORKFLOW, Method GET_REMAINING_APPROVERS.
I have the situation, that a SC (BUS2121) is created with two items, the approver list looks as follows:
Itm1 Itm2
Appr1 EMPLOYEE_3 x x
Appr2 MANAGER_1 x
Appr3 MANAGER_3 x x
When the approval process comes two MANAGER_1 I expect that he only sees the item he is responsible for and not both. At least this is what the indicator 'HIDE_ITEMS_NOT_RESPONSIBLE' implies.
In my LT_APPROVER table I have 5 entries, they all point to the right approval object ID.
Does anyone have a clue what is missing or which additional indicator needs to be set?
Kind regards,
Thomashi,
I dont think this is possible with the Header level approval workflow!You may need to think abt the item level approval workflow to distinguish between the items to be sent to the different approvers.
BR,
Disha. -
Changes to Std Workflow - WS14500015
Hi friends,
I want to make changes to std workflow WS14500015. Before approval process I want to first send a workitem to a person say 'manager1' who will change a SC field. Only when he changes it and approves, then only should the remaining wfl process continue otherwise the workitem should be sent to creator for resubmission. Can anyone please help me out with this???its very urgent.
Please help out!!!Hi,
See the foll code for reference:
method if_ex_bbp_wfl_approv_badi~get_remaing_approvers.
Business objects (local)
constants:
c_shop type crmt_subobject_category_db value 'BUS2121',
c_step1 type bbp_step_description value 'First approval step',
c_step2 type bbp_step_description value 'Second approval step'.
*variables for holding the runtime SC values
data : w_total type reqhead-total_value_long,
w_group type zgroup-zprodgrp,
w_category type zgroup-zprodcat,
w_ccenter type zapprovers-zccnetre.
data:
*Header data table
wa_header type bbp_pds_sc_header_d,
*approver structure
wa_approver type bbp_wfl_approval_table_badi,
item structures
it_item type table of bbp_pds_sc_item_d,
wa_it_item like line of it_item,
accounting structures
it_account type table of bbp_pds_acc,
wa_it_account like line of it_account.
*tables for holding the final list of approvers bsed on the SC criteria.
data : it_rule type standard table of zrule,
wa_it_rule like line of it_rule,
it_approvers type standard table of zapprovers,
wa_it_approvers like line of it_approvers.
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.
clear w_total.
if sy-subrc = 0.
*move the total value fo SC to w_total.
move wa_header-total_value to w_total.
endif.
clear : w_category,
w_ccenter,
w_group.
*reading the item table for the Product category
*Here the first record is read only since all the items will necessarily
*have the same Product category
read table it_item into wa_it_item index 1.
if sy-subrc = 0.
*set the product category
move wa_it_item-category_id to w_category.
endif.
Found out to which cost center the items belong
read table it_account into wa_it_account
with key p_guid = wa_it_item-guid.
if sy-subrc = 0.
move wa_it_account-cost_ctr to w_ccenter.
endif.
*to select the Proper Product Group from the maintained Z-table
*ZGROUP for the Product category of the SC items.
select single zprodgrp
from zgroup
into w_group
where zprodcat = w_category.
if sy-subrc = 0.
clear it_rule.
refresh it_rule.
*selecting the proper approval Levels for the Product Group retrieved from
*the previous step as well as based on the range in which the total value
*of the shopping cart falls in form the maintained Z-table ZRULE
select zrule
zprodgrp
zlevel
into corresponding fields of table it_rule
from zrule
where zprodgrp = w_group
and zval1 le w_total
and zval2 ge w_total.
if sy-subrc = 0.
clear it_approvers.
refresh it_approvers.
*selecting the List of Approvers based on the previously retrieved
*Product Group,Approval Level and the Cost Center value from the
*maintained Z-table ZAPPROVERS
if it_rule[] is not initial.
select zindex
zrule
zprodgrp
zlevel
zccnetre
zuser
zname
into corresponding fields of table it_approvers
from zapprovers
for all entries in it_rule
where zrule = it_rule-zrule
and zprodgrp = it_rule-zprodgrp
and zlevel = it_rule-zlevel
and zccnetre = w_ccenter.
endif.
endif.
endif.
if w_total eq 0.
no_further_approval_needed = 'X'.
endif.
*Based on the Current approval step,the values for the corresponding
*Approvers is exported
clear approval_table.
refresh approval_table.
*Actual approval index represents the current WF approval step
case actual_approval_index.
*WF not started
when 0.
*At each and every approval step we need to pass the Approvers from that step onwards
loop at it_approvers into wa_it_approvers where zindex = 1.
wa_approver-approval_index = 1.
wa_approver-approval_agent = wa_it_approvers-zuser.
wa_approver-name = wa_it_approvers-zname.
wa_approver-approval_description = c_step1.
append wa_approver to approval_table.
endloop.
loop at it_approvers into wa_it_approvers where zindex = 2.
wa_approver-approval_index = 2.
wa_approver-approval_agent = wa_it_approvers-zuser.
wa_approver-name = wa_it_approvers-zname.
wa_approver-approval_description = c_step2.
append wa_approver to approval_table.
endloop.
*1st step approval
when 1.
loop at it_approvers into wa_it_approvers where zindex = 1.
wa_approver-approval_index = 1.
wa_approver-approval_agent = wa_it_approvers-zuser.
wa_approver-name = wa_it_approvers-zname.
wa_approver-approval_description = c_step1.
append wa_approver to approval_table.
endloop.
loop at it_approvers into wa_it_approvers where zindex = 2.
wa_approver-approval_index = 2.
wa_approver-approval_agent = wa_it_approvers-zuser.
wa_approver-name = wa_it_approvers-zname.
wa_approver-approval_description = c_step2.
append wa_approver to approval_table.
endloop.
2nd step approval
when 2.
loop at it_approvers into wa_it_approvers where zindex = 2.
wa_approver-approval_index = 2.
wa_approver-approval_agent = wa_it_approvers-zuser.
wa_approver-name = wa_it_approvers-zname.
wa_approver-approval_description = c_step2.
append wa_approver to approval_table.
endloop.
when others .
no_further_approval_needed = 'X'.
endcase .
endcase.
endmethod.
The above code is for the header level approval but in your case you will have to modify the code for item level approval.
The field "actual_approval_index" is the Approval step while the field "approval_index" is the levels of approval for each approval step.i.e. Total no of approvals can be 3 but at each indidvidual aproval step there can be 2 approvals.
Also you just need to populate the APPROVAL_TABLE and not the approval_administrators table for Approvers.
BR,
Disha.
P. S. Pls reward points for useful answers. -
Line Item Level Approval For SC-SRM7.02-WS14500015
Hi Expert,
I am using workflow template WS14500015 for line item level approval.i have few doubts on this
i am using cost center based approval, so if the 1st line item is approved will it generate a PO or will it wait for the entire shopping cart to be approved.Hi Mano,
Are you using application controlled workflow or process controlled workflow?
For process controlled workflow you can refer to the SRM 7.0 Workflow guide:
https://websmp108.sap-ag.de/instguides > sap business suite and applications> SRM 7.0 > Workflow Guide - SAP SRM 7.0 and Configuration guide.
Page 16, Approval Processes in SAP SRM; you will understand possibilities of SRM 7.0 process controlled workflow and then decide which one you need.
Also refer to 7 Appendix B: Approver Determination Strategies in the Standard
This has few example classes/BADI implementation for agent determination which you can refer to.
Regards,
Ashish -
Hi All,
I need to some help clarifying how WS14500015 in SRM5 works. I need to be able to setup different approval categories that are based on either the shopping cart item material groups or account assignments.
For example, all shopping cart items charged to cost centers will be assigned to one approval category while items charged to something like a maintenance order are assigned to a different approval category. Then depending on the value of each category have the ability for N-step approval steps
The available documentation on WS14500015 states that you can define different approval categories but whats not clear is that can each category have N-step approval steps.
If I cant setup the BADI BBP_WFL_APPROV_BADI method GET_REMAINING_APPROVERS code, Ill need to add program logic to the shopping cart to limit what can be ordered via the shopping cart at any one time.
Regards,
Jerry MartinekHi Jerry,
In BADI BBP_WFL_APPROV_BADI you can have GUID_ID for a shopping cart. Using this guid id you can read all details ( including account assignments etc) using function module BBP_PD_SC_GETDETAIL. Then you will have to add your logic to set up different approval categories.
Hope this will help.
Regards.
Pras -
How can I change the initial value of the field approve_or_reject?
Hello Workflow Gurus
We are using SRM 5.00(SRM SERVER 550) and as per the requirement, I have to make the Reject radio button as default checked on the Approver's screen.
We are using the SAP Standard Workflow WS14500015.
I found out the Standard task TS14508044 (SC approval per Item)which has one field in its container i.e. approve_or_reject ,based on the Initial value of this field , the radio button is behaving...
approve_or_reject EQ 0 i.e. Approve
approve_or_reject EQ 1 i.e. Reject
Now my requirement is to change the initial value of this field from 0 to 1 so that Reject radio button comes as checked by default into this standard SAP workflow task TS 14508044...
Kindly help me and let me know the procedure to change this.
PLEASE LET ME KNOW THAT IS IT WISE TO MAKE THE CHANGES INTO STANDARD SAP WORKFLOW ???
Thanks and regards
Ankur Goyal
09823448654Well Iam not much sure about how you are trying to approve the shopping cart workitem b ut last week i faced a similar issue while apporving the workitems I was able to update the contianer element Apporve_or_reject element by using the FM BBP_PDH_WFL_WI_APPROVE and BBP_PDH_WFL_WI_REJECT ... These two fm will take the responsibility of updating the element with respective value as, if you approve the it will be populated with 0 and if you reject the the element will be updated with 1....
Please check the thread where I updated the thread in [SRM Workflows|Problem while approving SC from Blackberry !;
PLEASE LET ME KNOW THAT IS IT WISE TO MAKE THE
CHANGES INTO STANDARD SAP WORKFLOW ???
Modifying the standard workflow is not recommended..... -
Add "cost center" query to a start condition?
Hi there,
we got a new requirement for one of our plants.
We're on SRM 5.0 classic scenario.
Is it possible to add a "cost center" query to a specific start condition (SWB_PROCUREMENT) of a workflow?
E.g. if a user uses cost center 4711 for a shopping cart item a specific cost center responsible xyz should approve this item.
If the user uses another cost center 4712 for a second item in this shopping cart this item should be approved by another cost center responsible abc.
Is that somehow possible ?
So far I did not find a suitable expression for cost center.
Thanks in advance for your answers.
Best regards,
HenningHi Masa,
thanks for your answer. Perhaps you also have a hint for the following:
I can't really find in the metioned thread or in note 731637 what happens if a SC with several items is partially approved.
Example:
SC with 3 items:
item 1 cc 1000
item 2 cc 2000
item 3 cc 1000
Let's say item 1+3 have been approved by the approver found by badi and WS14500015. Is a PO or a purchase requisition created in backend? Or is it only created after the whole SC has been approved (i.e. also item 2).
Thanks for a hint and best regards,
Henning -
Hi All,
I have line item based approval workflow WS14500015. My shopping cart has multiple line items each awaiting approval from multiple approvers.
Now my requirement is when any approver approves his line items , that particular line items should not be allowed for changes even though the shopping cart has status awaiting approval coz others line items are still awaiting approval .
Is this possible i.e user should be able to make changes to unapproved line items abut not approved line items .
Can i user badi BBP_WFL_SECURE_BADI for this ?? Please if anyone has already done this please share your inputs .
Thanks in advance
Iftekhar AlamHi Alam,
have you checked the APPROVAL_HISTORY_TABLE and ITEM_APPROVAL_HISTORY_TABLE? Here you will receive information on already approved items and the current approval process.
Kind regards,
Thomas -
Vendor name is deleted after the approver changes the product category.
Hello,
We have implemented workflow WS14000044(Completion by Purchaser) and
WS14500015(Item-Based Main WF).
At workflow WS14500015 level, when the approver changes the product
category, the vendor name is deleted.The previous validation allows the
PO creation , But the PO is created without vendor.
Furthermore under transaction process purchase orders 'BBP_POC' the
purchaser can not access in change mode to the vendor field in order to
add a vendor.
How can we give access in change mode to the vendor field for purchaser in transaction 'BBP_POC' ?
Regards,
LinaHi,
Which SRM version are you working on?
Please see if the foll notes help:
<b>801591 Source determination after item change</b>
881346 Vendor incorrectly deleted
873972 Sources of supply in the shopping cart with catalog items
908178 Transferring reference: Deleted vendor
Note 829652 - Completion workflow in shopping cart: Vendor
789087 Changed product category: Vendor not deleted
BR,
Disha.
<b>Pls reward points for useful answers.</b> -
How do I know which workflow has been activated for my SHC in SRM
Hi Experts ,
Can anyone tell me where to find which workflow has been activated to my Shopping cart in the SRM. so that it creates a PO in the backend
To create a PO in the back end it should have a WF actiavted.
do we can have only always one WF activated or can we have multiple WFs depending on the conditions for one scenario
Please suggest me
Regards
Sairam.Cross-Application Basic Settings u2192 SAP Business Workflow u2192 Perform Task-Specific Cusomizing
SAP u2192 SRM u2192 SRM-EBP u2192 SRM-EBP-WFL
- WS10000060 (Automatic approval)
- WS10000129 (One-step approval)
- WS10000031 (Two-step approval)
- WS10000276 (Approval single-level over limit)
- WS14000044 (Completion by purchaser)
- WS14000109 (Approval n-step over value limit)
- WS14500015 (Item approval)
- WS14000045 (Delete shopping cart after application error)
- WS10000202 (Transfer purchase requisition)
- WS10000215 (Resubmission of shopping cart by administrator)
You need to check Event linkage is either Activated or Deactivated aor these above work flow . I fit is activated it shows green light.
Muthu
Edited by: muthuraman on Jul 29, 2008 2:38 PM -
Released Notification to Approver dumps when trying to display
Hi Guys!
We have in place N Step approval workflow and configured the system that approvers get a notification when the shopping cart is released.
This works fine.
But when the recipeints open their Inbox this notification is executable (What function is behind this?) When the recipients click on the notification in their Inbox the error message ".....BC/BSP/SAP/SMART_FORMS/DEFAULT.CSS is not available". Even when Service SMART_FORMS was activated in SICF the error message persists. I can find the Service SMART_FORMS but I cannot fine "DEFAULT.CSS". How can I fix this? What function is expected when the notification will be executed?
Rgds.
DieterHi Muthu,
that was very helfull. I get this message when a notification (not workitem!) is sent to the approver when the shopping cart is released. This is a standard task within WS14500015 or WS14500015. I don't know the the task number because its weekend and I don't have access to the system now, can give you details on Monday
But I'm still not clear what I have to do. I guess my css is "DEFAULT.CSS" the same as error message populates it but its unclear to me. How can I find this out? Does that mean I have to develop something or is it just configuration in the ICF Service "SMART_FORMS. I don`t understand your link to SAP Help properly because I don`t have experience in Smart Forms. Any advice is appreciated. What I think is that when you click on that notification the details of the released shopping cart should be displayed. Therfore a Web enabled Smart Form is used. We did not make any modifications to this task it'sSAP standard procedure and I would have expected that it works without any development.
Rgds.
Dieter
Maybe you are looking for
-
Label Data View in Material Master
Dear Team, Despite of performing all below standerd steps, i am not able to view Label Data view in Material Master. pls guide steps performed. 1. Check whether the screen sequence SP exists in Customizing for the Material Master under Define Structu
-
This morning my Superdrive on my 2.7 GHz Intel Core i5 Mac won't recognize my Sony CD-R 700MB blank disc. It's worked before. Yesterday, I burned a memorex DVD+R with no problem. Is this something that can be fixed by me through some software twea
-
Materials upload: short description in french not properly transferred
hi everybody I am doing material upload, its working well its onlt that the materials french and german descriptions are not properly transferred e.g. é is transferred as a hash sign Can anybody help me on how to handle these special characters thank
-
Can you use an Irish bought ipad in Australia?
Can you use an Irish bought ipad in Australia?
-
SQL Developer is AutoCommiting
version 1.0.0.15.57 build MAIN-15.57 using the JDBC driver. Autocommit in SQL Worksheet is unchecked I noted the application was autocommiting. I updated a row .. saw it was changed with a select then in worksheet did a rollback but the row did not c