Ansicht
Dokumentation

CL_RSDR_AT_QUERY_HANDLER - Query Handler for Atomic Queries

CL_RSDR_AT_QUERY_HANDLER - Query Handler for Atomic Queries

rdisp/max_wprun_time - Maximum work process run time   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Klassen CL_RSDR_AT_* implementieren den Query Handler im Data Manager. Der Query Handler trennt die logische Struktur des Infoproviders, auf dem die Query ausgeführt wird, von der physikalischen Struktur.

Er basiert auf sogenannten "atomaren", d.h. unteilbaren Queries, daher auch der Klassenname CL_RSDR_AT... .

Der Query Handler besitzt folgende wichtige Methoden:

Methode Bedeutung
add_query Hinzufügen ("Sammeln") eines atomaren Query Objekts
add_tmpobj/add_tmpobjs Sammeln von temporären Objekten, die für die Ausführung benötigt werden, etwa temporäre SID-Tabellen
drop_tmpobjs Löschen der temporären Objekte nach der Ausführung
add_eqsid_cache_obj Hinzufügen einer Referenz des eqsid-Caches. Dieser Cache, implementiert in der Klasse CL_RSDRC_EQSID_TABL_CACHE kennt die bereits in temporäre SID-Tabellen umgewandelten EQSID-Tabellen der SELDR. Somit müssen bei einem Multiprovider-Zugriff SID-Einschränkungen nicht mehrfach (für jeden Partprovider) materialisiert werden. Die Referenz ist notwendig, damit beim Löschen der temporären Objekte auch dieser Cache wieder geleert werden kann.
execute Führt die gesammelten Queries parallel aus. Die Parallelität wird dabei durch die Systemauslastung festgelegt. Sind nicht genügend Workprozesse frei, wird der Parameter e_parallel_execution auf rs_c_false gesetzt, und keine query wird ausgeführt.
execute_serially Führt die gesammelten Queries hintereinander aus, und gibt das Ergebnis paketweise zurück
get_result Gibt das Ergebnis aller Queries nach paralleler Ausführung in einer geschachtelten Tabelle auf einmal zurück.
get_Result_packaged Gibt das Ergebnis der Queries nach paralleler Ausführung paketweise zurück.
get_Result_size Bestimmt die Ergebnisgröße (Anzahl Zeilen) aller Queries nach paralleler Ausführung.

Beziehungen

Der Query Handler besteht aus folgenden Klassen:

Klasse Bedeutung
CL_RSDR_AT_OBJ Ein unteilbares Objekt. Basisklasse der Hierarchie.
CL_RSDR_AT_QUERY Eine elementare (unteilbare Query), erbt von CL_RSDR_AT_OBJ
CL_RSDR_AT_QUERY_SQL Eine unteilbare SQL-Query, besteht im Wesentlichen aus einer sx_query, die vom Read-Interface ( CL_RSDRS_SQL_QUERY) verarbeitet wird. Erbt von CL_RSDR_AT_QUERY.
CL_RSDR_AT_QUERY_VIRTUAL Eine aus Sicht des Data-Managers virtuelle Query. Sie wird vom virtuellen Interface des Data Managers (CL_RSDRV_VCUBE) ausgeführt. Die Query besteht aus den normalen Bestandteilen eines Data-Manager Zugriffs sfc, sfk, seldr, splitpack... .Erbt von CL_RSDR_AT_QUERY.
CL_RSDR_AT_POSTPROC Ein Postprocessing. Hier können die Daten mehrerer atomarer Queries abgeglichen werden, bevor sie zurückgegeben werden. Erbt von CL_RSDR_AT_OBJ.
CL_RSDR_AT_QUERY_HANDLER Der Query Handler. Er sammelt die atomaren Query-Objekte und führt sie aus.
Funktionsgruppe RSDRP Diese Funktionsgruppe wird für die eigentliche parallele Abarbeitung mittels asynchronem RFC (call function starting new task ) verwendet
CL_RSDRP_AT_QUERY_RFC Erweiterung der Funktionsgruppe RSDRP, als Klasse, um auf protected-Methoden von CL_RSDR_AT_QUERY zugreifen zu können.

Beispiel

REPORT Z_RSDRP_AT_QUERY_TC.
TYPE-POOLS: RS, RSR, RSDRS, RSDRP.

DATA:
  l_r_query_hdl     TYPE REF TO CL_RSDR_AT_QUERY_HANDLER,
  l_r_sql_query     TYPE REF TO CL_RSDR_AT_QUERY_SQL,
  l_parallel        TYPE rs_bool,
  l_t_tc_no         TYPE STANDARD TABLE of I
                      with default key initial size 0,
  l_sx_query      TYPE rsdrs_sx_query,
  l_sx_splitpack  TYPE rsdr0_sx_splitpack,
  l_r_tdata       TYPE ref to data,
  l_eof           TYPE rs_bool,
  BEGIN OF l_s_data ,
    S____574      TYPE I ,
    _KEYEND(1)    TYPE C ,
    1ROWCOUNT     TYPE I ,
    RSDRSKYF1     TYPE I ,
  END OF l_s_data ,
  L_T_DATA        LIKE STANDARD TABLE of L_S_DATA
                    WITH DEFAULT KEY INITIAL SIZE 0.

* create the query handler object ...
create object l_r_query_hdl.

* somehow build the sx_query structures
  l_r_sql_query = CL_RSDR_AT_QUERY_SQL=>CREATE(
      i_infoprov     = 'XXXX'
      i_sx_splitpack = l_sx_splitpack
      i_sx_query     = l_sx_query ).

* add query to query handler
  l_subrc = l_r_query_hdl->add_query( l_r_sql_query ).
*...
*********************************************
* run query handler
*********************************************
l_r_query_hdl->execute(
  EXPORTING
    i_rt_sample_data     = l_t_data
  IMPORTING  
    e_parallel_execution = l_parallel ).

if l_parallel = rs_c_false.
* no parallel processing possible
  while not l_eof = rs_c_true.
    l_r_query_hdl->execute_serially(
      IMPORTING
          e_sx_splitpack = l_sx_splitpack
         e_t_data       = l_t_data
          e_end_of_data  = l_eof ).
*...
  endwhile.
else.
  while not l_eof = rs_c_true.
    l_r_query_hdl->get_result_packaged(
      IMPORTING
          e_sx_splitpack = l_sx_splitpack
         e_t_data       = l_t_data
          e_end_of_data  = l_eof ).
*...
  endwhile.

l_r_query_handler->drop_tmpobjs().

Hinweise

Weiterführende Informationen






ABAP Short Reference   TXBHW - Original Tax Base Amount in Local Currency  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9832 Date: 20240423 Time: 213147     sap01-206 ( 113 ms )