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:
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:
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.
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:
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:
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:
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 objectCALL METHOD super->/sct/qp_if_idoc~get_idoc_from_qvc_dataEXPORTING it_qvc_data = it_qvc_dataIMPORTINGet_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."ResetCLEAR: lt_edidd_zpmk."All dataLOOP AT it_qvc_data ASSIGNING FIELD-SYMBOL(<ls_qvc_data>)."PMKLOOP AT <ls_qvc_data>-pmk ASSIGNING FIELD-SYMBOL(<ls_pmk>)."Prepare new EDIDD entryAPPEND 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 Restet_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."SUPERCALL METHOD super->/sct/qp_if_idoc~get_qvc_data_from_idocEXPORTINGit_edidd = it_ediddIMPORTINGet_ana = et_anaet_log = et_loget_node = et_nodeet_nodet = et_nodetet_noderel = et_noderelet_num = et_numet_pmk = et_pmket_status = et_statuset_stx = et_stxet_text_bapi = et_text_bapiet_text_bapi_flat = et_text_bapi_flatet_stxtext = et_stxtextet_val = et_valet_valt = et_valtCHANGINGct_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-segmentsLOOP AT it_edidd ASSIGNING FIELD-SYMBOL(<ls_edidd>) WHERE segnam = lc_pmk."ResetCLEAR ls_pmk."Apply values from segmentMOVE <ls_edidd>-sdata TO ls_pmk.TRY."Find entryDATA(lr_pmk) = REF #( et_pmk[ guid = ls_pmk-guidobjekttyp = ls_pmk-objekttyprowgrp = ls_pmk-rowgrpmkmnr = ls_pmk-mkmnr ] )."Refresh fieldsMOVE-CORRESPONDING ls_pmk TO lr_pmk->*.CATCH cx_sy_itab_line_not_found."Add new entryAPPEND 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:






