SAP Jobsuche bei DV-Treff


Suchen
abeape
  • abeape
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
Hallo zusammen,

ich stehe vor folgender Herausforderung:

Aus dem Report A sollen die Reports B, C und D aufgerufen werden.

In bestimmten Fällen soll der Aufruf sofort geschehen, in anderen, durch eine Einplanung als Job zu einem späteren Zeitpunkt.

Bei Report A gibt der Anwender einige Selektionen auf dem Selektionsbildschirm an, darunter eine SELECT-OPTIONS und einige PARAMETER. Die dortigen Eingaben sollen in an die Reports B, C und D weitergegeben werden (z.B. SELECT-OPTIONS Report A an SELECT-OPTIONS Report 😎.

Wie ich es bei Soforaufruf mache, ist erstmal klar.

Wenn ich die Ausführung der Reports B, C und D als Job einplanen möchte, nutze ich die Bausteine JOB_OPEN, JOB_SUBMIT und JOB_CLOSE. Bei JOB_SUBMIT habe ich die Möglichkeit Parameter für den aufzurufenden Report mitzugeben. Jetzt stehe ich allerdings vor folgendem Problem:

Wie kann ich die Werte aus der SELECT-OPTIONS mitgeben, deren Ranges-Tabelle über 1000 Werte beinhalten könnte?

Ein Workaround wäre, die Werte aus der SELECT-OPTION in eine eigens definierte Tabelle zu schreiben, aus der die Daten von den verschiedenen Reports gelesen und weiter verarbeitet werden könnten. Aber gibt es da vielleicht eine elegantere und vor allem performantere Lösung?

Vielen Dank und viele Grüße

Förderer

wreichelt
vor 5 Jahre
Hallo,

nutzt ihr keine Varianten zur Jobeinplanung ? Wenn die Varianten für die Jobs gepflegt ist können die Reports

doch mit den gleichen Selektionsbedingungen starten

Gruß Wolfgang

abeape
  • abeape
  • SAP Forum - Neuling Thema Starter
vor 5 Jahre
Zitat von: wreichelt 

Hallo,

nutzt ihr keine Varianten zur Jobeinplanung ? Wenn die Varianten für die Jobs gepflegt ist können die Reports

doch mit den gleichen Selektionsbedingungen starten

Gruß Wolfgang

Hallo Wolfgang,

erstmal vielen Dank für die Antwort.

Unter Variante verstehe ich vorher definierte Werte. Da die Selektion im rufenden Programm immer unterschiedlich ausfällt (und diese zum gerufenen Programm übergeben werden müssen), kann ich den Nutzen einer Variante nicht erkennen - oder fasse ich eine Variante falsch auf?

Ich denke aber, dass ich eine mögliche Lösung gefunden habe (muss ich noch testen):

Für die Ausführung als Hintergrundjob (zu einem späteren Zeitpunkt) würde ich statt des FuBa JOB-SUBMIT die Anweisung SUBMIT nutzen, wo ich ja auch Selektionsoptionen (Ranges-Tabelle) übergeben und zuderm den Zusatz VIA JOB nutzen kann. Die Aufrufe von JOB_OPEN und JOB_CLOSE finden drumherum weiterhin statt.

Viele Grüße

Horst_1959
vor 4 Jahre
Moin,

habe für so was eine Puffertabelle 'ZNEWINDX' und ein paar eigene Objekte, aber es ist kein Wunderwerk wenn man es nachbauen mag. Man muss auch keine Objekte haben, es geht auch ohne OO.

Bei SEL_START muss man die eigenen Selektionsvariablen bedienen. Das ganze kann hier nur als Beispiel dienen!

Und SAVE_LAST_SELECTION macht das was der Name verspricht. Zumindest dann, wenn man keine Variante benutzt hat!

Hoffe es hilft weiter.

HK

Lesen und Schreiben der Selektion ( unter USERNAME und REPID!)

*&---------------------------------------------------------------------*

*& Form SEL_START

*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM sel_start .

FIELD-SYMBOLS : TYPE rsparams.

IF o_new_persistent IS INITIAL.

o_new_persistent = zcl_new_persistent=>create( ).

ENDIF.

DEFINE fill_seltab.

&1-SIGN = -SIGN.

&1-option = -option.

&1-low = -low.

&1-high = -high.

APPEND &1 TO &1.

END-OF-DEFINITION.

*----- Nutzerspezifische Werte

CONCATENATE sy-repid sy-uname INTO puffer_id.

*----- nicht aus dem memory holen!

DELETE FROM SHARED BUFFER znewindx(hk) ID puffer_id.

CALL METHOD o_new_persistent->read_object

EXPORTING

e_srtfd = puffer_id

IMPORTING

i_object = ta_select

i_error = error.

IF NOT o_new_persistent IS INITIAL.

CLEAR o_new_persistent.

ENDIF.

CHECK NOT ta_select[] IS INITIAL.

LOOP AT ta_select ASSIGNING .

CASE -selname.

*----- Tabellen

*----- Zeitraum abgrenzen

WHEN 'SO_GSTRP'.

fill_seltab so_gstrp.

*----- Werk

WHEN 'SO_WERKS'.

fill_seltab so_werks.

*----- Arbeitsplatz

WHEN 'SO_ARBPL'.

fill_seltab so_arbpl.

**----- Memory-Optimierte Liste

* WHEN 'P_KURZ'.

* IF g_dau_user = abap_false.

* p_kurz = -low.

* ELSE.

* p_kurz = abap_true.

* ENDIF.

*----- Parameter Steuerung

WHEN 'P_PLUSM'.

p_plusm = -low.

WHEN 'P_MINUS'.

p_minus = -low.

WHEN 'P_FORM'.

p_form = -low.

WHEN 'P_CLOCK'.

p_clock = -low.

WHEN 'P_PRODI'.

p_prodi = -low.

*----- GLEICHTEILE

WHEN 'P_1001'.

p_1001 = -low.

WHEN 'P_1002'.

p_1002 = -low.

WHEN 'P_1003'.

p_1003 = -low.

WHEN 'P_2001'.

p_2001 = -low.

WHEN 'P_2002'.

p_2002 = -low.

WHEN 'P_2003'.

p_2003 = -low.

WHEN 'P_3001'.

p_3001 = -low.

WHEN 'P_3002'.

p_3002 = -low.

WHEN 'P_3003'.

p_3003 = -low.

WHEN 'P_4001'.

p_4001 = -low.

WHEN 'P_4002'.

p_4002 = -low.

WHEN 'P_4003'.

p_4003 = -low.

* p_5001 existiert nicht

WHEN 'P_5002'.

p_5002 = -low.

WHEN 'P_5003'.

p_5003 = -low.

WHEN OTHERS.

ENDCASE.

ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form

SAVE_LAST_SELECTION
*&---------------------------------------------------------------------*

* text

*----------------------------------------------------------------------*

* --> p1 text

* <-- p2 text

*----------------------------------------------------------------------*

FORM save_last_selection.

DATA : l_wa TYPE znewindx.

CHECK sy-slset IS INITIAL. " Nur wenn keine Variante genutzt wurde

CLEAR l_wa.

CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'

EXPORTING

curr_report = sy-repid

* IMPORTING

* SP =

TABLES

selection_table = ta_select

EXCEPTIONS

not_found = 1

no_report = 2

OTHERS = 3.

IF sy-subrc <> 0.

RETURN.

ENDIF.

*----- Immer auf die Platte

CONCATENATE sy-repid sy-uname INTO puffer_id.

CALL FUNCTION 'ENQUEUE_EZNEWINDX'

EXPORTING

mode_znewindx = 'E'

mandt = sy-mandt

relid = 'hk'

srtfd = puffer_id

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

IF sy-subrc = 0.

DELETE FROM DATABASE znewindx(hk) ID puffer_id.

COMMIT WORK AND WAIT.

l_wa-aedat = sy-datum.

l_wa-usera = sy-uname.

l_wa-pgmid = sy-repid.

EXPORT l_wa FROM ta_select TO DATABASE znewindx(hk)

ID puffer_id

FROM l_wa

COMPRESSION ON.

COMMIT WORK AND WAIT.

CALL FUNCTION 'DEQUEUE_EZNEWINDX'

EXPORTING

mode_znewindx = 'E'

mandt = sy-mandt

relid = 'hk'

srtfd = puffer_id.

ENDIF.

ENDFORM.