Hi!
I hope anyone can help.
I`ve got the problem, that the Method "refresh_table_display" not work correct. If i delete some datasets its work fine, but if i insert a new line the table refresh doesn`t work.
Here is my coding :
REPORT y0_act_call_scripts.
----
CLASS lcl_event_handler DEFINITION
----
*
----
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS. "lcl_event_handler DEFINITION
DATA: lt_lnktyp TYPE TABLE OF y0act_lnktyp_mo,
lt_lnktyp_output TYPE TABLE OF y0act_lnktyp_mo,
wa_lnktyp TYPE y0act_lnktyp_mo.
DATA: lt_lnktyp_del TYPE TABLE OF y0act_lnktyp_mo,
lt_lnktyp_add TYPE TABLE OF y0act_lnktyp_mo,
lt_lnktyp_cha TYPE TABLE OF y0act_lnktyp_mo.
DATA: obj_custom_container TYPE REF TO cl_gui_custom_container,
obj_grid TYPE REF TO cl_gui_alv_grid.
DATA: lt_fieldcatalog TYPE lvc_t_fcat,
wa_fieldcatalog TYPE lvc_s_fcat.
DATA: obj_event_handler TYPE REF TO lcl_event_handler.
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME.
PARAMETERS: p_org TYPE y0act_lnktyp_mo-organisation MATCHCODE OBJECT y0cus_search_orgunit OBLIGATORY.
SELECTION-SCREEN: SKIP 1.
PARAMETERS: p_onpr RADIOBUTTON GROUP b.
PARAMETERS: p_offpr RADIOBUTTON GROUP b.
SELECTION-SCREEN: END OF BLOCK a.
START-OF-SELECTION.
PERFORM get_data.
CALL SCREEN 0100.
END-OF-SELECTION.
&----
*& Form get_data
&----
text
----
FORM get_data.
Get call script data
DATA: lv_num_from TYPE y0act_lnktyp_mo-type,
lv_num_to TYPE y0act_lnktyp_mo-type.
Set num range for data selection
IF p_onpr = 'X'.
lv_num_from = '00000'.
lv_num_to = '30000'.
ELSEIF p_offpr = 'X'.
lv_num_from = '40000'.
lv_num_to = '60000'.
ENDIF.
Get call script data
SELECT *
INTO TABLE lt_lnktyp
FROM y0act_lnktyp_mo
WHERE organisation = p_org AND
type BETWEEN lv_num_from AND lv_num_to.
CLEAR: lv_num_from, lv_num_to.
ENDFORM. "get_data
&----
*& Form init_screen
&----
text
----
FORM init_screen.
DATA: wa_layout TYPE lvc_s_layo.
DATA: lt_functions TYPE ui_functions,
wa_functions TYPE ui_func.
IF obj_custom_container IS INITIAL.
Create custom container
CREATE OBJECT obj_custom_container
EXPORTING
container_name = 'CUSTOM_CONTAINER'.
Create ALV grid
CREATE OBJECT obj_grid
EXPORTING
i_parent = obj_custom_container.
Set layout options
CONCATENATE text-t01 p_org INTO wa_layout-grid_title SEPARATED BY space.
wa_layout-cwidth_opt = 'X'.
wa_layout-sel_mode = 'A'.
Disable standard alv functions
wa_functions = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND wa_functions TO lt_functions.
wa_functions = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND wa_functions TO lt_functions.
Modify fieldcatalog
PERFORM build_fieldcatalog.
Set outputdata
lt_lnktyp_output[] = lt_lnktyp[].
Show table
CALL METHOD obj_grid->set_table_for_first_display
EXPORTING
i_buffer_active =
i_bypassing_buffer =
i_consistency_check =
i_structure_name = 'Y0ACT_LNKTYP_MO'
is_variant =
i_save =
i_default = 'X'
is_layout = wa_layout
is_print =
it_special_groups =
it_toolbar_excluding = lt_functions
it_hyperlink =
it_alv_graphics =
it_except_qinfo =
ir_salv_adapter =
CHANGING
it_outtab = lt_lnktyp_output
it_fieldcatalog = lt_fieldcatalog
it_sort =
it_filter =
.
CALL METHOD obj_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD obj_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
Create eventhandler
CREATE OBJECT obj_event_handler.
Register events
SET HANDLER obj_event_handler->handle_data_changed FOR obj_grid.
ENDIF.
ENDFORM. "init_screen
&----
*& Form get_data_changes
&----
text
----
-->OBJ_DATA text
----
FORM get_data_changes USING obj_data TYPE REF TO cl_alv_changed_data_protocol.
DATA: lv_range_type TYPE inri-nrrangenr.
DATA: lv_object TYPE nrobj VALUE 'Y0ACT_LNK'.
DATA: wa_row TYPE lvc_s_moce.
FIELD-SYMBOLS: <lnktyp> TYPE ANY TABLE.
Check if rows to deleting
IF NOT obj_data->mt_deleted_rows IS INITIAL.
LOOP AT obj_data->mt_deleted_rows INTO wa_row.
READ TABLE lt_lnktyp INTO wa_lnktyp INDEX wa_row-row_id.
APPEND wa_lnktyp TO lt_lnktyp_del.
CLEAR: wa_row, wa_lnktyp.
ENDLOOP.
Delete entries in internal table
LOOP AT lt_lnktyp_del INTO wa_lnktyp.
DELETE TABLE lt_lnktyp FROM wa_lnktyp.
Check if entry also in add table
DELETE lt_lnktyp_add
WHERE sfalnktype = wa_lnktyp-sfalnktype.
Check if entry in change table
DELETE lt_lnktyp_cha
WHERE sfalnktype = wa_lnktyp-sfalnktype.
CLEAR: wa_lnktyp.
ENDLOOP.
ENDIF.
IF NOT obj_data->mt_inserted_rows IS INITIAL.
IF wa_lnktyp-sfalnktype IS INITIAL.
If guid is initial then entry is new
IF p_onpr = 'X'.
lv_range_type = 'ON'.
ELSEIF p_offpr = 'X'.
lv_range_type = 'OF'.
ENDIF.
Get new number for type
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = lv_range_type
object = lv_object
IMPORTING
number = wa_lnktyp-type.
Create new guid
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = wa_lnktyp-sfalnktype.
Check additional data
IF wa_lnktyp-organisation IS INITIAL.
wa_lnktyp-organisation = p_org.
ENDIF.
IF wa_lnktyp-source IS INITIAL.
wa_lnktyp-source = 'ACT'.
ENDIF.
APPEND wa_lnktyp TO lt_lnktyp_add.
APPEND wa_lnktyp TO lt_lnktyp.
ENDIF.
ENDIF.
REFRESH lt_lnktyp_output.
lt_lnktyp_output[] = lt_lnktyp[].
ENDFORM. "get_data_changes
&----
*& Form save_data
&----
text
----
FORM save_data.
DATA: lv_answer(1) TYPE c.
IF lt_lnktyp_del IS INITIAL AND
lt_lnktyp_add IS INITIAL AND
lt_lnktyp_cha IS INITIAL.
EXIT.
ENDIF.
Popup to confirm save
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question = text-p01
text_button_1 = 'Ja'(001)
text_button_2 = 'Nein'(002)
display_cancel_button = ' '
IMPORTING
answer = lv_answer.
IF lv_answer = '2'.
EXIT.
ENDIF.
Send data to delete
IF NOT lt_lnktyp_del IS INITIAL.
LOOP AT lt_lnktyp_del INTO wa_lnktyp.
PERFORM send_bdoc USING '3'.
CLEAR: wa_lnktyp.
ENDLOOP.
REFRESH: lt_lnktyp_del.
ENDIF.
Send data to add
IF NOT lt_lnktyp_add IS INITIAL.
LOOP AT lt_lnktyp_add INTO wa_lnktyp.
PERFORM send_bdoc USING '1'.
CLEAR: wa_lnktyp.
ENDLOOP.
REFRESH: lt_lnktyp_add.
ENDIF.
Send data to change
IF NOT lt_lnktyp_cha IS INITIAL.
LOOP AT lt_lnktyp_cha INTO wa_lnktyp.
PERFORM send_bdoc USING '1'.
CLEAR: wa_lnktyp.
ENDLOOP.
REFRESH: lt_lnktyp_cha.
ENDIF.
ENDFORM. "save_data
&----
*& Form send_bdoc
&----
text
----
FORM send_bdoc USING lv_task TYPE integer.
DATA: wa_message_header TYPE smog_msgh,
lt_lnktyp_mo TYPE y0act_lnktyp_mo000t,
wa_lnktyp_mo TYPE y0act_lnktyp_mo000,
lt_smolngtxt TYPE smw1ttlngt,
lt_smolngbin TYPE smw1ttlngr.
DATA: lt_field TYPE TABLE OF smog_sfldn,
wa_field TYPE smog_sfldn.
Build data for bdoc
MOVE-CORRESPONDING wa_lnktyp TO wa_lnktyp_mo.
wa_lnktyp_mo-task = lv_task.
APPEND wa_lnktyp_mo TO lt_lnktyp_mo.
Create message header
wa_message_header-site_id = 'CRM-ONLINE'.
wa_message_header-qname = 'CRM'.
wa_message_header-snd_date = sy-datum.
wa_message_header-snd_time = sy-uzeit.
wa_message_header-tr_user = sy-uname.
wa_message_header-root_obj = 'Y0ACT_LNKTYP'.
Create guid for message header
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_32 = wa_message_header-message_id.
Set fields for sendbits
wa_field-fieldname = 'SFALNKTYPE'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'TYPE'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'DATE_FROM'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'DATE_TO'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'TEXT'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'ACTIVE'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'ORGANISATION'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'SOURCE'.
APPEND wa_field TO lt_field.
wa_field-fieldname = 'SORT_ORDER'.
APPEND wa_field TO lt_field.
Create sendbits
CALL FUNCTION 'SMO_SNDBITS_SETX'
EXPORTING
structurename = 'Y0ACT_LNKTYP_MO'
ddic = ''
bdocname = 'Y0ACT_LNKTYP'
TABLES
sfields = lt_field
CHANGING
sndbits = wa_lnktyp_mo-sendbits
EXCEPTIONS
structure_not_found = 1
wrong_fieldname = 2
OTHERS = 3.
APPEND wa_lnktyp_mo TO lt_lnktyp_mo.
Send BDOC
CALL FUNCTION 'Y0ACT_LNKTYP_I01'
EXPORTING
message_header = wa_message_header
TABLES
y0act_lnktyp_mo = lt_lnktyp_mo
smolngtxt = lt_smolngtxt
smolngbin = lt_smolngbin.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDFORM. "send_bdoc
&----
*& Form build_fieldcatalog
&----
text
----
FORM build_fieldcatalog.
Get table structure
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'Y0ACT_LNKTYP_MO'
CHANGING
ct_fieldcat = lt_fieldcatalog.
Modify Fieldcatalog
LOOP AT lt_fieldcatalog INTO wa_fieldcatalog.
CASE wa_fieldcatalog-fieldname.
WHEN 'DATE_FROM' OR
'DATE_TO' OR
'TEXT' OR
'ACTIVE' OR
'SORT_ORDER'.
wa_fieldcatalog-edit = 'X'.
WHEN 'ORGANISATION'.
wa_fieldcatalog-auto_value = 'X'.
WHEN 'SOURCE'.
wa_fieldcatalog-auto_value = 'X'.
CLEAR: wa_fieldcatalog-domname, wa_fieldcatalog-ref_table.
ENDCASE.
MODIFY lt_fieldcatalog FROM wa_fieldcatalog.
CLEAR: wa_fieldcatalog.
ENDLOOP.
ENDFORM. "build_fieldcatalog
----
CLASS lcl_event_handler IMPLEMENTATION
----
*
----
CLASS lcl_event_handler IMPLEMENTATION.
METHOD handle_data_changed.
PERFORM get_data_changes USING er_data_changed.
CALL METHOD obj_grid->refresh_table_display( ).
ENDMETHOD. "handle_data_changed
ENDCLASS. "lcl_event_handler IMPLEMENTATION
&----
*& Module PBO_0100 OUTPUT
&----
text
----
MODULE pbo_0100 OUTPUT.
SET PF-STATUS '0100'.
PERFORM init_screen.
ENDMODULE. " PBO_0100 OUTPUT
&----
*& Module PAI_0100 INPUT
&----
text
----
MODULE pai_0100 INPUT.
DATA: lv_ok_code TYPE sy-ucomm.
CASE lv_ok_code.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'SAVE'.
ENDCASE.
ENDMODULE. " PAI_0100 INPUT
Regards,
Anton