adesso orange🍊Stellenangebote:
Software Engineer Trainee · Senior
| (Senior) Cloud Software Engineer BTP
(Senior) Consultant Technologie · Consultant ABAP
Werkstudent Softwareentwicklung · Fiori / UI5 · Consulting · Application Management
Erweiterung COOIS um beschreibares Feld: Unterschied zwischen den Versionen
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Das Ziel dieser Erweiterung ist, dass man durch ein zusätzlichen Button in einem neu hinzugefügtem Feld beliebigen Text z.B. ein Kommentar für einen jeweiligen Eintrag speichern kann. Dafür wird ein BAdI genutzt. Es wird kein SAP Standard Code modifiziert. | Das Ziel dieser Erweiterung ist, dass man durch ein zusätzlichen Button in einem neu hinzugefügtem Feld beliebigen Text z.B. ein Kommentar für einen jeweiligen Eintrag speichern kann. Dafür wird ein BAdI und ein Z-Programm genutzt. Es wird kein SAP Standard Code modifiziert. Der Eintrag des Textes wird erst nach erneutem Aufruf nach der Selektion angezeigt. | ||
Dies wird anhand eines Beispiels für die Liste "Komponente" gezeigt. | Dies wird anhand eines Beispiels für die Liste "Komponente" gezeigt. | ||
Zeile 15: | Zeile 15: | ||
==== Z-Programm zur Speicherung des Textes in Z-Tabelle (s. Schritt 2) erstellen ==== | ==== Z-Programm zur Speicherung des Textes in Z-Tabelle (s. Schritt 2) erstellen ==== | ||
<div class="toccolours mw-collapsible mw-collapsed"> | |||
Beispielcode mit PopUps und Sperrobjekt | |||
<div class="mw-collapsible-content"> | |||
<syntaxhighlight lang="abap" line start="1"> | |||
REPORT zpp_coois_comp_add_comment. | |||
TABLES zpp_coois_comp_c. | |||
PARAMETERS: p_aufnr TYPE aufnr MEMORY ID anr, | |||
p_posnr TYPE aposn MEMORY ID pos, | |||
p_matnr TYPE matnr MEMORY ID mat. | |||
DATA: lt_fields TYPE TABLE OF sval, | |||
lv_popup_title TYPE string, | |||
lv_conf_popup_title TYPE string, | |||
lv_rc TYPE char01, | |||
ls_zpp_coois_comp_c TYPE zpp_coois_comp_c, | |||
lv_answer TYPE char01, | |||
lv_text_q TYPE char57, | |||
lv_garg TYPE seqg3-garg, | |||
lv_subrc TYPE sy-subrc, | |||
lt_enq TYPE TABLE OF seqg3, | |||
lv_eng_msg TYPE string. | |||
lv_garg = |{ p_aufnr ALPHA = IN }| && |{ p_posnr ALPHA = IN }| && |{ p_matnr ALPHA = OUT }| . | |||
CALL FUNCTION 'ENQUEUE_READ' | |||
EXPORTING | |||
gclient = sy-mandt | |||
gname = 'ZPP_COOIS_COMP_C' | |||
garg = lv_garg | |||
guname = '*' | |||
IMPORTING | |||
subrc = lv_subrc | |||
TABLES | |||
enq = lt_enq. | |||
IF sy-subrc = 0. | |||
IF lt_enq IS INITIAL. | |||
"do nothing | |||
ELSEIF lt_enq IS NOT INITIAL. "Sperreintrag vorhanden | |||
READ TABLE lt_enq INTO DATA(ls_enq) INDEX 1. | |||
lv_eng_msg = text-008. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_eng_msg WITH ls_enq-guname. | |||
MESSAGE lv_eng_msg TYPE 'I'. | |||
EXIT. | |||
ENDIF. | |||
ENDIF. | |||
CALL FUNCTION 'ENQUEUE_EZPPCOOIS_COMP_C' | |||
EXPORTING | |||
mode_zpp_coois_comp_c = 'E' | |||
aufnr = p_aufnr | |||
posnr = p_posnr | |||
matnr = p_matnr | |||
_collect = ' ' | |||
EXCEPTIONS | |||
foreign_lock = 1 | |||
system_failure = 2 | |||
OTHERS = 3. | |||
lt_fields = VALUE #( ( tabname = 'ZPP_COOIS_COMP_C' | |||
fieldname = 'COMMENTS' | |||
fieldtext = 'Comment'(000) ) | |||
). | |||
lv_popup_title = TEXT-001. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_popup_title WITH |{ p_aufnr ALPHA = OUT }|. | |||
REPLACE FIRST OCCURRENCE OF '&2' IN lv_popup_title WITH |{ p_posnr ALPHA = OUT }|. | |||
REPLACE FIRST OCCURRENCE OF '&3' IN lv_popup_title WITH |{ p_matnr ALPHA = OUT }|. | |||
DATA(lv_aufnr_in) = |{ p_aufnr ALPHA = IN }|. | |||
DATA(lv_posnr_in) = |{ p_posnr ALPHA = IN }|. | |||
DATA(lv_matnr_in) = |{ p_matnr ALPHA = IN }|. | |||
CALL FUNCTION 'POPUP_GET_VALUES' | |||
EXPORTING | |||
popup_title = lv_popup_title | |||
IMPORTING | |||
returncode = lv_rc | |||
TABLES | |||
fields = lt_fields | |||
EXCEPTIONS | |||
error_in_fields = 1 | |||
OTHERS = 2. | |||
IF lv_rc = 'A'. | |||
ELSE. | |||
READ TABLE lt_fields INTO DATA(ls_comment) INDEX 1. | |||
IF ls_comment-value IS NOT INITIAL. | |||
CLEAR ls_zpp_coois_comp_c. | |||
SELECT SINGLE * FROM zpp_coois_comp_c INTO @ls_zpp_coois_comp_c | |||
WHERE aufnr = @lv_aufnr_in | |||
AND posnr = @lv_posnr_in | |||
AND matnr = @lv_matnr_in. | |||
IF sy-subrc <> 0. | |||
ls_zpp_coois_comp_c-aufnr = lv_aufnr_in. | |||
ls_zpp_coois_comp_c-posnr = lv_posnr_in. | |||
ls_zpp_coois_comp_c-matnr = lv_matnr_in. | |||
ls_zpp_coois_comp_c-comments = ls_comment-value. | |||
INSERT zpp_coois_comp_c FROM ls_zpp_coois_comp_c. | |||
IF sy-subrc = 0. | |||
MESSAGE TEXT-002 TYPE 'S'. | |||
ELSE. | |||
MESSAGE TEXT-004 TYPE 'I'. | |||
ENDIF. | |||
ELSE. | |||
lv_conf_popup_title = TEXT-007. | |||
IF strlen( ls_zpp_coois_comp_c-comments ) <= 43. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_conf_popup_title WITH ls_zpp_coois_comp_c-comments(43). "old comment | |||
ELSEIF strlen( ls_zpp_coois_comp_c-comments ) > 43. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_conf_popup_title WITH ls_zpp_coois_comp_c-comments(40). | |||
lv_conf_popup_title = lv_conf_popup_title && '...'. | |||
ENDIF. | |||
lv_text_q = TEXT-005. | |||
IF strlen( ls_comment-value ) <= 25. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_text_q WITH ls_comment-value(25). "new comment" | |||
ELSEIF strlen( ls_zpp_coois_comp_c-comments ) > 25. | |||
DATA(lv_short_new_comment) = ls_comment-value(22) && '...'. | |||
REPLACE FIRST OCCURRENCE OF '&1' IN lv_text_q WITH lv_short_new_comment. "new comment" | |||
ENDIF. | |||
CALL FUNCTION 'POPUP_TO_CONFIRM' | |||
EXPORTING | |||
titlebar = lv_conf_popup_title | |||
text_question = lv_text_q | |||
IMPORTING | |||
answer = lv_answer. | |||
IF lv_answer = '1'. | |||
UPDATE zpp_coois_comp_c SET comments = ls_comment-value | |||
WHERE aufnr = ls_zpp_coois_comp_c-aufnr | |||
AND posnr = ls_zpp_coois_comp_c-posnr | |||
AND matnr = ls_zpp_coois_comp_c-matnr. | |||
IF sy-subrc = 0. | |||
MESSAGE TEXT-003 TYPE 'S'. | |||
ELSE. | |||
MESSAGE TEXT-004 TYPE 'I'. | |||
ENDIF. | |||
ELSE. | |||
MESSAGE TEXT-006 TYPE 'S'. | |||
ENDIF. | |||
ENDIF. | |||
ENDIF. | |||
ENDIF. | |||
CALL FUNCTION 'DEQUEUE_EZPPCOOIS_COMP_C' | |||
EXPORTING | |||
mode_zpp_coois_comp_c = 'E' | |||
aufnr = p_aufnr | |||
posnr = p_posnr | |||
matnr = p_matnr. | |||
</syntaxhighlight> | |||
</div> | |||
</div> | |||
==== Transaktionscode für Z-Programm anlegen ==== | ==== Transaktionscode für Z-Programm anlegen ==== | ||
==== Button für Transaktionsaufruf in COOIS | ==== Button für Transaktionsaufruf in COOIS beim Navigationsprofil hinzufügen ==== | ||
[[Datei:Coois navprof add tcode.png | [[Datei:Coois navprof add tcode.png|alternativtext=Navigationsprofil um Transaktionsaufruf erweitern]] | ||
=== BADI "WORKORDER_INFOSYSTEM" verwenden um Text nachzulesen === | === BADI "WORKORDER_INFOSYSTEM" verwenden um Text nachzulesen === | ||
==== BAdI Z Implementierung anlegen oder bestehenden erweitern ==== | ==== BAdI Z Implementierung anlegen oder bestehenden erweitern ==== | ||
Hierfür ist die SE18 aufzurufen und bei Reiter "Implementierung" unter "Anlegen" wird eine Z Implementierung erzeugt. | |||
Der BAdI kann mehrfach genutzt werden. Daher kann hier mehr als eine Implementierung erstellt und aktiviert werden. | |||
==== Interface-Methode "TABLES_MODIFY_LAY" ausprogrammieren ==== | ==== Interface-Methode "TABLES_MODIFY_LAY" ausprogrammieren ==== | ||
<syntaxhighlight lang="abap" line start="1"> | |||
METHOD if_ex_workorder_infosystem~tables_modify_lay. | |||
LOOP AT ct_ioopcomp ASSIGNING FIELD-SYMBOL(<fs_add_fields>). | |||
SELECT SINGLE comments FROM zpp_coois_comp_c INTO <fs_add_fields>-zzcomment | |||
WHERE aufnr = lv_aufnr_in | |||
AND posnr = lv_posnr_in | |||
AND matnr = lv_matnr_in. | |||
ENDLOOP. | |||
ENDMETHOD. | |||
</syntaxhighlight> |
Aktuelle Version vom 29. Oktober 2021, 14:52 Uhr
Das Ziel dieser Erweiterung ist, dass man durch ein zusätzlichen Button in einem neu hinzugefügtem Feld beliebigen Text z.B. ein Kommentar für einen jeweiligen Eintrag speichern kann. Dafür wird ein BAdI und ein Z-Programm genutzt. Es wird kein SAP Standard Code modifiziert. Der Eintrag des Textes wird erst nach erneutem Aufruf nach der Selektion angezeigt.
Dies wird anhand eines Beispiels für die Liste "Komponente" gezeigt. Ein Eintrag bei Komponenten kann eindeutig mit der Auftragsnr., Positionsnr. und Materialnr. (Komponente) identifiziert werden.
Tabelle "IOOPCOMP" um Append Struktur erweitern
Z-Tabelle zur Speicherung eines Textes erstellen
Umsetzung Speicherung Text
Z-Programm zur Speicherung des Textes in Z-Tabelle (s. Schritt 2) erstellen
Beispielcode mit PopUps und Sperrobjekt
REPORT zpp_coois_comp_add_comment.
TABLES zpp_coois_comp_c.
PARAMETERS: p_aufnr TYPE aufnr MEMORY ID anr,
p_posnr TYPE aposn MEMORY ID pos,
p_matnr TYPE matnr MEMORY ID mat.
DATA: lt_fields TYPE TABLE OF sval,
lv_popup_title TYPE string,
lv_conf_popup_title TYPE string,
lv_rc TYPE char01,
ls_zpp_coois_comp_c TYPE zpp_coois_comp_c,
lv_answer TYPE char01,
lv_text_q TYPE char57,
lv_garg TYPE seqg3-garg,
lv_subrc TYPE sy-subrc,
lt_enq TYPE TABLE OF seqg3,
lv_eng_msg TYPE string.
lv_garg = |{ p_aufnr ALPHA = IN }| && |{ p_posnr ALPHA = IN }| && |{ p_matnr ALPHA = OUT }| .
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gclient = sy-mandt
gname = 'ZPP_COOIS_COMP_C'
garg = lv_garg
guname = '*'
IMPORTING
subrc = lv_subrc
TABLES
enq = lt_enq.
IF sy-subrc = 0.
IF lt_enq IS INITIAL.
"do nothing
ELSEIF lt_enq IS NOT INITIAL. "Sperreintrag vorhanden
READ TABLE lt_enq INTO DATA(ls_enq) INDEX 1.
lv_eng_msg = text-008.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_eng_msg WITH ls_enq-guname.
MESSAGE lv_eng_msg TYPE 'I'.
EXIT.
ENDIF.
ENDIF.
CALL FUNCTION 'ENQUEUE_EZPPCOOIS_COMP_C'
EXPORTING
mode_zpp_coois_comp_c = 'E'
aufnr = p_aufnr
posnr = p_posnr
matnr = p_matnr
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
lt_fields = VALUE #( ( tabname = 'ZPP_COOIS_COMP_C'
fieldname = 'COMMENTS'
fieldtext = 'Comment'(000) )
).
lv_popup_title = TEXT-001.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_popup_title WITH |{ p_aufnr ALPHA = OUT }|.
REPLACE FIRST OCCURRENCE OF '&2' IN lv_popup_title WITH |{ p_posnr ALPHA = OUT }|.
REPLACE FIRST OCCURRENCE OF '&3' IN lv_popup_title WITH |{ p_matnr ALPHA = OUT }|.
DATA(lv_aufnr_in) = |{ p_aufnr ALPHA = IN }|.
DATA(lv_posnr_in) = |{ p_posnr ALPHA = IN }|.
DATA(lv_matnr_in) = |{ p_matnr ALPHA = IN }|.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = lv_popup_title
IMPORTING
returncode = lv_rc
TABLES
fields = lt_fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF lv_rc = 'A'.
ELSE.
READ TABLE lt_fields INTO DATA(ls_comment) INDEX 1.
IF ls_comment-value IS NOT INITIAL.
CLEAR ls_zpp_coois_comp_c.
SELECT SINGLE * FROM zpp_coois_comp_c INTO @ls_zpp_coois_comp_c
WHERE aufnr = @lv_aufnr_in
AND posnr = @lv_posnr_in
AND matnr = @lv_matnr_in.
IF sy-subrc <> 0.
ls_zpp_coois_comp_c-aufnr = lv_aufnr_in.
ls_zpp_coois_comp_c-posnr = lv_posnr_in.
ls_zpp_coois_comp_c-matnr = lv_matnr_in.
ls_zpp_coois_comp_c-comments = ls_comment-value.
INSERT zpp_coois_comp_c FROM ls_zpp_coois_comp_c.
IF sy-subrc = 0.
MESSAGE TEXT-002 TYPE 'S'.
ELSE.
MESSAGE TEXT-004 TYPE 'I'.
ENDIF.
ELSE.
lv_conf_popup_title = TEXT-007.
IF strlen( ls_zpp_coois_comp_c-comments ) <= 43.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_conf_popup_title WITH ls_zpp_coois_comp_c-comments(43). "old comment
ELSEIF strlen( ls_zpp_coois_comp_c-comments ) > 43.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_conf_popup_title WITH ls_zpp_coois_comp_c-comments(40).
lv_conf_popup_title = lv_conf_popup_title && '...'.
ENDIF.
lv_text_q = TEXT-005.
IF strlen( ls_comment-value ) <= 25.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_text_q WITH ls_comment-value(25). "new comment"
ELSEIF strlen( ls_zpp_coois_comp_c-comments ) > 25.
DATA(lv_short_new_comment) = ls_comment-value(22) && '...'.
REPLACE FIRST OCCURRENCE OF '&1' IN lv_text_q WITH lv_short_new_comment. "new comment"
ENDIF.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = lv_conf_popup_title
text_question = lv_text_q
IMPORTING
answer = lv_answer.
IF lv_answer = '1'.
UPDATE zpp_coois_comp_c SET comments = ls_comment-value
WHERE aufnr = ls_zpp_coois_comp_c-aufnr
AND posnr = ls_zpp_coois_comp_c-posnr
AND matnr = ls_zpp_coois_comp_c-matnr.
IF sy-subrc = 0.
MESSAGE TEXT-003 TYPE 'S'.
ELSE.
MESSAGE TEXT-004 TYPE 'I'.
ENDIF.
ELSE.
MESSAGE TEXT-006 TYPE 'S'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
CALL FUNCTION 'DEQUEUE_EZPPCOOIS_COMP_C'
EXPORTING
mode_zpp_coois_comp_c = 'E'
aufnr = p_aufnr
posnr = p_posnr
matnr = p_matnr.
Transaktionscode für Z-Programm anlegen
BADI "WORKORDER_INFOSYSTEM" verwenden um Text nachzulesen
BAdI Z Implementierung anlegen oder bestehenden erweitern
Hierfür ist die SE18 aufzurufen und bei Reiter "Implementierung" unter "Anlegen" wird eine Z Implementierung erzeugt. Der BAdI kann mehrfach genutzt werden. Daher kann hier mehr als eine Implementierung erstellt und aktiviert werden.
Interface-Methode "TABLES_MODIFY_LAY" ausprogrammieren
METHOD if_ex_workorder_infosystem~tables_modify_lay.
LOOP AT ct_ioopcomp ASSIGNING FIELD-SYMBOL(<fs_add_fields>).
SELECT SINGLE comments FROM zpp_coois_comp_c INTO <fs_add_fields>-zzcomment
WHERE aufnr = lv_aufnr_in
AND posnr = lv_posnr_in
AND matnr = lv_matnr_in.
ENDLOOP.
ENDMETHOD.