Learn how to create an HCM Processes and Forms Floor Plan Manager (FPM) form to add multiple employees on one form using a list-type layout. As an example application, the form can be used by managers to nominate several employees for a team award by using a search function to find employees (nominees for an award) and add them to the list.
Key Concept
The Design Time Tool for SAP HCM Processes and Forms (transaction code HRASR_DT) is used to create processes and their related objects (e.g., workflow templates, form scenarios, and forms), and make the required settings for them. The SAP HCM Processes and Forms framework previously used the Adobe Interactive Forms solution integrated with Web Dynpro ABAP for its user interface (UI). A new UI based on the Floor Plan Manager (FPM) framework has been created as an alternative to Adobe Interactive Forms. This new option removes the licensing requirements for Adobe Interactive Forms, thus providing a cost savings.
Using the FPM to develop HCM Processes and Forms is more cost-effective than using the Adobe Interactive Forms solution. In addition, as I explain, the FPM provides you with the flexibility to meet complex business demands. I present a real-life scenario (of selecting multiple employees on one form) that my company, HR Focal Point, developed for a client that currently uses Adobe Interactive Forms. As demonstrated here, this scenario can be easily ported to the FPM UI.
Note
A minimum of SAP ERP Central Component (ECC) 6.0 with enhancement package 6 and HR Renewal 1.0 Feature Pack 2 is required, along with the activation of business function HCM_ASR_CI_5. However, to fully leverage the new FPM forms and expand on my example, enhancement package 7 and HR Renewal 2.0 with the latest feature pack is recommended by SAP. A developer’s key is required for the ABAP code.
The standard HCM Processes and Forms scenario assumes that an employee is selected first, the process or form is selected, and then the process or form can be edited. It is possible to start a process without first selecting an employee (see Chris Solomon’s blog for more details: HCM Processes and Forms: Select an employee? What if I don’t want too? Awwww just skip it!). It is also possible to create a process that can be configured as a mass process (read this SAP help document for more details: Starting a Mass Process). The mass process allows multiple (same) processes to be started for the employees at the same time. All the processes, however, must have the same effective date and the proposed master data change must be the same for all of the selected employees.
I explain how to develop a form that does not require an employee to first be selected to start the form and does not create multiple processes. This new form simplifies how the manager can select multiple employees and submit them for approval or processing, without generating multiple processes for approval.
Creating a New FPM Form
Suppose that you need a process that allows the user to select multiple employees on one form. In this example, these employees are nominees for a team award. The form you need may look like the one shown in Figure 1.

Figure 1
A sample form layout for a team award nomination application
The top portion (the header) of the form can include the nominator’s basic information—the Nominator’s Name, personnel number, email, and so on. There may be a nomination period (with the beginning and ending dates possibly stored in table TVARVC or a custom table) that limits the dates when nominations can be submitted.
The bottom of the form (the list) has a section for the list of nominees. The nominator can use the drop-down fields in the Personnel No. column to find and select the employees to nominate.
Click the drop-down icon in the Personnel Number field on the first (empty) row. This action opens a pop-up screen (Figure 2) that allows the nominator to search by name and then select the correct employee.

Figure 2
The award nominations window for searching and selecting employees to nominate
Enter the search criteria (Last Name, First Name) and click the Search button. When the list of matching names is displayed, double-click the appropriate line and the selected information is automatically transferred to the form (Figure 3).

Figure 3
The results after selecting the nominee
Additional nominees can be selected to complete the list for the team award by clicking the Add Row button and again using the drop-down option to find and add additional nominees.
The final list (Figure 4) might include several nominees for the team award.

Figure 4
The final list of nominated employees for the team award
The columns shown are just a sample of the information required to process the team-award nominations. Once the employees to be nominated are selected, there may be specific additional information required (such as team name, justification, and job title) for the nominees to be approved. There also might be a check box in the row to indicate that a nominee has been disallowed by the processor or approver.
After the form is approved, the correct pay request (e.g., infotype 0015 – Additional Payments) can be created for the award amount.
Setting Up New Forms in FPM
As part of the SAP ERP HCM system, SAP delivers the following sample FPM HCM Processes and Forms with Business Function HCM_ASR_CI_4 (available from EA-HRGXX 607 Support Pack 00 onward):
- HR_PA_XX_CHANGE_WORKINGTIME_1_WD for making changes to work time (international)
- HR_PA_XX_SPECIAL_PAYMENT_1_WD for special payments (international)
Additional sample FPM HCM Processes and Forms are delivered with business function HCM_ASR_CI_5 and include the following:
- HIRE_01_WD – for hiring an employee (DE) – Web Dynpro
- HR_PD_CHANGE_ORG_UNIT_ATTR_WD – Change Org. Unit's Attributes – Web Dynpro (available from EA-HRGXX 607 Support Pack 5 onward)
If you don’t see these sample forms in your system after activating the appropriate business functions, then they will need to be copied from client 000.
Creating the Process and Form Scenarios
Execute transaction code HRASR_DT and configure your HCM Process and Form process. To use FPM instead of Adobe Interactive forms, select W FPM Form from the drop-down options in the Form Type field (Figure 5).

Figure 5
Select the FPM form type
Note
I assume that the reader is familiar with the basic setup and configuration of HCM Processes and Forms. For a more detailed explanation about how to create a process, including the form scenario, read this SAP tutorial:
Create a Process. I cover only some of the steps required to fully develop and use HCM Processes and Forms.
The FPM form option then allows you to build the layout using the various FPM layout types that are available. In this example, I use two form (layout) types: ZPY_AWARD_HEADER (the top portion of Figure 1) and ZPY_AWARD_NOMINATIONS (the bottom portion of Figure 1). Figure 6 shows the configuration. To define these two layouts, click Form on the left side of the screen and enter the two layouts on the right side of the screen.

Figure 6
Select the form layout types to use
Layout Types
In the Design Time Tool, the developer can use one of following four layout types, called UI building blocks (UIBBs), to build the final form design. (Review the SAP documentation in the tutorial mentioned above for more details about UIBBS.) In this example, I use two of the four available UIBBs—numbers 1 and 2, below.
- Form – Use this to display data using a form.
- List – Use this to display or perform operations on repeat fields of a single infotype record.
- List Complex – Use this to display or perform operations on multiple records of a single infotype.
- Composite – Use this to group multiple UIBBs within a single UIBB.
The form type Form (ZPY_AWARD_HEADER in Figure 6) is used for the header information, which is the top of the display and contains the nominator’s information. After you select this row for this form (Figure 6), the configuration screen opens (Figure 7). Here you can add the various display fields to the layout. The partial configuration is shown in Figure 7.

Figure 7
The form type Form is used to display the header information
The form type List (ZPY_AWARD_NOMINATIONS in Figure 6) is the top portion of the display and is used to select the employees to be nominated. After you select (click) this row, the configuration screen opens, and you can add the various display columns to the table layout. The partial configuration for this is shown in Figure 8.

Figure 8
The form type List is used to search for, select, and display nominated employees
Creating Drop-Down Options for a Form
To create the drop-down options for the Personnel Number column in the List form type (Figure 8), follow these steps to complete the configuration or code.
Step 1. Create a Custom Back-End Service
This custom back-end service (refer to the SAP tutorial to learn how to create the back-end service and the ABAP Class required for the back-end service) contains the code to initialize (Figure 9).
METHOD if_hrasr00gen_service~initialize.
DATA: lv_nom_email TYPE comm_id_long,
lv_nom_name TYPE emnam,
lv_nom_pernr TYPE pernr_d,
lv_nom_usrid TYPE sysid,
lv_nom_mgr_email TYPE comm_id_long,
lv_nom_mgr_name TYPE emnam,
lv_nom_mgr_pernr TYPE pernr_d,
lv_nom_mgr_usrid TYPE sysid,
lv_period_begin TYPE begda,
lv_period_end TYPE endda,
lv_uname type syuname.
FIELD-SYMBOLS:
<special_field> TYPE hrasr00value_of_field,
<service_field_value> TYPE hrasr00gensrv_dataset_init,
<relevant_dataset> TYPE hrasr00gensrv_dataset.
* Get Period Dates
lv_period_begin = sy-datum.
lv_period_begin+4(4) = '0101'.
lv_period_end = sy-datum.
lv_period_end+4(4) = '1231'.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_period_begin.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_period_begin.
ENDIF.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_period_end.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_period_end.
ENDIF.
* Get Nominator's PERNR
lv_uname = sy-uname.
SELECT SINGLE pernr
INTO lv_nom_pernr
FROM pa0105
WHERE subty = '0001'
AND begda LE sy-datum
AND endda GE sy-datum
AND usrty = '0001'
AND usrid = lv_uname.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_nom_pernr.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_nom_pernr.
ENDIF.
* Get Nominator's Email
SELECT SINGLE usrid_long
INTO lv_nom_email
FROM pa0105
WHERE pernr = lv_nom_pernr
AND subty = '0010'
AND begda LE sy-datum
AND endda GE sy-datum
AND usrty = '0010'.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_nom_email.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_nom_email.
ENDIF.
* Get Nominator's USRID
SELECT SINGLE usrid
INTO lv_nom_usrid
FROM pa0105
WHERE pernr = lv_nom_pernr
AND subty = '0001'
AND begda LE sy-datum
AND endda GE sy-datum
AND usrty = '0001'.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_nom_usrid.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_nom_usrid.
ENDIF.
* Get Nominator's Name
SELECT SINGLE ename
INTO lv_nom_name
FROM pa0001
WHERE pernr = lv_nom_pernr
AND endda GE sy-datum.
READ TABLE service_field_values ASSIGNING <service_field_value>
WITH KEY fieldname = c_fieldname_nom_name.
IF sy-subrc = 0.
<service_field_value>-fieldvalue = lv_nom_name.
ENDIF.
ENDMETHOD.
Figure 9
The code in the INITIALIZE method of the ABAP Class
This code includes the header (top) portion of the form with the nominator’s information and the code to validate the nominee information that is entered.) The fields configured for the back-end service might look like the fields shown in Figure 10.

Figure 10
The fields used by the custom back-end service Z_AWARD_NOMINATIONS
Step 2. Configure the Input Help
After you double-click the Input Help column for the row EE_PERNR (Figure 10), the screen in Figure 11 opens. Here you can add the drop-down options to the Personnel Number column by configuring the Input Help column as shown.

Figure 11
Customize the display for field EE_PERNR in the nominations form
Select (check) the box in the Actv. (activate) column for the Web Dynpro Input Help row and in the field in the Data Binding in Service column, enter the name of the custom Web Dynpro component (ZHRASR_C_EMPL_SEARCH). As shown in Figure 11, the custom Web Dynpro application ZHRASR_C_EMPL_SEARCH is required to present the pop-up window, process the search request, present the list of matching employees based on the selection criteria, and return the selected employee information to be added to the form. After you make the appropriate entries, click the green checkmark icon in the bottom right of the pop-up screen (not shown). The screen in Figure 12 shows that the input help will use a Web Dynpro Application.

Figure 12
The fields used, showing the selected Input Help value
Step 3. Create a Custom Web Dynpro
A custom Web Dynpro component (ZHRASR_C_EMPL_SEARCH) is required because SAP does not provide a Web Dynpro component to search for employees correctly in the FPM type form. In order to make the custom Web Dynpro component work correctly, it must have IWD_VALUE_HELP as an implemented interface. To create the Web Dynpro component, execute transaction code SE80. This is shown in Figure 13.

Figure 13
The SAP-delivered component
A good starting point to learn about creating a custom Web Dynpro component is to review the SAP-delivered Web Dynpro component HRASR_C_POS_SEARCH. Execute transaction code SE80; then select the SAP-delivered component. See Figure 13 for a display of the component in transaction SE80.
Click the Web Dynpro name and use the context menu (right-click) to copy it and create the custom component. Rename the view from POS_SEARCH to EMPL_SEARCH and rename the window from ASR_POS_SEARCH to ASR_EMP_SEARCH. The custom component should now look like that in Figure 14.

Figure 14
Create an assistance class and implemented interfaces
In the custom component, the EMPL_SEARCH view requires context entries to be made to it. Double-click the EMPL_SEARCH view in the left side of Figure 14, and in the next screen select the Context tab to add the required entries. The required entries are shown in Figure 15.

Figure 15
Create context-menu options for the EMPL_SEARCH view
You can use the method ONACTIONSEARCH code (Figure 16). Note that different snippets of this code are used in the following steps; the complete code can be found in Figure 17.

Figure 16
Sample code to get the search parameters
*------------------------------------------------------------------------------
METHOD onactionsearch .
DATA:
" Singles
lv_msg TYPE string,
lv_nom_pernr TYPE pernr_d,
lv_uname TYPE syuname,
" Structures
ls_object TYPE hrwpc_s_keyobjec,
ls_result TYPE hrasr_s_search_results,
ls_searchvalue TYPE hrwpc_s_oadp_searchvalue,
ls_search_criteria TYPE wd_this->element_search_criteria,
" Tables
lt_application_params TYPE hrwpc_t_oadp_paramvalue,
lt_objects TYPE hrwpc_t_keyobjec,
* lt_results TYPE TABLE OF hrasr_s_search_results,
lt_searchvalues TYPE hrwpc_t_oadp_searchvalue,
" Objects
node_searchresults TYPE REF TO if_wd_context_node,
lo_nd_search_criteria TYPE REF TO if_wd_context_node,
lo_el_search_criteria TYPE REF TO if_wd_context_element,
lo_api_controller TYPE REF TO if_wd_controller,
lo_message_manager TYPE REF TO if_wd_message_manager.
lo_api_controller ?= wd_this->wd_get_api( ).
lo_message_manager = lo_api_controller->get_message_manager( ).
* navigate from <CONTEXT> to <SFLIGHT> via lead selection
node_searchresults = wd_context->get_child_node( name = `SEARCH_RESULTS` ).
* navigate from <CONTEXT> to <SEARCH_CRITERIA> via lead selection
lo_nd_search_criteria = wd_context->get_child_node( name = wd_this->wdctx_search_criteria ).
* get element via lead selection
lo_el_search_criteria = lo_nd_search_criteria->get_element( ).
* get all declared attributes
lo_el_search_criteria->get_static_attributes( IMPORTING static_attributes = ls_search_criteria ).
IF ls_search_criteria-last_name IS INITIAL AND
ls_search_criteria-first_name IS INITIAL.
* clear table
* node_searchresults->bind_table( lt_results ).
lv_msg = wd_assist->if_wd_component_assistance~get_text( 'A01' ).
lo_message_manager->report_warning( lv_msg ).
RETURN.
ENDIF.
* create select options for oadp search
ls_searchvalue-fieldname = '1'. "NACHN"
ls_searchvalue-fieldvalue = ls_search_criteria-last_name.
APPEND ls_searchvalue TO lt_searchvalues.
CLEAR: ls_searchvalue.
ls_searchvalue-fieldname = '3'."VORNA"
ls_searchvalue-fieldvalue = ls_search_criteria-first_name.
APPEND ls_searchvalue TO lt_searchvalues.
CLEAR: ls_searchvalue.
* initialize OADP model
CREATE OBJECT wd_this->model
EXPORTING
data_begda = sy-datum "data_begda
data_endda = sy-datum "'21.05.2012' "data_endda
cache_maxage = '1' "cache_maxage
data_dest = 'NONE' "data_dest
application_params = lt_application_params
user = sy-uname. "wd_this->mv_user.
* update orgview information
CALL METHOD wd_this->model->update_orgview
EXPORTING
orgview = 'ASR_EMP_SEARCH'
IMPORTING
error_msg = lv_msg.
IF NOT lv_msg IS INITIAL.
lo_message_manager->report_error_message( lv_msg ).
RETURN.
Figure 17
The method ONACTIONSEARCH code
This method is called whenever the user clicks the drop-down icon on the form to search for or select an employee. This part of the code is used to get the input search criteria and issue an error message if the input is blank.
In the code in Figure 16, the text A01is part of the text element in the assistance class CL_HRASR00_WDA_EMPLOYEE_SEARCH. This class is defined in the Assistance Class field in the process (Figure 14). Figure 18 shows the Text Symbols for this assistance class. To display the Text Symbols from transaction code SE80 as shown in Figure 14, use GoTo > Text Symbols from the menu.

Figure 18
The Text Symbols for class CL_HRASR00_WDA_EMPLOYEE_SEARCH
The method ONACTIONSEARCH code snippet shown in Figure 19 fetches the search criteria (last and first name) and places the values in the table LT_SEARCHVALUES.

Figure 19
Sample code to fill table LT_SEARCHVALUES with the input values
The code in Figure 19 uses fieldnames 1 and 3. The SAP-provided code (not shown) builds the list of search criteria fields from table HRSEL_TABFIELDS (Figure 20) and sorts the field list by FIELDNAME. Therefore, in this example, NACHN is field 1 and VORNA is field 3. In this case, field 2 (PERNR) is not required because that is the return value from the search results.

Figure 20
SAP table HRSEL_TABFIELDS with the search fields used in the search input ASR_EMP_SEARCH
Use the method ONACTIONSEARCH code in Figure 21 to set the application parameters and the organizational view that is used (e.g., search input ASR_EMP_SEARCH).

Figure 21
Sample code to set the input search value ASR_EMP_SEARCH as the organizational view
Finally, use the method ONACTIONSEARCH code in Figure 22 to perform the search, process the results, and bind the results to the context node of the view.

Figure 22
Sample code to perform the search, process the results, and bind results to the context node
Insert additional code between the LOOP AT and ENDLOOP sections to fetch any additional required employee information to display in the List form or to filter the results (for example, to remove the name from the list if the name or PERNR matches the nominator’s name or PERNR).
The code in Figure 23 can be added to method ONACTIONOK to process the selected row from the pop-up window and fill the view context.
METHOD onactionok .
DATA:
lv_msg TYPE string,
ls_selected_object TYPE hrwpc_s_keyobjec,
" Objects
lo_api_controller TYPE REF TO if_wd_controller,
lo_message_manager TYPE REF TO if_wd_message_manager,
lo_nd_search_results TYPE REF TO if_wd_context_node,
lo_el_search_results TYPE REF TO if_wd_context_element.
* create message manager
lo_api_controller ?= wd_this->wd_get_api( ).
lo_message_manager = lo_api_controller->get_message_manager( ).
* navigate from <CONTEXT> to <SEARCH_RESULTS> via lead selection
lo_nd_search_results = wd_context->get_child_node( name = wd_this->wdctx_search_results ).
* get element via lead selection
lo_el_search_results = lo_nd_search_results->get_element( ).
* get all declared attributes
lo_el_search_results->get_static_attributes( IMPORTING static_attributes = ls_selected_object ).
DATA lr_node TYPE REF TO if_wd_context_node .
DATA lr_element TYPE REF TO if_wd_context_element .
DATA l_text TYPE string.
lr_node = wd_context->get_child_node( name = 'SELECTED_PERNR' ).
lr_element = lr_node->get_element( ).
CONCATENATE ' ' ls_selected_object-stext ' (' ls_selected_object-objid ')' INTO l_text.
lr_element->set_attribute( name = 'SEL_NAME' value = ls_selected_object-stext ).
lr_element->set_attribute( name = 'SEL_PERNR' value = ls_selected_object-objid ).
*set the data in special data
DATA node_value_help_data TYPE REF TO if_wd_context_node.
DATA value_help_datas TYPE wd_this->elements_value_help_data.
DATA value_help_data TYPE wd_this->element_value_help_data..
* send selected Org.Unit back to form fields
value_help_data-fieldname = 'SEL_PERNR'.
value_help_data-fieldindex = 1.
value_help_data-fieldvalue = ls_selected_object-objid.
APPEND value_help_data TO value_help_datas.
value_help_data-fieldname = 'SEL_NAME'.
value_help_data-fieldindex = 1.
value_help_data-fieldvalue = ls_selected_object-stext.
APPEND value_help_data TO value_help_datas.
*Fill the context
node_value_help_data = wd_context->get_child_node( name = wd_this->wdctx_value_help_data ).
node_value_help_data->bind_table( value_help_datas ).
* send selected Org.Unit back to form fields
value_help_data-fieldname = 'EE_PERNR'.
value_help_data-fieldindex = 1.
value_help_data-fieldvalue = ls_selected_object-objid.
APPEND value_help_data TO value_help_datas.
value_help_data-fieldname = 'EE_NAME'.
Figure 23
The method ONACTIONOK code
Additional Questions to Consider
This article is less about how to develop an FPM forms and more about the opportunities and discoveries. The opportunity is to develop a new process with multiple employees on one form and the discovery is learning how to use this new technology to make it work. In order to fully implement a similar solution, here is a list of a few additional questions that need to be addressed:
- Who is authorized to submit the nominations (e.g., any manager, just selected managers, or all managers at a certain level)?
- What information about each nominee needs to be included on the form?
- Is there a nominating period that limits when nominations are submitted?
- Can one employee be nominated more than once?
- If one employee can be submitted more than once, will there be a limit on the maximum bonus award amount?
- Who are the approvers?
- Do all the nominations that have been submitted need to be reviewed before final bonuses are awarded (possibly to limit the total amount of awards)?
- How will the bonus amount to be recorded (in infotype 0015)?
- Is a follow-up notification required to be sent to the nominees indicating the approved bonus amount?
Rudolph Blanco
Rudolph (Rudy) Blanco is a Second-Level Resource Consultant with HR Focal Point. He is an SAP-Certified Professional who previously worked as an SAP consultant at Accenture and a Platinum Consultant at SAP America. Rudy has been working with SAP applications since 1997. He holds a bachelor's degree in mathematics from the University of Houston.
You may contact the author at rudolph.blanco@hrfocalpoint.com.
If you have comments about this article or publication, or would like to submit an article idea, please contact the editor.