Ansicht
Dokumentation
CL_RSDR_AT_QUERY_HANDLER - Query Handler for Atomic Queries
rdisp/max_wprun_time - Maximum work process run time General Material DataDiese Dokumentation steht unter dem Copyright der SAP AG.
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 )