Datensätze mit RFC FuBa paketweise bekommen: Unterschied zwischen den Versionen

Aus SAP Wiki ツ
M1ch3lde (Diskussion | Beiträge)
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)…“
 
M1ch3lde (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
SELECT COUNT( * ) FROM mara INTO @DATA(gv_total)
Dies ist ein einfaches Beispiel wie man paketweise Datensätze via RFC Baustein bekommen kann.
                  WHERE matnr IN @gt_mat_range.
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 ) ].
  gv_current = gv_current + gv_packsize.
   
 
  "Dieser FuBa ist im Zielsystem vorhanden.
  IF gv_current > gv_total.
  "Anhand der Materialnummer werden die Kurztexte gelesen und dem System übergeben,
  gv_current = gv_total.
  "der die Kurztexte anfragt.            
  ENDIF.
             
  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.