Dieses Kapitel beschreibt die notwendigen Einstellungen im QPPD-Customizing als auch im SAP-Standard, damit QPPD-Objekte mit erweiterten Datenstrukturen mittels IDOC zwischen zwei Systemen verteilt werden können.

Ein QPPD-Objekt gilt als erweitert in seinen Datenstrukturen oder heißt erweitert gdw. Datenbankfelder oder Wertefelder erweitert worden sind.

Bevor erweiterte QPPD-Objekte übertragen werden können, müssen alle Einstellungen für die Übertragung von Standard-QPPD-Objekten vorgenommen werden.

Im folgenden bezeichnet der Term "System" stets die Kombination aus System und Mandant. Es ist insbesondere möglich Daten zwischen zwei Mandanten auf dem gleichen System zu verteilen.

Einstellungen im QPPD-Customizing

Es sind keine Änderungen im QPPD-Customizing notwendig.

Einstellungen im SAP-Standard

Segmente

Für jede Datenbanktabelle, welche erweitert wurde, werden ein bis drei Segmente benötigt.

Beispiel: Die PMK-Tabelle wurde kundenindividuell erweitert. Dazu wurde ein Z-Append zur Struktur /SCT/QP_S_PMK_DATA angelegt. Dieses beinhaltet die sieben Felder ZZ01, ..., ZZ07. Es sieht wie folgt aus:

image-20240604-074907.png

Analog dazu wird ein Z-Segment angelegt, welches diese Felder enthält. Damit die Daten korrekt übertragen werden können, müssen alle Schlüsselfelder aus der Tabelle /SCT/QP_PMK (alle Felder der Struktur /SCT/QP_PMK_KEY) im Z-Segment enthalten sein. Es müssen also die Felder GUID, OBJEKTTYP, ROWGRP und MKMNR enthalten sein. Das Z-Segment enthält also die 4 Schlüsselfelder sowie die 7 Appendfelder gleich 11 Felder. Die nachfolgende Abbildung zeigt das Z-Segment ZABC_QPPD_PMK:

image-20240604-074917.png

Dieses Segment muss nun in der Erweiterung zum Standard-Basistypen implementiert werden.

Erweiterung des Standard-Basistyps

In der WE30 muss eine Erweiterung zum Standard-IDOC-Typ /SCT/QP_QVC definiert werden. In diesem Beispiel wird die Kunden-Erweiterung ZABC_QPPD für den Basistypen /SCT/QP_QVC angelegt. Damit werden alle zukünftigen Änderungen an dem Standard-Basistypen automatisch berücksichtigt.

image-20240604-074928.png

Unter dem Segment /SCT/QP_QVC_HEADER wird dann eine Erweiterung als Kind-Segment mit dem vorgenannten Z-PMK-Segment vorgenommen. Dies sieht dann wie folgt aus:

image-20240604-074940.png

Erweiterung bekanntgeben

Obwohl diese Erweiterung bereits bei seiner Erstellung in der WE30 zum Basistypen verlinkt wurde, muss die Erweiterung zusätzlich in der WE82 bekannt gegeben werden.

Dazu wird die Erweiterung ZABC_QPPD zum Basistyp /SCT/QP_QVC und Nachrichtentyp /SCT/QP_QPPD verknüpft. Es sieht so aus:

image-20240604-074951.png

Diese Erweiterung muss nun in den Partnervereinbarungen des sendenden Systems eingetragen werden.

Partnervereinbarungen beim sendenden System

Die Partnervereinbarungen beim sendenden System müssen um die Erweiterung des Basistypen ergänzt werden. Es sieht so aus:

image-20240604-075004.png

Redefinition des IDOC-Service

Der QPPD eigene IDOC-Service implementiert die Versendung des IDOCs. Die beiden Methoden zum Erstellen und Auslesen des IDOCs müssen redefiniert werden.

Redefintion Erstellung IDOC

Die Methode /SCT/QP_CL_QV_IDOC_SERVICE→GET_IDOC_FROM_QVC_DATA muss redefiniert werden, damit die Z-Appendfelder mittels Z-Segment ZABC_QPPD_PMK übertragen werden können.

Beispiel:

Die Klasse ZABCCL_QPPD_IDOC erbt von der Klasse /SCT/QP_CL_QV_IDOC_SERVICE.

Die Methode GET_IDOC_FROM_QVC_DATA wird wie folgt redefiniert:

METHOD /sct/qp_if_idoc~get_idoc_from_qvc_data.
 
CLEAR: et_edidd.
"SUPER
"Create IDOC for standard part of QPPD object
CALL METHOD super->/sct/qp_if_idoc~get_idoc_from_qvc_data
EXPORTING
it_qvc_data = it_qvc_data
IMPORTING
et_edidd = DATA(lt_edidd).
"--------------------------------------------------------------------"
"Z-PMK segments
"--------------------------------------------------------------------"
CONSTANTS: lc_pmk TYPE edilsegtyp VALUE 'ZABC_QPPD_PMK'.
DATA: lt_edidd_zpmk LIKE et_edidd, ls_zabc_qppd_pmk TYPE zabc_qppd_pmk.
"Reset
CLEAR: lt_edidd_zpmk.
"All data
LOOP AT it_qvc_data ASSIGNING FIELD-SYMBOL(<ls_qvc_data>).
"PMK
LOOP AT <ls_qvc_data>-pmk ASSIGNING FIELD-SYMBOL(<ls_pmk>).
"Prepare new EDIDD entry
APPEND VALUE #( segnam = lc_pmk sdata = CONV zabc_qppd_pmk( ls_zabc_qppd_pmk ) ) TO lt_edidd_zpmk.
ENDLOOP.
ENDLOOP.
 
TRY.
et_edidd = VALUE #( BASE et_edidd FOR ls_edidd IN lt_edidd WHERE ( segnam = mc->segnam_header ) ( ls_edidd ) ).
CATCH cx_sy_itab_line_not_found.
ENDTRY.
 
IF lt_edidd_zpmk IS NOT INITIAL.
APPEND LINES OF lt_edidd_zpmk TO et_edidd.
ENDIF.
"Dann den Rest
et_edidd = VALUE #( BASE et_edidd FOR ls_edidd IN lt_edidd WHERE ( segnam <> mc->segnam_header ) ( ls_edidd ) ).
 
ENDMETHOD.

Redefintion IDOC Auslesen

Die Methode GET_QVC_DATA_FROM_IDOC wird wie folgt redefiniert:

METHOD /sct/qp_if_idoc~get_qvc_data_from_idoc.
"SUPER
CALL METHOD super->/sct/qp_if_idoc~get_qvc_data_from_idoc
EXPORTING
it_edidd = it_edidd
IMPORTING
et_ana = et_ana
et_log = et_log
et_node = et_node
et_nodet = et_nodet
et_noderel = et_noderel
et_num = et_num
et_pmk = et_pmk
et_status = et_status
et_stx = et_stx
et_text_bapi = et_text_bapi
et_text_bapi_flat = et_text_bapi_flat
et_stxtext = et_stxtext
et_val = et_val
et_valt = et_valt
CHANGING
ct_idoc_status = ct_idoc_status.
 
"--------------------------------------------------------------------"
"Z-PMK segments
"--------------------------------------------------------------------"
CONSTANTS: lc_pmk TYPE edilsegtyp VALUE 'ZABC_QPPD_PMK'.
 
DATA:
ls_pmk TYPE zabc_qppd_pmk.
 
"Process Z-segments
LOOP AT it_edidd ASSIGNING FIELD-SYMBOL(<ls_edidd>) WHERE segnam = lc_pmk.
"Reset
CLEAR ls_pmk.
"Apply values from segment
MOVE <ls_edidd>-sdata TO ls_pmk.
 
TRY.
"Find entry
DATA(lr_pmk) = REF #( et_pmk[ guid = ls_pmk-guid
objekttyp = ls_pmk-objekttyp
rowgrp = ls_pmk-rowgrp
mkmnr = ls_pmk-mkmnr ] ).
"Refresh fields
MOVE-CORRESPONDING ls_pmk TO lr_pmk->*.
CATCH cx_sy_itab_line_not_found.
"Add new entry
APPEND CORRESPONDING #( ls_pmk ) TO et_pmk.
ENDTRY.
 
ENDLOOP.
ENDMETHOD.

Redefintion des IDOC-Services in der Factory bekannt geben

Damit die o.g. Redefinitionen auch prozessiert werden, muss die Z-Klasse ZABCCL_QPPD_IDOC in der Factory, Transaktion C10 ( Grundeinstellungen → Klassen Factory ), bekannt gegeben werden.

Im Teildialog "Klassen Factory" muss der folgende Eintrag gepflegt sein:

image-20240604-075020.png