Datensätze mit RFC FuBa paketweise bekommen: Unterschied zwischen den Versionen
Aus SAP Wiki ツ
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 3: | Zeile 3: | ||
<syntaxhighlight lang="abap" line start="1"> | <syntaxhighlight lang="abap" line start="1"> | ||
"Wir benötigten die gesamte Anzahl der Datensätze, wofür wir die Kurztexte haben wollen. | |||
SELECT COUNT( * ) FROM mara INTO @DATA(gv_total) | SELECT COUNT( * ) FROM mara INTO @DATA(gv_total) | ||
WHERE matnr IN @gt_mat_range. | WHERE matnr IN @gt_mat_range. | ||
DO. | DO. | ||
"Wir selektieren die jeweiligen Materialnummern von der MARA | |||
"von dem System, der die Kurztexte vom Zielsystem abfragen möchte | |||
"Dabei wird Paketweise z.B. 1000 Datensätze selektiert und nur diese, | |||
"die nicht bereits für die Anfrage ausgewählt wurden. | |||
SELECT matnr FROM mara INTO TABLE @DATA(gt_mara) | SELECT matnr FROM mara INTO TABLE @DATA(gt_mara) | ||
UP TO gv_packsize ROWS | UP TO gv_packsize ROWS | ||
Zeile 13: | Zeile 18: | ||
ORDER BY matnr ASCENDING. | ORDER BY matnr ASCENDING. | ||
"Unsere Return Bedingung. Wenn keine Datensätze mehr zu bearbeiten sind, | |||
"springen wir aus der DO-Schleife raus. | |||
IF sy-dbcnt = 0. | IF sy-dbcnt = 0. | ||
EXIT. | EXIT. | ||
ENDIF. | ENDIF. | ||
"Wichtig für den SELECT in der DO-Schleife, damit neue Materialnummern selektiert werden. | |||
gv_last_mat = gt_mara[ lines( gt_mara ) ]. | gv_last_mat = gt_mara[ lines( gt_mara ) ]. | ||
"Dieser FuBa ist im Zielsystem vorhanden. | "Dieser FuBa ist im Zielsystem vorhanden. | ||
Zeile 39: | Zeile 42: | ||
RAISE EXCEPTION TYPE zcl_bal. | RAISE EXCEPTION TYPE zcl_bal. | ||
ENDIF. | ENDIF. | ||
"Hier kommt irgendeine Verarbeitung mit der gt_matnr_maktx_dest... | |||
ENDO. | ENDO. | ||
</syntaxhighlight> | </syntaxhighlight> |
Version vom 10. Mai 2022, 14:12 Uhr
Dies ist ein einfaches Beispiel wie man paketweise Datensätze via RFC Baustein bekommen kann. Die Aufteilung in Paketen ist bei extrem vielen Datensätzen notwendig.
"Wir benötigten die gesamte Anzahl der Datensätze, wofür wir die Kurztexte haben wollen.
SELECT COUNT( * ) FROM mara INTO @DATA(gv_total)
WHERE matnr IN @gt_mat_range.
DO.
"Wir selektieren die jeweiligen Materialnummern von der MARA
"von dem System, der die Kurztexte vom Zielsystem abfragen möchte
"Dabei wird Paketweise z.B. 1000 Datensätze selektiert und nur diese,
"die nicht bereits für die Anfrage ausgewählt wurden.
SELECT matnr FROM mara INTO TABLE @DATA(gt_mara)
UP TO gv_packsize ROWS
WHERE matnr IN gt_mat_range
AND matnr > gv_last_mat
ORDER BY matnr ASCENDING.
"Unsere Return Bedingung. Wenn keine Datensätze mehr zu bearbeiten sind,
"springen wir aus der DO-Schleife raus.
IF sy-dbcnt = 0.
EXIT.
ENDIF.
"Wichtig für den SELECT in der DO-Schleife, damit neue Materialnummern selektiert werden.
gv_last_mat = gt_mara[ lines( gt_mara ) ].
"Dieser FuBa ist im Zielsystem vorhanden.
"Anhand der Materialnummer werden die Kurztexte gelesen und dem System übergeben,
"der die Kurztexte anfragt.
CALL FUNCTION 'Z_GET_MAT_SHORTEXT' DESTINATION gv_rfc_dest
EXPORTING
it_matnr = gt_mara
IMPORTING
et_matnr_maktx = gt_matnr_maktx_dest
EXCEPTIONS
system_failure = 1
communication_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcl_bal.
ENDIF.
"Hier kommt irgendeine Verarbeitung mit der gt_matnr_maktx_dest...
ENDO.