vielleicht hilft dir mein quelltext...
*&---------------------------------------------------------------------*
*& Report Z_AHARTL_7
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_ahartl_7.
TABLES zlo_ec_lock.
*&---------------------------------------------------------------------*
*& DATA Anweisung
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
*****************************************************************
"Variablen AVL GRID
DATA: "Instanz auf das AVL Grid Control
grid TYPE REF TO cl_gui_alv_grid,
"Instanz auf den ALV Grid Container
gc_container TYPE REF TO cl_gui_custom_container,
"Name des AVL Grid Containers auf dem Dympro
gn_container TYPE scrfname VALUE 'ALV_CONTAINER',
"Interne Tabelle für die Daten der T-Tabelle
gt_zlo_ec_lock TYPE TABLE OF zlo_ec_lock WITH HEADER LINE,
" Sicherung der internen Tabelle.
gs_zlo_ec_lock TYPE SORTED TABLE OF zlo_ec_lock
WITH UNIQUE DEFAULT KEY
WITH HEADER LINE,
"Tabellen Layout
gs_layout TYPE lvc_s_layo.
* Paramter Variablen
"für Parameter I_SAVE ( A = Laden und Speichern des Layouts erlaubt)
DATA: x_save VALUE 'A',
" Für Parmeter IS_VARIANT
gs_variant TYPE disvariant.
*****************************************************************
" Constante Zur Speicherung der Zeilenlänge für das Text Controle
CONSTANTS: line_length TYPE i VALUE 131.
CONSTANTS:
gc_stern TYPE c VALUE '*',
gc_tdid TYPE tdid VALUE 'ZTXT', " Text-ID
gc_object TYPE tdobject VALUE 'ZLO_ECLOCK'. " Texte: Anwendungsobjekt
DATA: "Instanz von Textedit
editor TYPE REF TO cl_gui_textedit,
"Instanz des Costum Containers
text_container TYPE REF TO cl_gui_custom_container.
DATA:
g_text_tab TYPE STANDARD TABLE OF tline,
gt_textedit TYPE STANDARD TABLE OF tdline,
g_name TYPE tdobname, " ObjektName
g_header TYPE thead,
gwa_ec_lock TYPE zlo_ec_lock,
readonly TYPE i.
*****************************************************************
"Dynpro Code Übergabefeld
DATA: ok_code LIKE sy-ucomm,
ok_save LIKE sy-ucomm,
"Titelfelde
dtitle TYPE string VALUE 'MAIN_100'.
*****************************************************************
"Definiton des Selection-Screens
SELECTION-SCREEN BEGIN OF SCREEN 500
AS WINDOW TITLE text-010.
SELECTION-SCREEN: SKIP,
BEGIN OF BLOCK b1
WITH FRAME TITLE text-020.
SELECT-OPTIONS:
so_matnr FOR zlo_ec_lock-matnr, "NO-EXTENSION,
so_werks FOR zlo_ec_lock-werks, "NO-EXTENSION,
so_ecnr FOR zlo_ec_lock-ecnr, "NO-EXTENSION,
so_kunwe FOR zlo_ec_lock-kunwe, "NO-EXTENSION,
so_datab FOR zlo_ec_lock-datab, "NO-EXTENSION,
so_zgst FOR zlo_ec_lock-zgstnd. "NO-EXTENSION. "M001
SELECTION-SCREEN: END OF BLOCK b1,
END OF SCREEN 500 .
"Das Ereigniss START-OF-SELECTION
START-OF-SELECTION.
"Aufruf des Dynpros mit der Nummer 500
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
"Aufruf des Dynpros 100
CALL SCREEN 100.
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
* Process Before Output
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* some initialization
readonly = 0.
"Festlegen des Status für das Dynpro
SET PF-STATUS 'SCREEN_100'.
"Festlegen des Titels für das Dynpro
"SET TITLEBAR title OF PROGRAM prog WITH p1.
SET TITLEBAR dtitle.
"Überprüfen ob eine Instanz des Custom Containers besteht
IF gc_container IS INITIAL.
"Neuer Instanz der Custom Containers wird erstellt
CREATE OBJECT gc_container " Containers auf dem Dympro
EXPORTING
container_name = gn_container. "Eingabe Parameter ist der Name des
CREATE OBJECT grid "Neue Instanz des ALV Grid Controls wird erstellt
EXPORTING "Bezug auf den 'Parent' Container
i_parent = gc_container.
ENDIF.
"Die Spaltenbreite wird optimiert
gs_layout-cwidth_opt = 'X'.
"Füllen der Internen Tabelle
SELECT *
FROM zlo_ec_lock
INTO TABLE gt_zlo_ec_lock
WHERE matnr IN so_matnr AND
werks IN so_werks AND
ecnr IN so_ecnr AND
kunwe IN so_kunwe AND
datab IN so_datab AND
zgstnd IN so_zgst.
" Befüllen der Sicherungstabelle
gs_zlo_ec_lock[] = gt_zlo_ec_lock[].
"Layout-Eigenschaften definieren
gs_variant-report = sy-repid.
grid->register_edit_event( EXPORTING i_event_id = 18 ) .
"Darstellung der Tabelle für den Start-Bildschirm
CALL METHOD grid->set_table_for_first_display
"Übergabe der Tabellen Struktur
EXPORTING i_structure_name = 'zlo_ec_lock'
is_variant = gs_variant " Legt die Variante Fest
i_save = x_save " Legt die Speicherung fest
is_layout = gs_layout
"Übergabe der Tabellenwerte
CHANGING it_outtab = gt_zlo_ec_lock[].
PERFORM create_text_control.
CALL METHOD editor->set_status_text
EXPORTING
status_text = text-011.
"PERFORM read_text_and_edit.
ENDMODULE. "STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
* Process After Input
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ok_save = ok_code.
CLEAR ok_code.
"Code Übergabe prüfen.
CASE ok_save.
"Fall EXIT
WHEN 'EXIT'.
"Ruft das Modul 'exit' auf
PERFORM exit.
"FALL SWITCH
WHEN 'EDIT_ALV'.
"Ruft das Modul 'edit' auf
PERFORM edit_alv_grid.
WHEN 'CHANGE'.
CALL SELECTION-SCREEN 500 STARTING AT 10 10.
WHEN 'SAVE'.
PERFORM save.
WHEN 'IMP'.
PERFORM get_text_and_save.
"PERFORM free_text_control.
WHEN 'EDIT_TEXT'.
PERFORM read_text_and_edit.
WHEN OTHERS.
ENDCASE.
ENDMODULE. "user_command_0100 INPUT
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form exit
*&---------------------------------------------------------------------*
* beendet das akutelle Dympro
*----------------------------------------------------------------------*
FORM exit.
LEAVE PROGRAM.
ENDFORM. "exit
*&---------------------------------------------------------------------*
*& Form edit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM edit_alv_grid.
"Ausgabe-String in Statusleiste bei ok_code 'CHANGE'
DATA: v_string TYPE string VALUE 'Anzeigen <-> Ändern'.
"Abfrage des AVL Grid Status
IF grid->is_ready_for_input( ) EQ 0.
"sperrt die Tabelle ZLO_EC_LOCK
PERFORM enqueue.
" Eingabe Modus des AlV Grid wird gesetzt
CALL METHOD grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
" Layout wird zur Eingabe freigegeben
gs_layout-edit = 'X'.
" Message in der Statusleiste
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = v_string.
ELSE.
"entspert die Tabelle ZLO_EC_LOCK
PERFORM dequeue.
" Anzeigemodus des Grid Views
CALL METHOD grid->set_ready_for_input
EXPORTING
i_ready_for_input = 0. " Übergabe Parameter
" Das Layout wird auf 'nicht eingabebereit gesetzt'
gs_layout-edit = ''.
"Message in der Statusleiste
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = v_string.
ENDIF.
readonly = editor->m_readonly_mode.
IF readonly <> editor->false.
readonly = editor->false.
ELSE.
readonly = editor->true.
ENDIF.
* set the new readonly_mode
CALL METHOD editor->set_readonly_mode
EXPORTING
readonly_mode = readonly.
ENDFORM. " SWITCH_EDIT_MODE
*&---------------------------------------------------------------------*
*& Form save
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM save.
" die Interne Tabelle wird mit dem ALV Grid abgeglichen
CALL METHOD grid->check_changed_data.
" Filterung der zu löschenden Datensätze.
LOOP AT gt_zlo_ec_lock.
DELETE TABLE gs_zlo_ec_lock FROM gt_zlo_ec_lock.
ENDLOOP.
" Löschen der Datensätze auf der Datenbank
DELETE zlo_ec_lock
FROM TABLE gs_zlo_ec_lock.
" Anpassen der geänderten Datensätze auf der DB
MODIFY zlo_ec_lock
FROM TABLE gt_zlo_ec_lock.
" Einfügen der 'neuen Datensätze' in die DB
INSERT zlo_ec_lock
FROM TABLE gt_zlo_ec_lock
ACCEPTING DUPLICATE KEYS.
"ALV Grid wird neu geladen (mit Änderungen)
CALL METHOD grid->refresh_table_display.
IF sy-subrc = 0.
COMMIT WORK. " Schreiben der gesamten Änderungen in die DB
MESSAGE s782(/bev2/edmess1).
ELSE.
ROLLBACK WORK. " Zurückschreiben der Datenbank bei Fehlern
MESSAGE s822(/bev2/edmess1).
ENDIF.
ENDFORM. "save
*&---------------------------------------------------------------------*
*& Form enqueue
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM enqueue.
CALL FUNCTION 'ENQUEUE_EZ_AHLOCK'
EXPORTING
mode_zlo_ec_lock = 'X'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3
.
CASE sy-subrc.
WHEN 0.
MESSAGE s888(sabapdocu) WITH 'Enqueue successful'(001).
WHEN 1.
MESSAGE e888(sabapdocu) WITH 'Record already'(002) 'locked by'(003)
sy-uname.
CALL TRANSACTION 'SM12'.
WHEN 2 OR 3.
MESSAGE e888(sabapdocu) WITH 'Error in enqueue!'(004)
'SY-SUBRC:' sy-subrc.
ENDCASE.
ENDFORM. "enqueue
*&---------------------------------------------------------------------*
*& Form dequeue
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM dequeue.
CALL FUNCTION 'DEQUEUE_EZ_AHLOCK'
EXPORTING
mode_zlo_ec_lock = 'X'
EXCEPTIONS
OTHERS = 1.
CASE sy-subrc.
WHEN 0.
MESSAGE s888(sabapdocu) WITH 'Dequeue successful'(005).
WHEN 1.
MESSAGE e888(sabapdocu) WITH 'Error in dequeue!'(006).
ENDCASE.
ENDFORM. "dequeue
*******************************************************************
*&---------------------------------------------------------------------*
*& Form create_text_control
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM create_text_control.
CHECK gwa_ec_lock IS INITIAL.
IF editor IS INITIAL.
CREATE OBJECT text_container
EXPORTING
container_name = 'TEXT_CTRL'
EXCEPTIONS
OTHERS = 1.
CREATE OBJECT editor
EXPORTING
parent = text_container
wordwrap_mode = cl_gui_textedit=>wordwrap_at_windowborder
* wordwrap_mode = cl_gui_textedit=>wordwrap_at_fixed_position
wordwrap_position = line_length
wordwrap_to_linebreak_mode = cl_gui_textedit=>true
EXCEPTIONS
OTHERS = 1.
* Set the default mode for the editor
CALL METHOD editor->set_statusbar_mode
EXPORTING
statusbar_mode = 1.
CALL METHOD editor->set_toolbar_mode
EXPORTING
toolbar_mode = 1.
CALL METHOD editor->set_readonly_mode
EXPORTING
readonly_mode = 1.
*
ENDIF. "
ENDFORM. " create_text_control
*&---------------------------------------------------------------------*
*& Form read_text_and_edit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM read_text_and_edit.
** local objekt declaration
FIELD-SYMBOLS:
<tdline> TYPE tdline,
<tline> TYPE tline.
** -----------------------------------
* CHECK NOT gwa_ec_lock IS INITIAL.
* Mandt + MatNr + Werks +
CONCATENATE sy-mandt gt_zlo_ec_lock-matnr gt_zlo_ec_lock-werks
* EcNr + KunWE + DatAb +
gt_zlo_ec_lock-ecnr gt_zlo_ec_lock-kunwe gt_zlo_ec_lock-datab
* FREITEXT ergeben den Namen zum Text
text-fto INTO g_name SEPARATED BY '_'.
TRANSLATE g_name USING '*!'.
CLEAR gt_textedit[].
CALL FUNCTION 'READ_TEXT'
EXPORTING
* CLIENT = SY-MANDT
id = gc_tdid
language = sy-langu
name = g_name
object = gc_object
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
IMPORTING
header = g_header
TABLES
lines = g_text_tab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8
.
IF sy-subrc <> 0.
* Header wurde nicht gefüllt, nachholen
g_header-tdobject = gc_object.
g_header-tdname = g_name.
g_header-tdid = gc_tdid.
g_header-tdspras = sy-langu.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
CLEAR: sy-msgid, sy-msgty, sy-msgno, sy-msgv1,sy-msgv2,sy-msgv3,sy-msgv4.
CLEAR g_text_tab.
APPEND INITIAL LINE TO gt_textedit.
ELSE.
LOOP AT g_text_tab[] ASSIGNING <tline>.
APPEND INITIAL LINE TO gt_textedit[] ASSIGNING <tdline>.
<tdline> = <tline>-tdline.
ENDLOOP.
ENDIF.
CALL FUNCTION 'INIT_TEXT'
EXPORTING
id = gc_tdid
language = sy-langu
name = g_name
object = gc_object
IMPORTING
header = g_header
TABLES
lines = g_text_tab
* EXCEPTIONS
* ID = 1
* LANGUAGE = 2
* NAME = 3
* OBJECT = 4
* OTHERS = 5
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD editor->set_text_as_r3table
EXPORTING
table = gt_textedit[]
EXCEPTIONS
error_dp = 1
error_dp_create = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " read_text_and_edit
*&---------------------------------------------------------------------*
*& Form get_text_and_save
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_text_and_save.
* local objekt declaration
FIELD-SYMBOLS:
<tdline> TYPE tdline,
<tline> TYPE tline.
* -----------------------------------
CHECK NOT editor IS INITIAL.
CALL METHOD editor->get_text_as_r3table
IMPORTING
table = gt_textedit[]
EXCEPTIONS
error_dp = 1
error_cntl_call_method = 2
error_dp_create = 3
potential_data_loss = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 4.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR g_text_tab[].
LOOP AT gt_textedit[] ASSIGNING <tdline>.
APPEND INITIAL LINE TO g_text_tab[] ASSIGNING <tline>.
<tline>-tdformat = ''.
<tline>-tdline = <tdline>.
ENDLOOP.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
header = g_header
* INSERT = ' '
* SAVEMODE_DIRECT = ' '
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
TABLES
lines = g_text_tab[]
EXCEPTIONS
id = 1
language = 2
name = 3
object = 4
OTHERS = 5
.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " get_text_and_save
*&---------------------------------------------------------------------*
*& Form free_text_control
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM free_text_control.
CHECK editor IS INITIAL.
CALL METHOD:
editor->free,
text_container->free.
CLEAR: editor, text_container, g_text_tab, gwa_ec_lock.
ENDFORM. " free_text_control
ich hätte es jetzt über einen butten realisiert...
mit den events komm ich no ned so richtig klar...