Skip to Content
0
Former Member
Jan 10, 2008 at 10:45 PM

refresh_table_display doesn`t work

169 Views

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