Projektsystem: Hierarchie PSP-Element ändern
Eine Projektstruktur ist zwangsläufig eine Hierarchie. Einzelne PSP-Elemente können ebenfalls hierarchisch angeordnet sein. Eine einfache Struktur sieht beispielsweise so aus:
[notice type=’info’]Die Projektstruktur wird im SAP-Standard mit der Transaktion CJ20n bearbeitet.[/notice]
Mit dem kleinen Hierarchieänderungsprogramm soll die Struktur nun dahingehend geändert werden, dass das PSP-Element 43 unter das PSP-Element Nummer 42 gehängt wird. Der Aufruf sieht folgendermaßen aus:
Die Übergabetabelle LT_HIERARCHY:
Das Ergebnis ist glücklicherweise wie erwartet:
Hinweis
Wenn die Hierarchie geändert werden soll, dann kann dies leider nicht beliebig passieren. In jedem Fall muss immer die Hierarchie aller beteiligten PSP-Elemente definiert werden. Soll das PSP-Element Nummer 43 wieder “heraufgestuft” werden, dann müssen Nr. 42 und Nr. 43 jeweils mit “UP = P-0000004” und “DOWN = space” an den Baustein übergeben werden. Nr. 4 muss ebenfalls übergeben werden. Hier der Aufruf für Nr. 43. Eigentlich müsste auch hier Nr. 42 berücksichtigt werden, da es ebenfalls beteiligt ist, denn es “verliert” ja sein Kind:
Dies ist das Ergebnis:
Wie du siehst, ist die Reihenfolge vertauscht: Erst kommt Element 43, danach 42. Eine Sortierung gibt es nicht. Die “Geschwister” müssen genau definiert werden (LEFT und RIGHT). Soll die Reihenfolge anders herum sein, also erst 42, dann 43, dann muss die Übergabetabelle folgendermaßen aussehen:
Die Geschwister müssen nicht immer definiert werden. Manchmal funktioniert eine Operation jedoch nur dann, wenn auch die Geschwister korrekt angegeben werden.
Am besten ist es, die Hierarchie 100%ig genau zu definieren. Wann sich der Baustein unvollständigen Definitionen tolerant verhält und wann nicht, ist für mich nicht nachvollziehbar.
Fehler “Wurzelelement der Hierarchie darf nicht verschoben werden”
Fehler 469(CJ)
Bei der Änderung der Hierarchie müssen alle beteiligten Elemente definiert werden! Wenn aus der Ausgangsposition “43 ist 42 untergeordnet” die Änderung “42 ist 43 untergeordnet” erfolgen soll, dann muss das ROOT-Element P-0000004 erwähnt werden. Das passiert in dem Demoprogramm, allerdings zeige ich den Fehler hier auf, weil er nicht auf die Fehlerursache schließen lässt.
Code
PARAMETERS p_projn TYPE ps_pspid DEFAULT 'K-0000001'. PARAMETERS p_root TYPE ps_posid DEFAULT 'P-0000004'. PARAMETERS p_parent TYPE ps_posid DEFAULT 'P-00000042'. PARAMETERS p_child TYPE ps_posid DEFAULT 'P-00000043'. START-OF-SELECTION. PERFORM go. *&---------------------------------------------------------------------* *& Form go *&---------------------------------------------------------------------* FORM go. DATA ls_project_def TYPE bapi_project_definition. DATA ls_project_def_upd TYPE bapi_project_definition_up. DATA lt_messages TYPE STANDARD TABLE OF bapi_meth_message. DATA ls_message TYPE bapi_meth_message. DATA ls_return TYPE bapireturn1. DATA lt_methods TYPE STANDARD TABLE OF bapi_method_project. DATA ls_method TYPE bapi_method_project. DATA lt_hierarchy TYPE STANDARD TABLE OF bapi_wbs_hierarchie. DATA ls_hierarchy TYPE bapi_wbs_hierarchie. ls_project_def-project_definition = p_projn. ls_method-method = 'Create'. ls_method-objecttype = 'WBS-Hierarchy'. APPEND ls_method TO lt_methods. CLEAR ls_method. ls_method-method = 'SaveAndWait'. APPEND ls_method TO lt_methods. CLEAR ls_hierarchy. ls_hierarchy-project_definition = p_projn. ls_hierarchy-wbs_element = p_root. ls_hierarchy-down = p_parent. APPEND ls_hierarchy TO lt_hierarchy. CLEAR ls_hierarchy. ls_hierarchy-project_definition = p_projn. ls_hierarchy-wbs_element = p_parent. ls_hierarchy-down = p_child. ls_hierarchy-up = p_root. APPEND ls_hierarchy TO lt_hierarchy. IF p_child IS NOT INITIAL. CLEAR ls_hierarchy. ls_hierarchy-project_definition = p_projn. ls_hierarchy-wbs_element = p_child. ls_hierarchy-up = p_parent. APPEND ls_hierarchy TO lt_hierarchy. ENDIF. CALL FUNCTION 'BAPI_PROJECT_MAINTAIN' EXPORTING i_project_definition = ls_project_def i_project_definition_upd = ls_project_def_upd IMPORTING return = ls_return TABLES e_message_table = lt_messages i_method_project = lt_methods i_wbs_hierarchie_table = lt_hierarchy. WRITE: / ls_return-message. LOOP AT lt_messages INTO ls_message. WRITE: / ls_message-message_text. ENDLOOP. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true. ENDFORM. "go
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024