Datensätze mit RFC FuBa paketweise bekommen: Unterschied zwischen den Versionen
Aus SAP Wiki ツ
Die Seite wurde neu angelegt: „SELECT COUNT( * ) FROM mara INTO @DATA(gv_total) WHERE matnr IN @gt_mat_range. DO. SELECT matnr FROM mara INTO TABLE @DATA(gt_mara)…“ |
Keine Bearbeitungszusammenfassung |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
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. | |||
<syntaxhighlight lang="abap" line start="1"> | |||
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 9: | Zeile 14: | ||
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 nur 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. | |||
"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 | CALL FUNCTION 'Z_GET_MAT_SHORTEXT' DESTINATION gv_rfc_dest | ||
EXPORTING | EXPORTING | ||
Zeile 32: | Zeile 38: | ||
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> |
Aktuelle Version vom 10. Mai 2022, 14:14 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.
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 nur 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.