Spool-ID zum Hintergrundjob ermitteln

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

Spool-ID zum Hintergrundjob ermitteln

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hallo zusammen,
ich habe ein merkwürdiges Problem :-)
Mein Report wird in einem Job als 2. Step im Hintergrund ausgeführt und soll die Spooldaten des 1. Steps in eine Excel-Datei exportieren. Das Problem liegt hier aber erstmal nur auf der Ermittlung der SPOOLID des 1. Steps des Jobs.

Ich wollte mir mit dem FuBa 'GET_JOB_RUNTIME_INFO' die Daten zum aktuellen Job holen und dann die SPOOLID zu 1. Step mit dem FuBa 'BP_JOB_READ' ermitteln.

Bei der Übergabe der Paramter 'JOBCOUNT' und 'JOBNAME' an den FuBa 'BP_JOB_READ' gibt es aber ein Problem, da diese Werte anscheinend im Programm nicht "richtig" übergeben werden. Das Ergebnis ist, dass die Rückgabe-Tabelle 'SPOOL_ATTRIBUTES' leer ist. Übergebe ich die beiden Parameter als feste Strings, also z.B. '12345' und 'Z_JOB_1' funktioniert es, nur die Übergabe per Variable scheint Probleme zu machen.

Hier mal der Code-Ausschnitt:

Code: Alles auswählen.

IF sy-batch = 'X'.

  CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
    IMPORTING
      eventid                 = eventid
      eventparm               = eventparm
      external_program_active = external_program_active
      jobcount                = jobcount
      jobname                 = jobname
      stepcount               = stepcount
    EXCEPTIONS
      no_runtime_info         = 1
      OTHERS                  = 2.

  WRITE: / 'jobcount: ' ,jobname.
  WRITE: / 'Jobname: ' ,jobcount.
  WRITE: / 'stepcount: ' ,stepcount.
  WRITE: / 'eventid: ' ,eventid.
  WRITE: / 'eventparm: ' ,eventparm.
  WRITE: / 'external_program_active: ' ,external_program_active.


  "  IF sy-subrc <> 0.
  "    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  "            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  "  ENDIF.

  data:
        job(8) type c,
        name(32) type c.
  move jobcount to job.
  move jobname to name.
  CALL FUNCTION 'BP_JOB_READ'
    EXPORTING
      job_read_jobcount           = job "'15382900' "jobcount
      job_read_jobname            = name "'Z_SPOOL2XLS' "jobname
      job_read_opcode             = 36
      job_step_number             = 1
*   IMPORTING
*     JOB_READ_JOBHEAD            =
*     JOBLOG_ATTRIBUTES           =
    TABLES
*     JOB_READ_STEPLIST           =
      spool_attributes            = lt_spool_attrib "spool_attributes
*   CHANGING
*     RET                         =
   EXCEPTIONS
     invalid_opcode              = 1
     job_doesnt_exist            = 2
     job_doesnt_have_steps       = 3
     OTHERS                      = 4
            .

" ...
ENDIF.
Ich bin schon etwas am verzweifeln, aber ich seh den Fehler nicht. Woran kann das liegen???
Würde mich über jede Hilfe freuen.

Danke und Grüße,
Andreas

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Spool-ID zum Hintergrundjob ermitteln

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin,
bitte die Parameter für den Aufruf von Funktionsbausteinen genau typisieren !
und nicht

Code: Alles auswählen.

       job(8) type c,
        name(32) type c.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Spool-ID zum Hintergrundjob ermitteln

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Sorry, da war mein Code-Ausschnitt nicht vollständig, denn die beiden Variablen hatte ich vor dem Aufruf des ersten FuBas deklariert:

Code: Alles auswählen.

jobcount LIKE tbtcm-jobcount,
jobname LIKE tbtcm-jobname,
Erst als das alles nicht funktioniert hatte, habe ich testhalber nochmal zwei zeichenartige Typen angelegt, was aber auch nix geändert hatte :-(

Sollte doch so passen, oder?!

Re: Spool-ID zum Hintergrundjob ermitteln

Beitrag von Tron (Top Expert / 1327 / 35 / 332 ) »
Moin,
hier mein Vorschlag (getestet)

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZTEST71                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  ztest71.

* ============ SAP Hinweis 186603 ==============
*Bei der Anzeige einer Spool-Liste in der SP01 und bei der
*Weiterverarbeitung (z.B. Senden an SAPoffice) wird die Breite
*der Liste immer auf 255 gesetzt, egal wie breit die Liste vorher war.

DATA ls_tsp01 TYPE tsp01.

DATA: numbytes TYPE i,
      pdfspoolid LIKE tsp01-rqident,
      jobname LIKE tbtcjob-jobname,
      jobcount LIKE tbtcjob-jobcount,
      is_otf.

* Job Runtime Parameters
DATA: gd_eventid LIKE tbtcm-eventid,
      gd_eventparm LIKE tbtcm-eventparm,
      gd_external_program_active LIKE tbtcm-xpgactive,
      gd_jobcount LIKE tbtcm-jobcount,
      gd_jobname LIKE tbtcm-jobname,
      gd_stepcount LIKE tbtcm-stepcount.

* Spool IDs
TYPES: BEGIN OF t_tbtcp.
        INCLUDE STRUCTURE tbtcp.
TYPES: END OF t_tbtcp.

DATA: it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
      wa_tbtcp TYPE t_tbtcp.

DATA  spoolno LIKE tsp01-rqident.


* Klappt NUR als Job !!!!!!
IF sy-batch IS INITIAL.
  SKIP.
  WRITE:/ '>>> Programm muss im Hintergrund (als Job) laufen <<<'
           COLOR COL_NEGATIVE INTENSIFIED OFF .
  EXIT.
ENDIF.

* Get current job details
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
  IMPORTING
    eventid                 = gd_eventid
    eventparm               = gd_eventparm
    external_program_active = gd_external_program_active
    jobcount                = gd_jobcount
    jobname                 = gd_jobname
    stepcount               = gd_stepcount
  EXCEPTIONS
    no_runtime_info         = 1
    OTHERS                  = 2.

* Nimm das Spoolfile des vorherigen Steps
gd_stepcount = gd_stepcount - 1.

IF gd_stepcount < 1.
  MESSAGE s398(00) WITH
  'Problem - kann nicht als STEP 1 laufen !!' '' '' ''.
  EXIT.
ENDIF.

SELECT * FROM tbtcp
INTO TABLE it_tbtcp
WHERE jobname = gd_jobname
AND jobcount = gd_jobcount
AND stepcount = gd_stepcount
AND listident <> '0000000000'
ORDER BY jobname  jobcount  stepcount.

READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.
IF sy-subrc = 0.
  spoolno = wa_tbtcp-listident.
  MESSAGE s398(00) WITH 'Spoolnummer ' spoolno ' gefunden.' '' .
ELSE.
  MESSAGE s398(00) WITH 'Problem - keine Spoolnummer gefunden' '' '' ''.
  EXIT.
ENDIF.


SELECT SINGLE * FROM tsp01 INTO ls_tsp01 WHERE rqident = spoolno.
IF sy-subrc <> 0.
  WRITE: / 'Spoolauftrag existiert nicht'(003)
          COLOR COL_NEGATIVE.
  EXIT.
ENDIF.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Spool-ID zum Hintergrundjob ermitteln

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) »
Hall Jens,

danke für den Tipp! Damit funktioniert es und ich bekomme die SPOOL-Daten. Warum der Fuba 'BP_JOB_READ' mit der Spool-ID nicht umgehen konnte, ist mir aber immer noch nicht ganz klar...

Trotzdem danke!

Gruß Andreas

Seite 1 von 1

Vergleichbare Themen

2
Antw.
3254
Views
Spool zu PDF konvertieren - Problem mit Hintergrundjob
von DaBoo » 14.08.2008 11:37 • Verfasst in ABAP® Core
1
Antw.
2745
Views
WRITE im Hintergrundjob kommt nicht im Spool an
von Thanatos82 » 15.11.2016 08:59 • Verfasst in ABAP® Core
2
Antw.
600
Views
Dynpro - Hintergrundjob
von Jhacky3 » 13.07.2021 14:54 • Verfasst in ABAP® für Anfänger
6
Antw.
2274
Views
Hintergrundjob mit Passwort?
von danielA. » 18.04.2006 13:31 • Verfasst in ABAP® Core
2
Antw.
2573
Views
Report als Hintergrundjob
von Dimonic » 02.07.2009 11:18 • Verfasst in SAP - Allgemeines

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.