Updates include: CBA Enabler, and Simplification of CBA Wrapper Component, Asynchronous Callback, FPM Workbench, Search GUIBB Special Groups.
FPM Developer's Guide 7.03/7.31 SP7
SAP HANA Cloud Connector: Operator's Guide
Using the feeder class concept it is possible to build generic adapters on generic business logic encapsulations. Examples are BOL, BOPF or the ESF. Such adapters allow some reuse of generic feeder classes by application development so that UI logic does not need to be re-implemented for each application. FPM provides a rich adapter implementation on BOL which allows creating application UIs without a line of code, purely consisting of Web Dynpro ABAP configurations. The adapter objects can be found in package APB_FPM_BOL_CORE and test applications in APB_FPM_BOL_TEST in the WEBCUIF software layer.
A Step-by-Step guide to create a simple FPM application using Feeder Class for FORM GUIBB
Introduction:
In this article, we will create a simple FPM Application using FEEDER CLASS for FORM GUIBB (Generic User Interface Building Blocks). We will use OIF (Object Instance Floorplan) in this article.
We will take a simple example of getting the material number from user and displaying the description of it using FORM GUIBB. One needs to follow all the steps to avoid the runtime errors.
Prerequisite: Before following this document, one should have a basic knowledge of WebDynpro ABAP and ABAP Classes.
What is Feeder Class?
A class that implements the IF_FPM_GUIBB_FORM ABAP interface (for form components) or the IF_FPM_GUIBB_LIST ABAP interface (for list components). Business logic can be access through it. It is the link between the application and the GUIBB.
There are 2 ways which can be used to develop the FPM application. One is using Free Style UIBB and Generic UIBB. In this article we will use the GUIBB (FORM is one of the available GUIBB).
Steps to be followed:
1. Go to transaction code SE24 and create a FEEDER Class as follows.
2) Go to the “Interfaces” tab and enter the interface for FORM GUIBB “IF_FPM_GUIBB_FORM”.
And press Enter. It will automatically add the interface for the generic UIBB “IF_FPM_GUIBB
3) Now if you click on the Methods tab, you will see all the methods implemented by these two interfaces.Make Sure you go inside each and every Method and activate them so it won’t give short dump.
4) Now, go to method “GET_DEFINITION” enter the following code.
* This method is for building Field catalog and actions required in the form
* Local Varibale declarations
DATA: li_action_line TYPE fpmgb_s_actiondef.
* Prepare Field catalog
eo_field_catalog ?= cl_abap_tabledescr=>describe_by_name( 'MAKT' ). " Here we can use any flat strutures or local types
* Prepare actions
li_action_line-id = 'GET_MAT'. " You can give wahtever name you want to the action ID
li_action_line-visible = cl_wd_uielement=>e_visible-visible.
li_action_line-enabled = abap_true.
li_action_line-imagesrc = 'ICON_ADDRESS'. " Image for actions
APPEND li_action_line TO et_action_definition.
5) Go to method “GET_DATA” enter the following code.
DATA : li_makt_line TYPE makt.
li_makt_line = cs_data. "cs_data contains the data
IF li_makt_line-matnr IS NOT INITIAL.
SELECT SINGLE * FROM makt INTO cs_data WHERE matnr = li_makt_line-matnr .
ev_data_changed = abap_true.
ENDIF.
* Check if the "Start Over" Button in clicked ; If yes clear the contents
if io_event->MV_EVENT_ID = 'FPM_GOTO_START'.
CLEAR cs_data.
ENDIF.
REMOVED steps 6, 7 and 8
9) Create the WebDynpro Application by right clicking on component as follows.
10) Change the component and View in the properties of WD Application. In this example we are using OIF and hence the component is as follows. In case of other floorplans like GAF and OVP write FPM_GAF* and do the F4 and you will get the list.
Component : FPM_OIF_COMPONENT
Interface view: FPM_WINDOW
11) Now go to the package where you have saved the WebDynpro Application and right click on the Application and click “Create/Change Configuration”.
12) It will open the browser. Enter the Configuration ID. This is the FIRST CONFIGURATION of your FPM application. This is called as APPLICATION CONFIGURATION. Press Enter so it will give the following ERROR.
This is expected because till this point your APPLICATION CONFIGURATION does not exist. Click on Create button. You will receive the success message.
13) After Application Configuration, it’s time to create the Component Configuration for your OIF floorplan.
Enter the name component configuration name and click on “Go to Component Configuration”.
This is again expected error and same as above (Step 12). Click on Create and give your package and it will open the next screen with the success message.
14) Click on the “Attributes” button and enter Component as “FPM_FORM_UIBB”.
Now as mentioned in the informational message on screen, go to View and click on F4 help and select the View as FORM_WINDOW.
Click OK
15) Now let’s create the GUIBB Configuration and hence enter the Configuration Name and click Enter. It will appear above the “Configure UIBB” button.
16) You will receive the same error and that is expected error. Click on Create.
17) Enter your package name and then it will ask for the FEEDER CLASS name. Enter the Feeder Class name and click on Edit Parameters.
18) You will receive the warning message and that can be ignored.
Just click OK.
19) On this screen, Click on the “Add Group”. It will add the group1 under Form and you can name it.
20) After adding group, we need to configure that as follows. Select the MATNR as we want to display it as Input field and then add “Button Row”. Click OK.
21) From Enhancement pack 5, we have some very good options like Value Suggestion while entering the material number. In order to view all the options available; just click on the “Element: Material” link under FORM-> Group1.
22) After that let’s configure the button we have added and add the action to it.
23) To display the material details, lets add one more group and configure it by selecting the fields we want to display as follows.
24) Click on the individual elements and set the property as follows :
Do it for all the fields and click on SAVE.
25) Finally, TEST the application. There are 2 ways to test the application as follows.
a) Click on the Application Configuration link and then click on TEST.
It will take you to the Application Configuration. Just click on TEST.
b) From SE80; enter your package name and select the application and click on Application Configuration and execute.
26) The Result screen looks like as follows, Enter the material and the click on Get Details it will populate the data.
Search Component with OVS (IF_FPM_SEARCH)
Search GUIBB with OVS:-
If you need ovs on search GUIBB this can be possible by implementing interface IF_FPM_GUIBB_OVS .
Step to create search GUIBB with OVS.
- create search GUIBB .
use below link for how to create simple search GUIBB
.
- interface tab enter IF_FPM_GUIBB_OVS interface it will implement method
- in order to assign fields OVS . go in method IF_FPM_GUIBB_SEARCH~GET_DEFINITION assign class name in attribute ovs_name .
Code :-
ls_descr_attr-name = 'CARRID'.
ls_descr_attr-text = 'the carrier id'.
ls_descr_attr-ovs_name = 'ZSEARCH_WITH_OVS'.
APPEND ls_descr_attr TO et_field_description_attr.
- Implement PHASE_0.
Code: -
DATA: l_text TYPE wdr_name_value,
l_label_texts TYPE wdr_name_value_list,
l_column_texts TYPE wdr_name_value_list,
l_window_title TYPE string,
l_group_header TYPE string,
l_table_header TYPE string.
l_text-name = 'CARRID'.
l_text-value = 'carrier id'.
APPEND l_text TO l_label_texts.
append l_text TO l_column_texts.
l_text-name = 'CONNID'.
l_text-value = 'connid id'.
APPEND l_text TO l_label_texts.
append l_text TO l_column_texts.
l_window_title = 'ovs in search GUIBB'.
l_group_header = 'ovs in search GUIBB'.
l_table_header = 'ovs in search GUIBB'.
io_ovs_callback->set_configuration(
label_texts = l_label_texts
column_texts = l_column_texts
group_header = l_group_header
window_title = l_window_title
table_header = l_table_header
col_count = 1
row_count = 5 ).
- Implement PHASE_1.
Code :-
BEGINOF t_stru_input,* add fields for the display of your search input here
carrid TYPE s_carr_id,
connid type s_conn_id,
ENDOF t_stru_input .data: l_search_input TYPE t_stru_input.
io_ovs_callback->context_element->get_static_attributes(
IMPORTING static_attributes = l_search_input ).* pass the values to the OVS component
io_ovs_callback->set_input_structure(
input = l_search_input ).
- Implement PHASE_2.
Code :-
beginof t_stru_list,* add fields for the selection list here
carrid type s_carr_id,
connid type s_conn_id,
endof t_stru_list .
FIELD-SYMBOLS: <query_params> TYPE t_stru_input.
DATA: l_select_list TYPESTANDARDTABLEOF t_stru_list,
ls_list TYPE t_stru_list,
ls_select_list TYPE t_stru_list.
ASSIGN io_ovs_callback->query_parameters->*
TO<query_params>.
IF <query_params> ISASSIGNED.
SELECT carrid connid FROM sflight INTO CORRESPONDING FIELDSOFTABLE l_select_list WHERE carrid = <query_params>-carrid.
ENDIF.
io_ovs_callback->set_output_table( output = l_select_list ).
- Implement PHASE_3.
Code :-
FIELD-SYMBOLS: <selection> TYPE t_stru_list.
ASSIGN io_ovs_callback->selection->* TO<selection>.
IF<selection> ISASSIGNED.
io_ovs_callback->context_element->set_attribute(
name = IV_WD_CONTEXT_ATTR_NAME
value = <selection>-carrid ).
ENDIF.
Result will be :-
Floorplan Manager - Learning Material
Standard Classroom Training
A 4-day classroom training course on Floorplan Manager (FPM) for Web Dynpro ABAP is available (Code NET 313); follow this link for more details http://www.sap.com/education/
Other Learning Material
No opportunity to attend the classroom training? Then use the material in the table below to further your knowledge of FPM. The material is produced by members of the FPM team.
Where do you stand? | What's available to you? |
---|---|
I want an overview of FPM |
|
I want a better understanding of FPM |
|
I want to know about adapting FPM applications |
|
I want to develop applications using FPM |
|
I want to take things even further! |
|
FPM Developer's Guide (FPM Cookbook):
From NetWeaver 7.4 SP4 onwards, the FPM Developer's Guide is combined with the FPM Administrator's Guide to form one Floorplan Manager for Web Dynpro ABAP document, and is available in the SAP Help Portal.
We hope you like the new layout.
Constructive criticism is always welcome; feel free to mail me (Celeste) with yours.
Cookbook Version | Release Notes (What's New) (From SAP Help Portal/SAP NetWeaver Library) |
---|---|
RN 7.4 SP5 | |
RN 7.4 SP2 | |
RN 7.03/7.31 SP7 | |
RN 7.03/7.31 SP4 | |
RN 7.03 | |
Disable FPM Standard Previous and Next buttons in FPM_GAF_COMPONENT
I have searched for many threads for this functionality, even though i haven't get complete solution.
Finally discussed with my colleagues (they are priceless), and we have enhanced standard FPM_GAF_COMPONENT to full fill our requirement.
Steps
Create the Web Dynpro interface component with two methods called
- DISABLE_NEXT (ANY NAME) with method parameters showed in screen shot
- DISABLE_PREVIOUS (ANY NAME) method parameters same as above method
In my case I created methods like below screen shot
Method parameters
Implement MODIFY_VIEW_ASSEMBLY of FPM_GAF_COMPONENT with Post-Exit method
Write the below code in Post-Exit method
Method <method name>.
DATA:
lr_tstdbtn TYPE REF TO ziwci_if_wca_fpm_gaf_tbstdbtn,
lf_changed TYPE flag,
ls_fpm_info TYPE fpm_s_runtime_info,
lr_fpm_node TYPE REF TO if_fpm_node,
lr_fpm_element TYPE REF TO if_fpm_element,
ls_button_state TYPE wd_this->element_button_state,
ls_target_state TYPE wd_this->element_target_state.
CHECK iv_event_failed <> abap_true.
ls_fpm_info = wd_this->mr_fpm->get_runtime_info( ).
CHECK ls_fpm_info-floorplan = 'GAF'.
CHECK wd_this->mr_app_cc_usage IS BOUND.
TRY.
lr_tstdbtn ?= wd_this->mr_app_cc_usage->get_interface_controller( ).
CATCH cx_sy_move_cast_error .
RETURN.
ENDTRY.
lr_fpm_node = wd_assist->mo_floorplan_target_state->get_fpm_root_node( ).
lr_fpm_element = lr_fpm_node->get_element( ).
lr_fpm_element->get_attributes( IMPORTING attributes = ls_target_state ).
lr_fpm_node = wd_assist->mo_floorplan_btn_state->get_fpm_root_node( ).
lr_fpm_element = lr_fpm_node->get_element( ).
lr_fpm_element->get_attributes( IMPORTING attributes = ls_button_state ).
IF ls_button_state-previous_step_enabled IS NOT INITIAL.
IF lr_tstdbtn->disable_previous_step( ls_target_state ) = abap_true.
CLEAR ls_button_state-previous_step_enabled.
lf_changed = abap_true.
ENDIF.
ENDIF.
IF ls_button_state-next_step_enabled IS NOT INITIAL.
IF lr_tstdbtn->disable_next_step( ls_target_state ) = abap_true.
CLEAR ls_button_state-next_step_enabled.
lf_changed = abap_true.
ENDIF.
ENDIF.
IF lf_changed = abap_true.
lr_fpm_element->set_attributes( attributes = ls_button_state ).
ENDIF.
ENDMETHOD.
Add the above created web dynpro interface in any component of GAF Floorplan component like below
Finally implement the below method with your requirement
- To disable Road map step numbers
METHOD override_event_gaf .
DATA:
lx_fpm_floorplan TYPE REF TO cx_fpm_floorplan,
lt_step TYPE io_gaf->ty_t_mainstep,
lt_substep TYPE io_gaf->ty_t_substep,
lt_button TYPE if_fpm_cnr_gaf=>t_button,
ls_step LIKE LINE OF lt_step,
lr_gaf_info TYPE REF TO if_fpm_gaf_info,
ls_target_state TYPE fpm_s_gaf_info,
ls_current_state TYPE fpm_s_gaf_info,
ls_state TYPE if_fpm_gaf=>ty_s_state,
ls_fpm_info TYPE fpm_s_runtime_info.
io_gaf->get_current_state( IMPORTING es_current_state = ls_state ).
TRY.
ls_fpm_info = wd_this->gr_fpm->get_runtime_info( ).
lr_gaf_info ?= ls_fpm_info-floorplan_info.
TRY.
ls_target_state = lr_gaf_info->get_target_state( ).
CATCH cx_fpm_floorplan.
ENDTRY.
TRY.
ls_current_state = lr_gaf_info->get_current_state( ).
CATCH cx_fpm_floorplan.
ENDTRY.
io_gaf->get_mainsteps( IMPORTING et_mainstep = lt_step ).
LOOP AT lt_step INTO ls_step.
IF NOT wd_this-><variable> IS INITIAL.
IF wd_this-><variable> EQ ‘X’.
CASE ls_step-id.
WHEN 'MAINSTEP_1' OR 'MAINSTEP_4' OR 'MAINSTEP_7'.
CALL METHOD io_gaf->enable_mainstep
EXPORTING
iv_variant_id = ls_step-variant
iv_mainstep_id = ls_step-id
iv_enabled = abap_false.
ENDCASE.
ELSE.
CASE ls_step-id.
WHEN 'MAINSTEP_1'.
CALL METHOD io_gaf->enable_mainstep
EXPORTING
iv_variant_id = ls_step-variant
iv_mainstep_id = ls_step-id
iv_enabled = abap_false.
ENDCASE.
ENDIF.
ELSE.
CASE ls_step-id.
WHEN 'MAINSTEP_4' OR 'MAINSTEP_5' OR 'MAINSTEP_7'.
CALL METHOD io_gaf->enable_mainstep
EXPORTING
iv_variant_id = ls_step-variant
iv_mainstep_id = ls_step-id
iv_enabled = abap_false.
ENDCASE.
ENDIF.
ENDLOOP.
CATCH cx_fpm_floorplan INTO lx_fpm_floorplan.
ENDTRY.
ENDMETHOD.
- To Disable Next step
METHOD disable_next_step .
IF wd_this-><variable> IS INITIAL OR
NOT wd_this-><variable> IS INITIAL.
rv_disabled = abap_false.
IF is_gaf_info-mainstep = 'MAINSTEP_6'.
rv_disabled = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
- To Disable Previous step
METHOD disable_previous_step .
IF NOT wd_this-><variable> IS INITIAL.
rv_disabled = abap_false.
IF is_gaf_info-mainstep = 'MAINSTEP_2'.
rv_disabled = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
I hope this will help others who are looking for this kind of functionality.
Thanks to my Team members and SCN Members to write this document.
How to create a FPM Report using ACT with (almost) no coding
This guide describes step-by-step how a report can be created in NW 7.40 using the Application Creation Tool (ACT).
Coding is only required to implement authorisation checks, or if drill-down or additional action handling is required.
The guide has been written in response to this blog: ALV and FPM on SAP HANA which should be read first.
Floorplan Manager for Web Dynpro ABAP 7.4 SP08 SAP_UI SP10
Everything you, as a developer, need to know about creating and adapting beautiful UIs easily.
Two shared component instance will be created if we set shared component configuration
Dear colleagues,
In our OIF component , shared component and configuration is used.
we think that FPM will create the shared component for us and only one shared component instance should be created.
But we saw two shared component instance created by FPM, one with correct configuration, another with empty configuration.
we debugged the code and saw that
1)firstly FPM will create shared component with our configuration
2)then FPM will instance the UIBB component
3)FPM will attach the shared component instance to UIBB component usage, but in this step, it does not find the shared component instance created
in step 1), because it try to read shared instance with empty configuration.
Here is the code where we found the issue. Could you guys help check if it is wrong?
Million Thanks.
Best regards,
Tracy
Recently Featured Content in Floorplan Manager for Web Dynpro ABAP
** TEAM FPM ** - Model-Driven UI Development with FPM
See what the development manager of FPM has to say: "... generation and configuration of UIs has never been as easy as it is today with FPM ...".
** TEAM FPM ** - How to use a Java Script Chart Library in Floorplan Manager Applications
** TEAM FPM ** - Analyzing your FPM Application (in general, customizing, enhancements, ...)
** TEAM FPM ** - Drag & Drop in FPM GUIBBs
** TEAM FPM ** - Melting Groups in the Display Mode of the GUIBB Form@GL2.0
NO LIMIT - New Ways to Navigate Data with SAP HANA
ALV and FPM on SAP HANA
See and feel the Difference
Read that article by Thea Hillenbrand
Featured Content for Floorplan Manager
Check out the latest blogs from the FPM team (**TEAM FPM**)
** TEAM FPM ** - A New Filter UIBB
** TEAM FPM ** - How to Create Beautiful Apps on BOPF Objects: Simple, without Code and Deploying Latest Features (I)
** TEAM FPM ** - A Single Point of Entry to FPM UI Development
** Team FPM ** - Maximize Mode in the OVP floorplan
** TEAM FPM ** - Fly around the World with FPM & Visual Business
** Team FPM ** - Instance Styling in FPM
** Team FPM ** - Asynchronous Events
** TEAM FPM ** - Work Protection
** TEAM FPM ** - Switching from the Old List UIBB to the New List UIBB (aka List ATS UIBB)
** TEAM FPM ** - All about Translation and Texts of FPM applications
See more recently featured content here.
Webdynpro ABAP FPM: Implementing OVS (F4/value Help) for a selection field in a Search UIBB.
You already have a fully operational Search UIBB. You have done all the hard work of creating a feeder class, FPM configuration, search UIBB. The feeder class methods , get_definition, process_event and other tasks to get the output displayed are already implemented in the feeder class. During a demo, a user suggested and that would wonderful if you provide input help for one of the field. Later when I looked the input structure, the field did not have a search help assigned to it.
However, if you are not familiar with the creation of Search UIBB, you may please refer to the link below :
http://scn.sap.com/community/abap/blog/2012/12/16/search-guibb-list-guibb
Problem:
The selection screen need to have value help for a field which does not have a search help assigned to it.
Solution:
One of the options was to create a custom search help and assign it to the input structure used in the search GUIBB. The other option was to try implementing an OVS for the input field. In this document I will try to explain the procedure to implement OVS in feeder class.
It was time me to go back to the developer guide and our beloved collaborators in SCN. As per FPM developer guide, the document suggests that we follow the below procedure to implement OVS for a selection field in Search GUIBB. It take me a few hours to implement the below procedure. Hence, the idea to create a how-to document for OVS (Search GUIBB) .
Extract from the FPM developer guide
Whenever a DDIC search help is not applicable, you should consider the OVS mechanism. OVS offers a generic UI like the DDIC value help. However, you must offer the selection logic. To do this, you must provide the name of a class implementing IF_FPM_GUIBB_OVS in the field description in field OVS_NAME. If the specified name is the same as the feeder class name, then the feeder class instance will be used,
otherwise this class will be instantiated whenever it is needed.
This interface offers 4 methods:
1. HANDLE_PHASE_0 where the OVS popup can be “configured”
2. HANDLE_PHASE_1 to define the selection fields
3. HANDLE_PHASE_2 where the result list must be determined
4. HANDLE_PHASE_3 where the selected result list entry is passed back to the input field
In order to fulfill these tasks, an instance of IF_WD_OVSis passed as an importing parameter to these methods.
Step 1.
Go to SE24 and open Feeder Class in edit mode: In this feeder class, now we need to include an additional standard IF_FPM_GUIBB_OVS interface Or your could Implement IF_FPM_GUIBB_OVS_SEARCH Interface. Here in this example we will be using IF_FPM_GUIBB_OVS interface.
IF_FPM_GUIBB_OVS_SEARCH interface includes the IF_FPM_GUIBB_OVS interface and in addition provides a method SET_CURRENT_SEARCH_CRITERIA. Example : A user selects France from the dropdown list in the search criterion Country at runtime; accordingly, the search criterion City should only display cities in France in its dropdown list. IF_FPM_GUIBB_OVS_SEARCH can be used if we want to change a selection field based on value of the another selection field.
Including the interface adds 4 new methods to the feeder class, HANDLE_PHASE_0, HANDLE_PHASE_1, HANDLE_PHASE_2
and HANDLE_PHASE_3. Make sure to open each method and save it once. After that, we will implementing code in the handle_phase_2 and handle_phase_3 methods.
Step 2.
Method: IF_FPM_GUIBB_OVS~Handle_phase_2.
The method will be implemented to show the possible (F4 values ) to be displayed on screen. This method allows you to write custom logic to populate possible value help for a given field.
Input/Import Parameter:
- IV_FIELD_NAME (at runtime contains the selection field name for which the F4 (value help) is triggered.
- IO_OVS_CALLBACK ( a reference to IF_WD_OVS). This instance has method named set_output_table, which need to be used to populate the possible entries.
Declare a local structure and internal table to hold the F4 values to be displayed on screen. As always, now we will need to write a select statement to populate the internal table. After that we will pass this internal table to the set_output_table method.
TYPES : BEGIN OF lty_teds2,
status TYPE teds2-status,
descrp TYPE teds2-descrp,
END OF lty_teds2.
DATA : lit_teds2 TYPE STANDARD TABLE OF lty_teds2.
SELECT status descrp FROM teds2 INTO TABLE lit_teds2
WHERE langua = sy-langu.
io_ovs_callback->set_output_table(
EXPORTING
output = lit_teds2
* table_header = table_header
* column_texts = column_texts " Table of Name Value Pairs
).
Step 3.
Method : IF_FPM_GUIBB_OVS~Handle_phase_3.
This method will be implemented to populate the selected value in the popup screen back to the selection screen field value.
Input/Import parameter:
IV_WD_CONTEXT_ATTR_NAME: This contains the name of the selection field attribute name. For example the field you have
added in the screen is IDOCSTATUS. The value of the attribute will be INPUT_IDOCSTATUS
IO_OVS_CALLBACK : ( a reference to IF_WD_OVS). To set the selected value back to the screen, we
will be using the instance attributes SELECTION and context_element
- Define a structure similar to the line type of the values displayed in F4 help.
TYPES : BEGIN OF lty_teds2,
status TYPE teds2-status,
descrp TYPE teds2-descrp,
END OF lty_teds2.
FIELD-SYMBOLS: <ls_selection> TYPE lty_teds2.
2. Assign the attribute SELECTION to field symbol declared. Once assigned use the set_attribute method to set the value on the screen.
ASSIGN io_ovs_callback->selection->* TO <ls_selection>.
io_ovs_callback->context_element->set_attribute(
EXPORTING
value = <ls_selection>-status " Attribute Value
name = iv_wd_context_attr_name " ).
Step 4.
Now we finished implementing the methods related to OVS.The next step is to ensure that the
OVS methods get triggered only when the user clicks on Value help on the desired field in this case the idoc status.
IF_FPM_GUIBB_SEARCH~GET_DEFINITION
ls_descr_attr-name = 'IDOCSTATUS'.
ls_descr_attr-text = 'IDOC Status'.
ls_descr_attr-ovs_name = Pass the name of the feeder class
APPEND ls_descr_attr to et_field_description_attr.
Note: If you have implemented the OVS IF_FPM_GUIBB_OVS in a different class then pass the class
name of the ls_descr_attr-ovs_name attribute.
Save and activate your feeder class. It’s time to test the application.
The developer guides suggest that we implement all 4 methods to HANDLE_PHASE_0, HANDLE_PHASE_1, HANDLE_PHASE_2 and HANDLE_PHASE_3. However, in this case we have used methods handle_phase_2 and handle_phase_3 to populate and select the value back to the screen.
Handle_phase_1 : Can be used to define the fields that we want to see, the title of the popup window and other
optional values. This is done using the method of the instance IO_OVS_CALLBACK->
set_configuration
The key to implement OVS is to understand the instance IO_OVS_CALLBACK (interface
IF_WD_OVS) . Additionally, we can try
out the attributes and methods of this class we will be able to understand OVS better.
I hope the document will be helpful and if you have any comments, please feel free to post it.
TechEd&&d-code 2104: UXP261
Lecture UXP261: Simplify your Development with WD ABAP and FPM.
TechEd 2014 Lectures UXP105/261
UXP105: Big Data @ WDA/FPM
Analytical Content & Productivity Features
Bring your Big Data from SAP HANA, any DB, or ABAP BICS to the UI! Increase end-user productivity with powerful drill-down mechanisms, analytical charts, smart planning tables, and the intuitive Search and Find pattern. To provide attractive user interfaces, use the SAP Fiori-like Blue Crystal theme or utilize the cloud-based UI theme designer.
UXP261: Simplify Your Development with WD ABAP & FPM
Hands-on Session
In this session, learn how you can streamline and decrease your development efforts with Web Dynpro ABAP. Get your hands on smart wizards to easily create and enhance your Web applications. Access predefined services and capabilities to increase productivity with one click. Explore tools to efficiently analyze your applications.
***TEAM FPM*** Videos
Floorplan Manager - New Productivity Features in List GUIBB
Learn about productivity features recently introduced in the List GUIBB, and how easy it is to activate them.
**TEAM FPM** Blogs
Blogs from members of the FPM team.
You'll find the more recent blogs at the top of the table.
Blogger | Topic | Summary |
---|---|---|
Jens Ruths | Initial Search Page and subsequent External Navigation in the OVP Floorplan | Learn about the general requirements when navigating from a search result list, set up as an initial page, in an OVP application. |
Jens Boeckenhauer | A New Filter UIBB | I would like to introduce a new Generic UIBB which serves as an analytical data browser and can be used for deep drill-down into specific segments of your (potentially big) data. In combination with a results list, you can find your filtered data records and navigate into specific object maintenance. |
Jens Boeckenhauer | How to Create Beautiful Apps on BOPF Objects: Simple, without Code and Deploying Latest Features (I)
Part II: Fine-Tuning the Attribute Filter and Forms
| You may have heard that it is possible to create web applications with FPM without any UI code. You may also have heard that with NW 7.40 release, FPM offers a large variety of new modern features such as quickviews, charts, maps, responsive design features, carousels, etc. But if you want to make use of it, you may not know how to start - and how to continue. This blog aims to show you how in a guided tour, supplemented by many screenshots, easy to understand and easy to reproduce. |
Jens Boeckenhauer | A Single Point of Entry to FPM UI Development | The new 'transaction code' for FPM. |
Jens Ruths | Maximize Mode in the OVP Floorplan | With this feature, the end user can enlarge the display of a UIBB so that only this UIBB is visualized on the page and all other UIBBs are no longer displayed. |
Heike Leopold | Carousel UIBB | A new GUIBB capable of displaying icons and pictures in a carousel format. |
Julia Bender | Fly around the World with FPM & SAP Visual Business | The integration of SAP Visual Business with FPM lets you visualize your business data in an interative, graphical, 3D fashion. |
Christian Guenther | Instance Styling in FPM | Learn how to format individual UI elements in your applications using FPM's Instance Styling. |
Christian Guenther | Asynchronous Events | If you must start a backend process from your FPM application that takes longer than 1 second, you have the following options:
|
Christian Guenther | Work Protection | The basic requirement for work protection is very simple: Whenever the application contains unsaved data ('is dirty') and the user is about to leave the application, present him with a data-loss popup. Although this seems to be a rather easy requirement, there is some complexity involved. This is due to the fact that 3 parties must interact: The shell (Portal or NWBC), FPM and the business logic. |
Ulrich Miller | Switching from the Old List UIBB to the New List UIBB (aka List ATS UIBB) | How you can switch from the List UIBB to the List ATS UIBB and the new features you can expect. |
Julia Bender | Translation and Texts of FPM Applications | All you ever wanted to know about translation of FPM objects. |
Dirk Becker | Model-Driven UI Development with FPM | Deriving UIs directly from business logic relations is an old dream of Software Architects and UI Designers. Many frameworks were built to reach this goal, but most of them failed due to the complexity of the business logic which needed to be implemented. Until now! Generation and configuration of UIs has never been as easy as it is today with FPM. |
Simon Hoeg | How to use a Java Script Chart Library in Floorplan Manager Applications | This blog presents an introduction on how to involve Java Script Chart libraries in FPM applications based on the new HTML Island UI element provided by WD ABAP from SAP Netweaver 7.31 SP5. |
Julia Bender | Analyzing your FPM Application (in general, customizing, enhancements, ...) | Ever wondered which kind of analysis tools and tricks are available to get a deep insight into your FPM application? |
Jens Ruths | Drag & Drop in FPM GUIBBs | All you need to know about D&D in GUIBBs... |
Jens Ruths | Melting Groups in the Display Mode of the GUIBB Form@GL2.0 | There are often fields in forms that belong semantically together and are therefore positioned one after the other in the same row of the form. Such fields are called “Melting Groups”. Typical examples include addresses with zip code and city, street and house number, phone numbers with area code and extension, amount and their currency, or numbers and their measure unit. |
Also:
ALV and FPM on SAP HANA: See and feel the Difference - Thea Hillenbrand
Practical Help-Demos & Interactive Tutorials
Some practical help in the form of videos and step-by-step tutorials:
Videos
Topic | Date | Format |
---|---|---|
Feb 2015 | Video (06:41) | |
Lectures UXP105 & UXP261:
| SAP TechEd && d-code 2014 | Video (60:00) Video (07:31) |
Interactive Tutorials
Work your way through a selection of step-by-step, interactive tutorials.
FPM Developer/Admin Guide ('Cookbook')
From NetWeaver 7.4 SP4 onwards, the FPM Developer's Guide is combined with the FPM Administrator's Guide to form one Floorplan Manager for Web Dynpro ABAP document.
The currentversion is always available in the SAP Help Portal, Floorplan Manager for Web Dynpro ABAP
Follow the links in the table below to view previous versions of the Cookbook.
Cookbook Version |
Release Notes (What's New?) |
---|---|
Floorplan Manager for Web Dynpro ABAP - NetWeaver 7.4 SP8 (SAP_UI SP10) | RN 7.4 SP8 (SAP_UI SP10) |
| |
| |
Create a Tree GUIBB Popup with dynamic Columns
For a list of different Infotypes the selected infotype can be displayed as a popup. The popup must be dynamically adjusted at each call.
For this requirement you can use the Method GET_DEFAULT_CONFIG of the feeder class. But thismethod is calledonly onceper instance. With each newselectionofInftotypenthe columnsof the firstinfotypesare displayed.
Therefore, theID of the instancemust be changedat each call.
Method GET_DEFAULT_CONFIG of Tree GUIBB Popup
method if_fpm_guibb_tree~get_default_config. data lo_mod_austap type ref to z_mod_austap. data ls_lead_selection type z_mod_austap=>ty_austap_list. data lo_struc_descr type ref to cl_abap_structdescr. data ls_components like line of lo_struc_descr->components. data l_pnnn type string. data l_name_komp type name_komp. try. lo_mod_austap = z_mod_austap=>get_instance( ). ls_lead_selection = lo_mod_austap->get_lead_selection( ). l_pnnn = 'P' && ls_lead_selection-infty. lo_struc_descr ?= cl_abap_structdescr=>describe_by_name( p_name = l_pnnn ). loop at lo_struc_descr->components into ls_components. l_name_komp = ls_components-name. "BEGDA muss vor ENDDA sein if l_name_komp = 'ENDDA'. io_layout_config->add_column( iv_name = 'BEGDA' iv_display_type = if_fpm_guibb_constants=>gc_display_type-text_view "'TV' * iv_header = ls_components-name ). io_layout_config->add_column( iv_name = l_name_komp iv_display_type = if_fpm_guibb_constants=>gc_display_type-text_view "'TV' * iv_header = ls_components-name ). elseif l_name_komp = 'BEGDA'. "Keine Aktion else. io_layout_config->add_column( iv_name = l_name_komp iv_display_type = if_fpm_guibb_constants=>gc_display_type-text_view "'TV' * iv_header = ls_components-name ). endif. endloop. io_layout_config->set_settings( * EXPORTING * iv_visible_row_counts = * iv_visible_column_counts = * iv_sel_event_type = * iv_selection_mode = * iv_selection_change_behaviour = iv_title = `Pernr ` && ls_lead_selection-pernr && ` Infotyp ` && ls_lead_selection-infty * iv_check_mandatory = * iv_tree_width = '1000' * iv_initial_lead_selection = * iv_fixed_columns = * iv_display_empty_rows = * iv_ctxt_menu_id = * iv_suppress_selection_buttons = * iv_show_no_data_default_text = ABAP_TRUE * iv_no_data_text = iv_allow_personalization = abap_true * iv_allow_creating_views = * iv_allow_sorting = * iv_height_mode_ats = iv_fit_to_table_width = abap_true * iv_row_height_ats = * iv_export_to_excel = * iv_sel_event_type_ats = ). catch cx_root. message 'X' type 'X'. endtry. endmethod.
Method OVERRIDE_EVENT_OVP of Tree GUIBB Popup
Every time the popup is closed, the ID of the Insatz must be changed so that the Mehtod GET_DEFAULT_CONFIG is called again.
method if_fpm_ovp_conf_exit~override_event_ovp. data lt_uibb type if_fpm_ovp=>ty_t_uibb. data ls_uibb like line of lt_uibb. data l_primary_attribute type fpm_element_id. data lo_fpm type ref to if_fpm . data lo_fpm_ovp type ref to if_fpm_ovp. data l_event_id type fpm_event_id. l_event_id = io_ovp->get_event( )->mv_event_id. if l_event_id = if_fpm_constants=>gc_event-close_dialog. "FPM_CLOSE_DIALOG lo_fpm = cl_fpm_factory=>get_instance( ). lo_fpm_ovp ?= lo_fpm->get_service( iv_service_key = cl_fpm_service_manager=>gc_key_cnr_ovp ). try. lo_fpm_ovp->get_uibbs( exporting iv_content_area = 'DF_BEF_AFT' * iv_section = importing et_uibb = lt_uibb ). * CATCH cx_fpm_floorplan. " loop at lt_uibb into ls_uibb. lo_fpm_ovp->remove_uibb( ls_uibb-fpm_primary_attribute ). ls_uibb-instance_id = ls_uibb-instance_id + 1. lo_fpm_ovp->add_uibb( exporting iv_content_area = 'DF_BEF_AFT' * iv_section = is_uibb = ls_uibb * iv_add_uibb_to_new_stack = ABAP_FALSE importing ev_primary_attribute = l_primary_attribute ). * CATCH cx_fpm_floorplan. " endloop. catch cx_root. endtry. endif. endmethod.
FPM Developer's Guide SAP NetWeaver 7.03/7.31 SP7
Everything you wanted to know about developing FPM applications.