Hi,
Dynamically Change an Object Instance Floorplan (OIF)
I'm replicating the AppCC in the tutorial to suppress dialog box.
In my main view of wd component, displaying PA0000 details of employee. If user selects a row and click on Show_ADDRESS button, the Address details PA0006 for the employee displays in a Modal Dialog box.
I wanted to suppress the address dialog box on click of Show_address button. So, Implemented IF_CONF_OIF_EXIT for APPCC. Settings are all done.
Created FPM event for dialog box in Show_address button event handler and raising the event.
Though the OVERRIDE_EVENT_OIF is triggered and inturn the IO_OIF->CANCEL_EVENT is processed, still the address dialog box appears.
Please share your thoughts, how to suppress the dialog.
method OVERRIDE_EVENT_OIF .
DATA: lv_ev_val TYPE string.
IF io_oif->mo_event->mv_event_id = cl_fpm_event=>GC_EVENT_OPEN_DIALOG_BOX.
* io_oif->mo_event->mo_event_data->get_value( EXPORTING iv_key = 'B1'
* IMPORTING ev_value = lv_ev_val ).
* IF lv_ev_val = 'BUTTON1'.
io_oif->cancel_event( ).
* ENDIF.
* io_oif->set_variant( 'VARIANT_2' ).
ENDIF.
endmethod.
Button Event Handler:
*********************************************************
method ONACTIONSHOW .
DATA: lo_nd_addr TYPE REF TO if_wd_context_node,
lo_nd_org TYPE REF TO if_wd_context_node,
lo_el_org TYPE REF TO if_wd_context_element,
lo_el_addr TYPE REF TO if_wd_context_element,
ls_org TYPE wd_this->element_org,
lt_addr TYPE wd_this->elements_addr,
l_cmp_api TYPE REF TO if_wd_component,
l_win_mngr TYPE REF TO if_wd_window_manager,
l_win TYPE REF TO if_wd_window,
l_msg_mngr TYPE REF TO if_wd_message_manager,
* l_win TYPE REF TO if_wd_window,
lv_pernr TYPE pernr.
lo_nd_org = wd_context->get_child_node( wd_this->wdctx_org ).
lo_el_org = lo_nd_org->get_element( ).
CALL METHOD lo_el_org->get_static_attributes
IMPORTING
static_attributes = ls_org.
l_cmp_api = wd_comp_controller->wd_get_api( ).
SELECT pernr endda begda uname anssa stras ort01 ort02 pstlz land1
FROM pa0006
INTO CORRESPONDING FIELDS OF TABLE lt_addr
WHERE pernr = ls_org-pernr.
IF sy-subrc eq 0.
lo_nd_addr = wd_context->get_child_node( wd_this->wdctx_addr ).
lo_nd_addr->bind_table( lt_addr ).
l_win_mngr = l_cmp_api->get_window_manager( ).
CALL METHOD l_win_mngr->create_window
EXPORTING
* modal = ABAP_TRUE
window_name = 'ADDR_WINDOW'
* title =
* close_button = ABAP_TRUE
button_kind = IF_WD_WINDOW=>co_button_ok
message_type = IF_WD_WINDOW=>CO_MSG_TYPE_NONE
* close_in_any_case = ABAP_TRUE
* message_display_mode =
* default_button =
* is_resizable = ABAP_TRUE
receiving
window = l_win.
l_win->open( ).
ELSE.
l_msg_mngr = l_cmp_api->get_message_manager( ).
l_msg_mngr->report_error_message(
message_text = 'No Address for the selected employee' ).
ENDIF.
**************************************************************************************************
DATA: lo_fpm_event TYPE REF TO cl_fpm_event,
lo_fpm TYPE REF TO if_fpm.
CALL METHOD cl_fpm_event=>create_by_id
EXPORTING
iv_event_id = cl_fpm_event=>GC_EVENT_OPEN_DIALOG_BOX
* io_event_data =
* iv_action_type = IF_FPM_CONSTANTS=>GC_ACTION_TYPE-STANDARD
receiving
ro_event = lo_fpm_event.
lo_fpm = cl_fpm_factory=>get_instance( ).
lo_fpm_event->mo_event_data->set_value( EXPORTING iv_key = 'B1'
iv_value = 'BUTTON1').
lo_fpm->raise_event( EXPORTING IO_EVENT = lo_fpm_event ).
**************************************************************************************************
endmethod.
regards,
Shivakrishna E