Purpose:
Reporting attribute error messages or standard / T100 messages on OVS window.
Scenario:
I would like to explain the scenario of validating the fields on OVS window and reporting error messages as below
Key logic: Getting the reference of context element of context node "INPUT" of component WDR_OVS
Pre-requisite:
Basic knowledge of Webdynpro ABAP, OVS concept & OO ABAP
Step by step process:
Here, I am going to create a simple web dynpro application with input fields CARRID & CARRNAME and attaching OVS help on field CARRID.
Step 1:
Create a WDA component with a view as below
Step 2:
Create component usage of component WDR_OVS as below
Step 3:
Add the used controller of TEST_OVS in view V_MAIN as below
Step 4:
Create context node SCARR with attributes CARRID & CARRNAME. Attach the ovs component to attribute CARRID as below
Step 5:
Create input fields for context node SCARR in view layout as below
Step 6:
Create an event handler method ON_OVS as below
Add the below code in ON_OVS event handler method
METHOD on_ovs .
TYPES:
BEGIN OF lty_stru_input,
carrid TYPE scarr-carrid,
END OF lty_stru_input.
TYPES:
BEGIN OF lty_stru_output,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
END OF lty_stru_output.
DATA: ls_search_input TYPE lty_stru_input,
lt_select_list TYPE STANDARD TABLE OF lty_stru_output,
ls_text TYPE wdr_name_value,
lt_label_texts TYPE wdr_name_value_list,
lt_column_texts TYPE wdr_name_value_list,
lv_window_title TYPE string,
lv_table_header TYPE string.
FIELD-SYMBOLS: <ls_query_params> TYPE lty_stru_input,
<ls_selection> TYPE lty_stru_output.
CASE ovs_callback_object->phase_indicator.
WHEN if_wd_ovs=>co_phase_0. "configuration phase, may be omitted
ls_text-name = `CARRNAME`. "must match a field name of search
ls_text-value = `Airline Name`. "wd_assist->get_text( `001` ).
INSERT ls_text INTO TABLE lt_label_texts.
INSERT ls_text INTO TABLE lt_column_texts.
ovs_callback_object->set_configuration(
label_texts = lt_label_texts
column_texts = lt_column_texts
window_title = lv_window_title
table_header = lv_table_header ).
WHEN if_wd_ovs=>co_phase_1. "set search structure and defaults
ovs_callback_object->context_element->get_static_attributes(
IMPORTING static_attributes = ls_search_input ).
"pass the values to the OVS component
ovs_callback_object->set_input_structure(
input = ls_search_input ).
WHEN if_wd_ovs=>co_phase_2.
IF ovs_callback_object->query_parameters IS NOT BOUND.
******** TODO exception handling
ENDIF.
ASSIGN ovs_callback_object->query_parameters->*
TO <ls_query_params>.
IF NOT <ls_query_params> IS ASSIGNED.
******** TODO exception handling
ENDIF.
"==========================================
" Report query parameter table
"==========================================
DATA ls_so_carrid TYPE selopt.
DATA lt_so_carrid TYPE TABLE OF selopt.
CLEAR ls_so_carrid.
CLEAR lt_so_carrid.
IF <ls_query_params>-carrid IS NOT INITIAL.
ls_so_carrid-sign = 'I'.
ls_so_carrid-option = 'EQ'.
ls_so_carrid-low = <ls_query_params>-carrid.
FIND '*' IN ls_so_carrid-low.
IF sy-subrc IS INITIAL .
ls_so_carrid-option = 'CP'.
ENDIF.
APPEND ls_so_carrid TO lt_so_carrid.
ENDIF.
"=================================================
"Note: Do not query database directy inside view, instead
" call a method/function module to get data
" call business logic for a table of possible values
"=================================================
SELECT carrid
carrname
FROM scarr
INTO TABLE lt_select_list
WHERE carrid IN lt_so_carrid.
IF lt_select_list[] IS INITIAL.
"==========================================
" Report attribute error message here
"==========================================
DATA lo_ovs TYPE REF TO iwci_wdr_ovs.
DATA lo_context TYPE REF TO if_wd_context.
DATA lo_context_node TYPE REF TO if_wd_context_node.
DATA lo_el TYPE REF TO if_wd_context_element.
DATA lo_ovs_listener TYPE REF TO if_wdr_ovs_listener.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
" get reference of ovs component usage
lo_ovs = wd_this->wd_cpifc_test_ovs( ).
" get the context of ovs component
lo_context = lo_ovs->wd_get_api( )->get_context( ).
" get input node reference
lo_context_node = lo_context->root_node->get_child_node( 'INPUT').
" get reference to the context element by using lead index
lo_el = lo_context_node->get_element( ).
" get reference to message manager
lo_message_manager = wd_this->wd_get_api( )->get_message_manager( ).
* report message
CALL METHOD lo_message_manager->report_attribute_error_message
EXPORTING
message_text = 'Invalid entry - ( Attribute error message )'
element = lo_el
attribute_name = 'CARRID'. " Attribute Name
"==========================================
" Report standard error message here
"==========================================
DATA lt_messages TYPE if_wd_ovs=>ty_t_messages.
DATA ls_messages LIKE LINE OF lt_messages.
CLEAR ls_messages.
CLEAR lt_messages.
ls_messages-standard_message-text = 'Invalid entry ( Standard message )' .
ls_messages-standard_message-type = if_wd_message_manager=>co_type_error.
APPEND ls_messages TO lt_messages.
ovs_callback_object->set_messages( messages = lt_messages ).
ENDIF.
ovs_callback_object->set_output_table( output = lt_select_list ).
WHEN if_wd_ovs=>co_phase_3.
* apply result
IF ovs_callback_object->selection IS NOT BOUND.
******** TODO exception handling
ENDIF.
ASSIGN ovs_callback_object->selection->* TO <ls_selection>.
IF <ls_selection> IS ASSIGNED.
ovs_callback_object->context_element->set_static_attributes(
static_attributes = <ls_selection> ).
ENDIF.
ENDCASE.
ENDMETHOD.
Now, save and activate the WDA component.
Step 7:
Create a web dynpro application as below
Output: ( Initial OVS window )
Output: ( Initial search result list )
Output: ( Invalid entry in the field CARRID )
Hope this document is helpful for those looking for validation on OVS input fields.
Comments / Suggestions are always welcome
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
37 | |
10 | |
7 | |
5 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |