*---------------------------------------------------------------------*
* Z _ B J H _ J O B _ A N S T O S S *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Programm zum Anstoß eines Jobs. Dadurch kann Zeit gespart werden, *
* wenn der Job z.B. eine Stückliste auflösen soll, das Anstoßprogramm *
* aber x Stücklisten benötigt. In diesem Programm soll das rufende *
* Programm nur x Sekunden warten. Das auslösende / jobrufende Programm*
* prüft jede Sekunde, ob der Job schon durch ist.Die Parameterübergabe*
* erfolgt über eine Zwischendatei und festverdrahteten Schlüsseln. *
*---------------------------------------------------------------------*
* Abklatsch aus C14H_JOB_START, FB nicht direkt verwendbar, da die *
* Jobcount nicht zurückübergeben wird. *
*---------------------------------------------------------------------*
* 07.04.2005 BHaa: Programm erstellt *
*---------------------------------------------------------------------*
REPORT z_bjh_job_anstoss .
TABLES:
* Testdatei für die Übergabe, beinhaltet nur 2 Felder
* schl (=Key-Feld) 1-einstellig, wert numc 3-stellig
zzv_test. "Datei zur Übergabe der Parameter
CONSTANTS:
btc_stdt_immediate LIKE tbtcstrt-startdttyp VALUE 'I',
btc_stdt_datetime LIKE tbtcstrt-startdttyp VALUE 'D',
btc_stdt_event LIKE tbtcstrt-startdttyp VALUE 'E',
btc_stdt_afterjob LIKE tbtcstrt-startdttyp VALUE 'A',
btc_stdt_onworkday LIKE tbtcstrt-startdttyp VALUE 'W',
btc_process_always LIKE btch0000-char1 VALUE ' '.
DATA:
wa_test LIKE zzv_test,
anzahl(6) TYPE n.
*****************************
* Stati der Jobverarbeitung *
*****************************
DATA:
BEGIN OF x,
aborted(1) TYPE c, "Status 'abgebrochen'
finished(1) TYPE c, "Status 'beendet'
preliminary(1) TYPE c, "Status 'vorläufig eingeplant'
ready(1) TYPE c, "Status 'bereit zur Ausführung'
running(1) TYPE c, "Status 'aktiv'
scheduled(1) TYPE c, "Status 'Einplanung freigegeben'
END OF x.
DATA:
i_stdt LIKE tbtcstrt.
* Job number which was generated
DATA: l_jobcount LIKE tbtco-jobcount.
* jobname and jobtext
DATA: l_authcknam LIKE tbtcjob-authcknam.
DATA: l_job_was_released LIKE btch0000-char1.
DATA: l_start_immediate LIKE btch0000-char1.
* starttime
DATA: l_stdt LIKE tbtcstrt.
DATA: user_print_params LIKE pri_params.
DATA: user_arch_params LIKE arc_params.
DATA : v_valid TYPE c.
*---------------------------------------------------------------------*
* *
* A u s w a h l b i l d s c h i r m *
* *
*---------------------------------------------------------------------*
* wieviel Sekunden soll der Job laufen
SELECTION-SCREEN: BEGIN OF BLOCK a1 WITH FRAME TITLE text-901.
PARAMETERS:
* Jobname, abprüfbar dann im SM37
pm_job LIKE tbtco-jobname DEFAULT 'BJH_TEST',
* welches Programm soll gestartet werden
pm_prog LIKE tbist-repname DEFAULT 'ZMDE_BJH_JOB_WARTEN',
* Variante im Programm
pm_varia LIKE tbist-variant DEFAULT '',
* Laufdauer in Sekunden
pm_sek(3) TYPE n DEFAULT 10.
SELECTION-SCREEN: END OF BLOCK a1.
***********************************************************************
* *
* P R O G R A M M S T A R T *
* *
***********************************************************************
START-OF-SELECTION.
* geht nicht, werden nicht übergeben
* EXPORT pm_sek TO MEMORY ID 'ZZ_TEST_JOB_SEK'.
* also so über Extra-Tabelle
SELECT SINGLE * FROM zzv_test INTO wa_test
WHERE schl = 'A'.
IF sy-subrc = 0.
UPDATE zzv_test
SET wert = pm_sek
WHERE schl = 'A'.
ELSE.
MOVE 'A' TO wa_test-schl.
MOVE pm_sek TO wa_test-wert.
INSERT INTO zzv_test VALUES wa_test.
ENDIF.
* Prozedur für das Starten eines Jobs (FB C14H_JOB_START)
* der Funktionsbaustein eignet sich nicht, da in der dortigen Funk-
* tionsgruppe keine Möglichkeit zum Auslesen des Jobstatus besteht
PERFORM upro-job_starten.
CLEAR: anzahl, x.
* Schleife, die solange läuft wie auch der Job läuft, wobei die Anzahl
* wie die eingegebenen Sekunden +2 zu rechnen ist, da der 1. Durchlauf
* sofort ist und der letzte den Abbruch feststellt
WHILE x-finished IS INITIAL
AND x-aborted IS INITIAL.
ADD 1 TO anzahl.
* schauen, ob der angestartete Prozeß noch aktiv ist. Die dort über-
* gebenen Flag beeinflussen die While-Schleife
PERFORM upro-job_aktiv.
* 'ne Sekunde warten, bevor nächster Durchlauf
WAIT UP TO 1 SECONDS.
ENDWHILE.
WRITE: / anzahl, 'Durchläufe'.
END-OF-SELECTION.
EXIT.
*---------------------------------------------------------------------*
* J O B _ S T A R T E N *
*---------------------------------------------------------------------*
* Job initiieren und sofort starten. Keine Einplanung zu einem *
* bestimmten Zeitpunkt, dieses wäre aber auch über die Parameter mög- *
* lich. Die Folge und Werte entsprechen auch der SM36. *
*---------------------------------------------------------------------*
FORM upro-job_starten.
i_stdt-startdttyp = 'I'. "Sofortstart
CALL FUNCTION 'GET_PRINT_PARAMETERS'
EXPORTING
mode = 'BATCH'
report = pm_prog
no_dialog = 'X'
IMPORTING
out_archive_parameters = user_arch_params
out_parameters = user_print_params
valid = v_valid
EXCEPTIONS
archive_info_not_found = 1
invalid_print_params = 2
invalid_archive_params = 3
OTHERS = 4.
* create job
CALL FUNCTION 'JOB_OPEN'
EXPORTING
* DELANFREP = ' '
* JOBGROUP = ' '
jobname = pm_job
* SDLSTRTDT = NO_DATE
* SDLSTRTTM = NO_TIME
IMPORTING
jobcount = l_jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF NOT sy-subrc IS INITIAL.
RAISE error_job_open.
ENDIF.
* create the report as a step in the batch job
l_authcknam = sy-uname.
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
* ARCPARAMS = ' '
authcknam = l_authcknam
* EXTPGM_NAME = ' '
* EXTPGM_PARAM = ' '
* EXTPGM_SET_TRACE_ON = ' '
* EXTPGM_STDERR_IN_JOBLOG = 'X'
* EXTPGM_STDOUT_IN_JOBLOG = 'X'
* EXTPGM_SYSTEM = ' '
* EXTPGM_WAIT_FOR_TERMINATION = 'X'
jobcount = l_jobcount
jobname = pm_job
* LANGUAGE = SY-LANGU
priparams = user_print_params
arcparams = user_arch_params
report = pm_prog
variant = pm_varia
EXCEPTIONS
bad_priparams = 1
bad_xpgflags = 2
invalid_jobdata = 3
jobname_missing = 4
job_notex = 5
job_submit_failed = 6
lock_failed = 7
program_missing = 8
prog_abap_and_extpg_set = 9
OTHERS = 10.
IF NOT sy-subrc IS INITIAL.
RAISE error_job_submit.
ENDIF.
* check if start job immediate and set flag
l_stdt = i_stdt.
CASE l_stdt-startdttyp.
WHEN btc_stdt_immediate.
l_start_immediate = 'X'.
l_stdt-sdlstrtdt = space.
l_stdt-sdlstrttm = space.
l_stdt-laststrtdt = space.
l_stdt-laststrttm = space.
WHEN btc_stdt_datetime.
WHEN btc_stdt_event.
WHEN btc_stdt_afterjob.
ENDCASE.
* close the job definition and start the job
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
* at_opmode = l_stdt-baname
* AT_OPMODE_PERIODIC = ' '
calendar_id = l_stdt-calendarid
event_id = l_stdt-eventid
event_param = l_stdt-eventparm
event_periodic = l_stdt-periodic
jobcount = l_jobcount
jobname = pm_job
laststrtdt = l_stdt-laststrtdt
laststrttm = l_stdt-laststrttm
prddays = l_stdt-prddays
prdhours = l_stdt-prdhours
prdmins = l_stdt-prdmins
prdmonths = l_stdt-prdmonths
prdweeks = l_stdt-prdweeks
predjob_checkstat = l_stdt-checkstat
pred_jobcount = l_stdt-predjobcnt
pred_jobname = l_stdt-predjob
sdlstrtdt = l_stdt-sdlstrtdt
sdlstrttm = l_stdt-sdlstrttm
startdate_restriction = btc_process_always
strtimmed = l_start_immediate
targetsystem = l_stdt-instname
start_on_workday_not_before = l_stdt-notbefore
start_on_workday_nr = l_stdt-wdayno
workday_count_direction = l_stdt-wdaycdir
IMPORTING
job_was_released = l_job_was_released
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
IF NOT sy-subrc IS INITIAL.
RAISE error_job_close.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* J O B _ A K T I V *
*---------------------------------------------------------------------*
* prüfen, ob der angestossene Job noch läuft oder schon beendet ist *
* oder eventuell sogar abgebrochen wurde. Das Ergebnis wird in Form *
* der Form aus dem Baustein zurückübergeben und kann hier für die *
* weitere Verarbeitung genutzt werden. *
*---------------------------------------------------------------------*
FORM upro-job_aktiv.
CALL FUNCTION 'SHOW_JOBSTATE'
EXPORTING
jobcount = l_jobcount
jobname = pm_job
IMPORTING
aborted = x-aborted
finished = x-finished
preliminary = x-preliminary
ready = x-ready
running = x-running
scheduled = x-scheduled
EXCEPTIONS
jobcount_missing = 1
jobname_missing = 2
job_notex = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
***** Ende *****
*---------------------------------------------------------------------*
* Z _ B J H _ J O B _ W A R T E N *
* *
* Autor: Bernd Haase (BJH Software) *
*---------------------------------------------------------------------*
* Testprogramm für z_bjh_job_anstoss *
* Die hier vorhandene Tabelle zzv_test dient zur Übergabe der Para- *
* meter, hier ist es zwar nur die Sekunden, die dieser Job warten soll*
* es könnten aber auch Stücklistendaten oder Rechnungsnummer sein. *
*---------------------------------------------------------------------*
* 07.04.2005 BHaa: Programm erstellt *
*---------------------------------------------------------------------*
*REPORT z_bjh_job_warten .
*
*TABLES:
* zzv_test. "Datei zur Übergabe der Parameter
*
*DATA:
* wa_test LIKE zzv_test.
*
*START-OF-SELECTION.
*
** geht nicht über Import, also über Tabelle
** IMPORT wa_sekunden FROM MEMORY ID 'ZZ_TEST_JOB_SEK'.
*
* SELECT SINGLE * FROM zzv_test INTO wa_test
* WHERE schl = 'A'.
* IF sy-subrc = 0.
* WRITE: / sy-datum, sy-uzeit, wa_test-wert, 'Sekunden Wartezeit'.
*
* WAIT UP TO wa_test-wert SECONDS.
*
* WRITE: / sy-datum, sy-uzeit.
* ENDIF.
*
*END-OF-SELECTION.
* EXIT.
*
***** Ende *****
* Copyright BJH Software, Datei überarbeitet am: 26.5.2005