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-Georg

    For 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 D

    Hi 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,
    Thomas

    hi,
    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

  • WS14500015 in SRM5

    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 what’s not clear is that can each category have N-step approval steps.
    If I can’t setup the BADI BBP_WFL_APPROV_BADI method GET_REMAINING_APPROVERS code, I’ll 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 Martinek

    Hi 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
    09823448654

    Well 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,
    Henning

    Hi 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

  • Line item based approval

    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 Alam

    Hi 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,
    Lina

    Hi,
    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.
    Dieter

    Hi 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

  • Superdrive won't work

    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