Filterung der Systeme in „Create Transport Request“ Popup abhängig von Berechtigungen und bereits angelegten Transporten

Hintergrund:

Beim Anlegen von Transportaufträgen stehen alle zum Projekt gehörenden Entwicklungssysteme zur Auswahl. Eine Einschränkung erfolgt nicht. Durch Ausprägung der Beispielimplementierung AIC_ONLY_DEV_IBASE_SYSTEM des BADIs AIC_CREATE_TRANSPORT_WINDOW kann eine Einschränkung gemäß IBase-Komponente aktiviert werden.

Problem:

Das hilft uns nicht weiter, da die Transportwege wie folgt sind:

  • EXX.900 -> PXX.900
  • EXX.100 -> PXX.100
  • EXX.910 -> PXX.900 + PXX.100

Es sind also zwei IBase-Komponenten auswählbar. Bei Auswahl von PXX.900 kann bei aktiver Beispielimplementierung im EXX.900 und EXX.910 implementiert werden. Bei Auswahl von PXX.100 kann in EXX.100 und EXX.910 implementiert werden. Es ist somit also nicht möglich die Implementierung ausschließlich in EXX.100 oder EXX.910 zu erzwingen.

Lösung:

  • Eigene BADI-Implementierung ZSM_AIC_CREATE_TRANSPORT_LIST.
  • Change Manager dürfen Transporte in allen Systemen anlegen. (Identifizierung anhand der Genehmigungs-Aktivität im Approval Management – SM_APP_AP)
  • Entwickler dürfen jedoch nur Transporte zu Entwicklungssystemen anlegen, in denen bereits Transporte angelegt wurden.
  • User dürfen generell Transporte in allen Systemen anlegen, wenn noch keine Transportaufträge angelegt und damit der Scope noch nicht festgelegt wurde.

Code-Schnipsel:

METHOD cl_aic_create_transport_window~filter_systems.

DATA:
lt_transp_req TYPE socmt_trordhc_type.

FIELD-SYMBOLS:
<fs_system_list> LIKE LINE OF ct_system_list.

*Valid parameters?
CHECK iv_header_guid IS NOT INITIAL AND ic_header_bol IS BOUND.

*If only one source system is available we want to keep it.
*Therefore all old unharmonized projects will run as before.
CHECK linesct_system_list 1.

*Check authority. (User has authority to approve a step in approval management?)
AUTHORITY-CHECK OBJECT 'SM_APP_AP'
*          ID 'AIC_PROC' FIELD lv_process_type
ID 'AIC_PROC' DUMMY
ID 'ACTVT' FIELD '37'.

*Authority given. Allow everything.
CHECK sy-subrc <> 0.

*Get all already created transport requests.
CALL METHOD /tmwflow/cl_transport=>get_chng_doc_transp_req
EXPORTING
iv_header_guid iv_header_guid
IMPORTING
et_transp_req  lt_transp_req.

*No transport created yet. Allow everything.
CHECK lt_transp_req IS NOT INITIAL.

*Check systems and delete all systems which are not already used.
LOOP AT ct_system_list ASSIGNING <fs_system_list>.
READ TABLE lt_transp_req TRANSPORTING NO FIELDS WITH KEY
trorder_system <fs_system_list>-sysname
trorder_client <fs_system_list>-client.
IF sy-subrc <> 0.
DELETE ct_system_list.
ENDIF.
ENDLOOP.

ENDMETHOD.