Matrix App Creation Instructions:
- If the app IQX_CAPEX_DEMO_MATRIX does NOT exist in the system you are working in, please create a new app called IQX_CAPEX_DEMO_MATRIX and import the following XML file.
IQX_CAPEX_DEMO_MATRIX_000001.xml Use the File → Copy menu option to copy this to a new application.
Naming Convention
Name your new app by appending _MATRIX to the end of the original app name.
e.g.
Original App: IQX_CAPEX_DEMO
Matrix App: IQX_CAPEX_DEMO_MATRIX
Add an Implementation class and set the Type Declaration to Public.
No methods need to be implemented in the implementation class. The purpose is so that the data model can be created as a type in the class that can then be accessed by the Main Application's ABAP exits.
- You must then create a structure for each Role that you are going to allow users to configure. In the following example you can see that we are allowing for roles: FIController, GroupIT, CFO, CEO.
To create a new Role, simply use the copy and paste functionality on one of the existing roles and rename both the Table and Structure accordingly. - If your approval matrix depends on another value (e.g. Cost Center, Company Code), then you must add that field(s) directly into the Rows Struct.
- Once your Data Model is correct, you need to adjust the configuration of the table so that the necessary columns are displayed. Note that if you have added additional fields (e.g. Cost Center), those should appear as the first columns in the table.
- For each of the roles, you should add a Button to the table Cells collection. You must configure the following properties:
- Actions if pressed: Script:openApproversPopover(evt)
Advanced: cdata:path="FIController"
"FIController" in this example configures the button to the management of users for the structure in the Data Model called FIController. You will change FIController to match the role you are working with.
Configuring the Main Application to Leverage the Matrix Configuration:
- Go into the Properties of the app and click the Agent Determ. button
Enter the name of the Matrix app, specify an App Key and click Save.
The App Key value should be the value that is saved in the instance of the Matrix Configuration App. As a default it can be V1 and can be increased (if necessary) as the configuration evolves over time. To set this up, open an instance of the Matrix app, supply a value in the Key input field and click Submit. This saves an instance of the Matrix configuration that will be used to configure the main application.
Implement the Determine approvers for Roles ABAP exit.
METHOD determine_approvers_for_role. FIELD-SYMBOLS: <fs_approvers> LIKE LINE OF ct_approvers. DEFINE add_agent. APPEND INITIAL LINE TO ct_approvers ASSIGNING <fs_approvers>. <fs_approvers>-approval_level = i_level. <fs_approvers>-node_id = i_node. <fs_approvers>-role_id = i_role. <fs_approvers>-zinstance = i_instance. <fs_approvers>-objty = ls_agent-objty. <fs_approvers>-objid = ls_agent-objid. END-OF-DEFINITION. MOVE-CORRESPONDING CR_DATA TO GS_DATA. * Other Approvers are retrieved from Role Determination Configuration App IF io_role_determ_app_data IS SUPPLIED. IF io_role_determ_app_data IS NOT INITIAL. FIELD-SYMBOLS: <fs_fdata> TYPE any. DATA: ls_data TYPE zcl_mac_capex_matrix=>t_data. "<-Implemtation Class of Role Determination App here. T_DATA must be Public ASSIGN io_role_determ_app_data->* TO <fs_fdata>. MOVE-CORRESPONDING <fs_fdata> TO ls_data. DATA: ls_rows LIKE LINE OF ls_data-rows, ls_agent LIKE LINE OF ls_rows-sourcing. LOOP AT ls_data-rows INTO ls_rows WHERE BusinessUnit = gs_data-OperatingUnit. "where... CASE i_role. WHEN 'Sourcing'. LOOP AT ls_rows-sourcing INTO ls_agent. add_agent. ENDLOOP. WHEN 'Fin Support'. LOOP AT ls_rows-finsupport INTO ls_agent. add_agent. ENDLOOP. WHEN 'Fin Partner'. LOOP AT ls_rows-finpartner INTO ls_agent. add_agent. ENDLOOP. WHEN 'Director'. LOOP AT ls_rows-director INTO ls_agent. add_agent. ENDLOOP. WHEN 'VP'. LOOP AT ls_rows-vp INTO ls_agent. add_agent. ENDLOOP. WHEN 'BU Head'. LOOP AT ls_rows-buhead INTO ls_agent. add_agent. ENDLOOP. WHEN 'CFO'. LOOP AT ls_rows-cfo INTO ls_agent. add_agent. ENDLOOP. WHEN 'CEO'. LOOP AT ls_rows-ceo INTO ls_agent. add_agent. ENDLOOP. WHEN 'Board'. LOOP AT ls_rows-board INTO ls_agent. add_agent. ENDLOOP. ENDCASE. ENDLOOP. ENDIF. ENDIF. ENDMETHOD.