Skip to Content

Applies to:



SAP customers who use SAP BPC for S/4HANA for financial planning in Management Accounting want to control the overall planning process by a guided work flow. This document describes the use of Business Process Flow (BPF) from SAP BPC for S/4HANA and the combined synchronized use of BPF and Work Status (WS) within the embedded Business Planning and Consolidation (BPC). The description bases on a step-by-step example to demonstrate this integration of WS with BPF.


Business Scenario

SAP Business users always want to have simple and robust financial process. To design such process, SAP provides Business Process flow (BPF) to develop business processes in BPC that guides through a sequence of tasks. BPF of SAP BPC is used as process flow tool that interacts with the WS feature of SAP BPC to demonstrate by means of an example how a planning process can be controlled.

This document describes the Expense planning for two cost centers. The planning is done by a performer and a reviewer for each cost center. They are defined as performer and reviewer for the cost centers using an external dimension. The owner and manager who control the work flow are determined by a BAdI that takes the performer and reviewer of the cost center.


Step-by-Step Procedure

This document describes how you can combine the BPF process steps/activities with different states of the work status. The states of the work status lock data slices defined by the owner dimension and other dimensions in the planning cube. The planning model in BPC Admin that comprises the planning cube is linked to the Analysis Office workbook.

See also help for SAP BPC


Step 1: Create an Environment

Call SAP BPC in Web Client: Open a browser and connect to the URL http://<PC_server:port>/sap/epm/bpc/web/, where <PC_server:port> is the server name or IP address and port number of the Business Planning and Consolidation application location.

If you have no environment to log on then create your own environment by pressing on the environment name in the footer line. The “Connect to Environment” dialog comes up and press button “Manage All Environments”.

On the following screen press button “Create” in header line and enter environment ID and description.

Step 2: Create a Model

Once your environment is created then create a model that only contains BW info provider as presented in the following picture.

Enter Model name and description and Select Model type as “Planning”.

Add Infoprovider /ERP/SFIN_R01 in the model.

Step 3: Create external dimension in backend system

Instead of using the internal dimension /ERP/COST_CNTR of the info provider /ERP/SFIN_R01 to derive performer and review, you can use an external dimension ZCOSTCNTR for the cost center whereas you can keep /ERP/COSTCNTR as BPF driver dimension. ZCOSTCNTR dimension has the advantage that you can configure its structure and add additional attributes beside the performer as example the reviewer.

Call transaction RSD1. Enter info object ZCOSTCNTR and press create button:

Select Tab General

ZCOSTCNTR has Data Type CHAR and Length 10.

Select tab Master Data/Texts

Master Data Access is set to “Default” and flag “With Texts” is marked.

Select tab Attributes:

Enter attributes /ERP/REVIEWER and /ERP/SENDER(Performer) that you have created before (see below) and activate.

Advantage of the above two char is, these are linked with user master via standard class (CL_FCLM_MD_USER), so user can’t make typo error while maintaining the master data of ZCOSTCNTR.

You can add additional attribute for Owner and Manager teams

Step 4: Maintain master data of ZCOSTCNTR

At least capture all the cost centers you want to use in your process template. Assign a performer and reviewer for each cost center: On tab “Texts” you can enter a short description for each cost center. Finally press button “Save and Activate”.

Step 5: Create a Work Status

From the administration view select under “Work Status” “Work Status Configuration”. You get a list of models. Click on the model to enter the work status configuration. The configuration consists of a work state list, locking dimensions as owner dimension and other dimensions and finally the owner definition.

“Work State List” is defined by the user. In this example it consists of the following 4 states:

Owner dimension is the info object cost center (/ERP/COSTCNTR)1. Select via F4 value help a hierarchy that is defined in the backend system (in this example H1 is chosen from controlling area C010). Important is only that the selected hierarchy contains the cost centers you have chosen as driving dimensions from the external dimension when you defined your activity.

Mark owner “Define by Customer Implementation” because info object /ERP/COST_CNTR has no attribute for the owner.

The owner of the cost center can be determined by the performer attribute of the external dimension cost center (ZCOSTCNTR). The manager for the cost center can be determined by the reviewer attribute of the external dimension cost center (ZCOSTCNTR). Therefore BAdI RSBPCB_SETUSER is implemented in the backend system to determine the owner and manager for each cost center. Implementation logic is give in Logic section.

As additional locking dimensions controlling area /ERP/CO_AREA Category /ERP/CATEGORY, Fiscal year variant 0FISCVARNT, Fiscal year 0FISCYEAR are used to determine along with the owner dimension the data slice that the work status locks when the work status is applied. Finally set flag Enable Work Status and save work status. This work status is now attached to the model.

Step 5: Create a Process Template

To do this press on „Process Templates“ and on “New”. You get the following screen:

Enter name and description. Select as identity dimensions Category, Company Code, Fiscal year variant and Fiscal Year. Select yourself as “Process Owners”.

Step 6: Create Activities within Process Template

Activity Budget Submission

Now you define a specific task within the process template.

  • Select tab Activities and press button “New”. Enter name and description.
  • Select as driving dimension /ERP/COSTCNTR.

  • Select members from respective hierarchy

  • Select “Define Performer by customer implementation”
  • Select “Define reviewer by customer implementation”


Add Hyperlink “Business user Activity”

  • Press button “Create” in “Performer Definition” to define the activity itself.
  • Press button Add Hyperlinks
  • Enter name and description.
  • Select as target action Analysis Office and then Open Workbook. Enter name of the workbook. Take in this example ZERP_SFIN_A01_CCG_PLAN_WB000F

  • Press button Get Variable and you get the name of the data source/query used in the workbook. In this example it is DS_
  • Press button Set Variable to pass values to the variables of the query of the workbook. Set for fiscal year, category, company code, currency, cost center “Use Workspace Content”.


Add another activity “Work Status Update”

  • Select Target action as Work Status and then Set Work Status.

  • Set the Target Context, Model as your BPC Application and Infoprovider as BW Cube/Multiprovider
  • Set Category, Fiscal Year and Cost Center as “Use Workspace Context” and you can hardcode Controlling Area and Fiscal year variant.

  • Set the Work status automation setting

  • Validate and Save the activities
  • Save Hyperlink
  • Go back and Save template
  • Validate and deploy the BPF template.


Step 7: Link Analysis Office workbook to planning model

Open analysis office (AO) workbook (ZERP_SFIN_A01_CCG_PLAN_WB000F) and go to tab Analysis. Select button Display Design Panel. On design panel go to Components and tab Planning. Select planning model ZFIN_PLAN via value help.


Customer Implementation logic

constants:  gc_env type rsbpc_appset_id value ‘XXXXXX’, “Enter environment name

gc_perf type rsiobjnm value ‘/ERP/SENDER’,
gc_rev type rsiobjnm value ‘/ERP/REVIEWER’.
“out put formats

types: begin of ws_type, “Return struc of owner and manager for work status

mem_id type rschavl,
iobj_id type rsiobjnm,
owner_user_id type rsstring,
owner_team_id type rsstring,
manager_user_id type rsstring,
manager_team_id type rsstring,

end of ws_type.

types: begin of bpf_type, “Return struc of owner and manager for work status

mem_id type rschavl,
owner_user_id type rsstring,
owner_team_id type rsstring,
reviewer_user_id type rsstring,
reviewer_team_id type rsstring,

end of bpf_type.

types: ws_badi_owner_table type standard table of ws_type.
types: bpf_badi_owner_table type standard table of bpf_type.
” Structure of input table
data: l_t_mem type cl_rsbpc_services=>tn_t_mem,
l_s_mem like line of I_T_INPUT_MEM,
lv_zobjnm type RSD_CHANM.

” Structure of result table
” Parameter for master data of external info object
data: lt_performer type rsdm_tx_shlpreturn,
lt_req_atr type rsdm_t_req_atr,
ls_req_atr like line of lt_req_atr.
field-symbols: <ls_performer> like line of lt_performer,
<s_value> type rsdm_s_value.
clear e_t_result_mem.


lv_zobjnm = ‘ZCOSTCNTR’.


if ( i_feature_type = cl_rsbpcb_service=>n_c_feature_type_ws or i_feature_type = cl_rsbpcb_service=>N_C_FEATURE_TYPE_BPF ) and i_appset_id = gc_env.

” Within Work Status in specific environment
ls_req_atr = gc_perf.
append ls_req_atr to lt_req_atr.
ls_req_atr = gc_rev.
append ls_req_atr to lt_req_atr.

call function ‘RSD_CHA_GET_VALUES’


i_chanm = lv_zobjnm
i_t_req_atr = lt_req_atr


e_tx_return = lt_performer


illegal_infocube = 1
illegal_infoobject = 2
x_message = 3
no_values_available = 4
illegal_input = 5
others = 6.


if sy-subrc = 0.

“Below code for BPF Performer and Reviewer update
IF i_feature_type = cl_rsbpcb_service=>N_C_FEATURE_TYPE_BPF.

data: l_t_bpf_mem type bpf_badi_owner_table,
l_s_bpf_mem like line of l_t_bpf_mem.

loop at i_t_input_mem into l_s_mem where iobjnm = I_OBJ_NM.

read table lt_performer assigning <ls_performer> with key chavl = l_s_mem-mem_id.
if sy-subrc = 0.

l_s_bpf_mem-mem_id = l_s_mem-mem_id.
read table <ls_performer>-t_value assigning <s_value> with key iobjnm = gc_perf.

l_s_bpf_mem-owner_user_id = <s_value>-value.

read table <ls_performer>-t_value assigning <s_value> with key iobjnm = gc_rev.

l_s_bpf_mem-reviewer_user_id = <s_value>-value.

append l_s_bpf_mem to l_t_bpf_mem.


e_t_result_mem = l_t_bpf_mem.

“Below code for Work Status OWner and Manager update
ELSEIF i_feature_type = cl_rsbpcb_service=>n_c_feature_type_ws.

data: l_t_ws_mem type ws_badi_owner_table,

l_s_ws_mem like line of l_t_ws_mem.

loop at i_t_input_mem into l_s_mem where iobjnm = I_OBJ_NM.

read table lt_performer assigning <ls_performer> with key chavl = l_s_mem-mem_id.
if sy-subrc = 0.

l_s_ws_mem-mem_id = l_s_mem-mem_id.
l_s_ws_mem-iobj_id = l_s_mem-iobjnm.

read table <ls_performer>-t_value assigning <s_value> with key iobjnm = gc_perf.

l_s_ws_mem-owner_user_id = <s_value>-value.

read table <ls_performer>-t_value assigning <s_value> with key iobjnm = gc_rev.

l_s_ws_mem-manager_USER_id = <s_value>-value.

append l_s_ws_mem to l_t_ws_mem.

endif. ” Performer found for cost center


e_t_result_mem = l_t_ws_mem.


endif. ” Master data from Info object exist



To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply