cancel
Showing results for 
Search instead for 
Did you mean: 

SC Workflow: Runtime Actual Approval determination

Former Member
0 Kudos

Hi all,

I want to know who approved the Shopping Cart (SC) in runtime within the BADI so that comparing his Approval Limit with the cost of SC I can decide whether to skip or go for next approval levels.

Please help how to find it out. I have checked the history table but it contains a field "Type" whose possible values can only be either "changed" or "insert" and does not indicate "Approve" status for any agent....

Please help,

Thanks

Sangharsh

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi

Try this BADI - BBP_WFL_APPROV_BADI.

<u>BBP_WFL_APPROV_BADI</u>

Determin. Approv. for n-Level. Dynamic Approval WFL

You need to make a logic in your case.

<u>Refer to the sample BADI logic.</u>

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 is the 2nd example of the BADI implementation that includes
* dynamic spending limit approval for PO

  INCLUDE <swfcntn01>.                  "Workflow

  DATA:
   ls_header                   TYPE bbp_pds_sc_header_d,
   ls_approver                 TYPE bbp_wfl_approval_table_badi,
   lv_approval_index           TYPE swh_numc10,
   lv_guid                     TYPE crmt_object_guid,
   lo_new_instance             TYPE swf_bor_object,
   lt_approval_agent_obj       TYPE TABLE OF swf_bor_object,
   ls_wa_agent_obj             TYPE swf_bor_object,
   lo_user                     TYPE swf_bor_object,
   ls_approval_agent           TYPE bbp_wfl_approval_table,
   lv_index                    TYPE syindex,
   lv_usr01_name               TYPE ad_namtext,
   lt_approval_init_agents     TYPE TABLE OF bbp_wfl_approval_table,
   ls_wa_approval_init_agents  TYPE bbp_wfl_approval_table,
   ls_wa_approval_history      TYPE bbps_wfl_history_line_badi.

* Business objects type (local constants)
  CONSTANTS:
   c_po            TYPE crmt_subobject_category_db VALUE 'BUS2201',
   c_biddingdoc    TYPE crmt_subobject_category_db VALUE 'BUS2200',
   c_quotation     TYPE crmt_subobject_category_db VALUE 'BUS2202',
   c_grse          TYPE crmt_subobject_category_db VALUE 'BUS2203',
   c_invoice       TYPE crmt_subobject_category_db VALUE 'BUS2205',
   c_shop          TYPE crmt_subobject_category_db VALUE 'BUS2121',
   c_contract      TYPE crmt_subobject_category_db VALUE 'BUS2000113',
   c_salescontract TYPE crmt_subobject_category_db VALUE 'BUS2000114',
   c_avl           TYPE crmt_subobject_category_db VALUE 'BUS2206',
   c_invoicegrp    TYPE crmt_subobject_category_db VALUE 'BUS2207',
   c_vendor_obj    TYPE crmt_subobject_category_db VALUE 'BUS1006200'.

*** workflow approval states
  CONSTANTS:
   c_wf_approved           TYPE  bbp_wfl_approvalstate VALUE '0',
   c_wf_rejected           TYPE  bbp_wfl_approvalstate VALUE '1',
   c_wf_not_instanced      TYPE  bbp_wfl_approvalstate VALUE '2',
   c_wf_changed            TYPE  bbp_wfl_approvalstate VALUE '3',
   c_wf_partialapproved    TYPE  bbp_wfl_approvalstate VALUE '4',
   c_wf_step_in_process    TYPE  bbp_wfl_approvalstate VALUE '5'.


  CLEAR: lt_approval_init_agents[], lt_approval_agent_obj[],
         ls_wa_agent_obj, ls_approval_agent, ls_wa_approval_init_agents,
         ls_wa_approval_history.

* -------------------------------------------------------------------- *
* map input data to local data
* map char32 to raw16
  MOVE guid TO lv_guid.


  CASE object_type.

* ======================   shopping cart  =========================== *
    WHEN c_shop.
*** get the details of the shopping cart
      CALL FUNCTION 'BBP_PD_SC_GETDETAIL'
        EXPORTING
          i_guid      = lv_guid
          i_object_id = object_id
        IMPORTING
          e_header    = ls_header.

      IF ls_header-total_value < 490000000.
*** 2 step approval
        CASE actual_approval_index.
          WHEN 0.
            ls_approver-approval_index = 1.
            ls_approver-approval_agent = 'USMANAGER1'.
            ls_approver-name = 'Arthur Manager1'.
            ls_approver-approval_description = 'First approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.

          WHEN 1.
            ls_approver-approval_index = 1.
            ls_approver-approval_agent = 'USMANAGER1'.
            ls_approver-name = 'Arthur Manager1'.
            ls_approver-approval_description = 'First approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
          WHEN 2.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
          WHEN OTHERS.
            no_further_approval_needed = 'X'.
        ENDCASE.
      ELSE.
        CASE actual_approval_index.
*** 3 step approval
          WHEN 0.
            ls_approver-approval_index = 1.
            ls_approver-approval_agent = 'USMANAGER1'.
            ls_approver-name = 'Arthur Manager1'.
            ls_approver-approval_description = 'First approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 3.
            ls_approver-approval_agent = 'USMANAGER3'.
            ls_approver-name = 'Peter Manager3'.
            ls_approver-approval_description = 'Third approval step'.
            APPEND ls_approver TO approval_table.
          WHEN 1.
            ls_approver-approval_index = 1.
            ls_approver-approval_agent = 'USMANAGER1'.
            ls_approver-name = 'Arthur Manager1'.
            ls_approver-approval_description = 'First approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 3.
            ls_approver-approval_agent = 'USMANAGER3'.
            ls_approver-name = 'Peter Manager3'.
            ls_approver-approval_description = 'Third approval step'.
            APPEND ls_approver TO approval_table.

          WHEN 2.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER2'.
            ls_approver-name = 'Arnold Manager2'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.
            ls_approver-approval_index = 2.
            ls_approver-approval_agent = 'USMANAGER4'.
            ls_approver-name = 'Thomas Manager4'.
            ls_approver-approval_description = 'Second approval step'.
            APPEND ls_approver TO approval_table.

            ls_approver-approval_index = 3.
            ls_approver-approval_agent = 'USMANAGER3'.
            ls_approver-name = 'Peter Manager3'.
            ls_approver-approval_description = 'Third approval step'.
            APPEND ls_approver TO approval_table.
          WHEN 3.
            ls_approver-approval_index = 3.
            ls_approver-approval_agent = 'USMANAGER3'.
            ls_approver-name = 'Peter Manager3'.
            ls_approver-approval_description = 'Third approval step'.
            APPEND ls_approver TO approval_table.
          WHEN OTHERS.
            no_further_approval_needed = 'X'.
        ENDCASE.
      ENDIF.


* ======================  purchase order ============================= *
    WHEN c_po.

*** 1) Evaluate the list of spending limit approvers from BOR attributes
      swf_create_object  lo_new_instance  object_type   guid.
      swf_get_property   lo_new_instance 'SLManagerUserList'
                                          lt_approval_agent_obj[].
      lv_index = 1.
      LOOP AT lt_approval_agent_obj INTO ls_wa_agent_obj.
        swf_get_property ls_wa_agent_obj 'User' lo_user.
        swf_get_property lo_user 'NameWithLeadingUS'
                                ls_approval_agent-approval_agent.

        swf_get_property lo_user 'Name' lv_usr01_name.
        MOVE lv_usr01_name TO ls_approval_agent-name.

        ls_approval_agent-approval_index = lv_index.
        ls_approval_agent-approval_branch = 1.
        ls_approval_agent-initial_index = lv_index.
        ls_approval_agent-initial_agent =
                             ls_approval_agent-approval_agent.
        ls_approval_agent-approval_state = c_wf_not_instanced.
        APPEND ls_approval_agent TO lt_approval_init_agents.
        lv_index = lv_index + 1.
      ENDLOOP.

*** 2) Evaluate the list of remaining approvers. The actual approver
***    belongs to the list as well.
      LOOP AT approval_history_table INTO
                   ls_wa_approval_history WHERE type <> 'I'.
        LOOP AT lt_approval_init_agents INTO
                                  ls_wa_approval_init_agents.
          IF ls_wa_approval_init_agents-approval_index LT
                    ls_wa_approval_history-approval_index.
            DELETE lt_approval_init_agents.
          ENDIF.
        ENDLOOP.
      ENDLOOP.
* fill the import table
      CLEAR ls_wa_approval_init_agents.
      LOOP AT lt_approval_init_agents INTO
                                ls_wa_approval_init_agents.
        CLEAR ls_wa_approval_history.
        MOVE-CORRESPONDING ls_wa_approval_init_agents TO
                                          ls_wa_approval_history.
        APPEND ls_wa_approval_history TO approval_table.
      ENDLOOP.

      IF approval_table[] IS INITIAL.
        no_further_approval_needed = 'X'.
      ENDIF.

* ========================  contract ================================ *
    WHEN c_quotation.

      IF lv_index LT 2.

        ls_approval_agent-approval_description = '1st Approval'.

        ls_approval_agent-approval_index = 1.
        ls_approval_agent-approval_branch = 1.
        ls_approval_agent-initial_index = 1.
        ls_approval_agent-name = 'Hennes Kaempfer'.
        ls_approval_agent-approval_agent = 'USMANAGER4'.
        ls_approval_agent-approval_state = c_wf_not_instanced.
        APPEND ls_approval_agent TO approval_table.

        ls_approval_agent-approval_index = 1.
        ls_approval_agent-approval_branch = 1.
        ls_approval_agent-initial_index = 1.
        ls_approval_agent-name = 'Paul Reiter'.
        ls_approval_agent-approval_agent = 'USMANAGER5'.
        ls_approval_agent-approval_state = c_wf_not_instanced.
        APPEND ls_approval_agent TO approval_table.

        ls_approval_agent-approval_description = '2nd Approval'.

        ls_approval_agent-approval_index = 2.
        ls_approval_agent-approval_branch = 1.
        ls_approval_agent-initial_index = 2.
        ls_approval_agent-name = 'Dieter Mueller'.
        ls_approval_agent-approval_agent = 'USMANAGER33'.
        ls_approval_agent-approval_state = c_wf_not_instanced.
        APPEND ls_approval_agent TO approval_table.

      ELSE.
        no_further_approval_needed = 'X'.
      ENDIF.

  ENDCASE.

ENDMETHOD.

Regards

- Atul

Former Member
0 Kudos

Atul,

I checked with already approved SC, the BO BUS2121's attributes: SLMANAGERUSER

and SLMANAGERUSERLIST don't give me the list of approvers who already have approved it...

You can also tell me any tables name where I can check it...

Thanks

Sangharsh