工具: CHGSCDTIM 更改工作排程時間
The following source code was provided by Randy Gish .
It is the reader's responsibility to ensure that procedures and techniques
used from this code are accurate and appropriate for the user's installation.
No warranty is implied or expressed. Please back up your files before you run
a new procedure or program or make significant changes to disk files, and be
sure to test all procedures and programs before putting them into production.
CHGSCDTIM Command Source:
CMD PROMPT('Change Job Schedule Time')
PARM KWD(JOBNAM) TYPE(*NAME) LEN(10) MIN(1) +
PROMPT('Scheduled Job Name')
PARM KWD(INCREMENT) TYPE(*CHAR) LEN(6) MIN(1) +
PROMPT('Increment Time (HHMMSS)')
PARM KWD(CUTOFF) TYPE(*CHAR) LEN(6) +
PROMPT('Cutoff Time (HHMMSS)')
PARM KWD(RESET) TYPE(*CHAR) LEN(6) +
PROMPT('Reset Time (HHMMSS)')
PARM KWD(TIMVAL) TYPE(*CHAR) LEN(4) RSTD(*YES) +
DFT(*SCD) VALUES(*SCD *SYS) PROMPT('Time +
Value to Increment')
CHGSCDTIM Command Processing Program Source:
/* This program increments the scheduled time for a Job Schedule Entry. The */
/* increment, cutoff, and reset times should be passed as 'HHMMSS'. */
PGM PARM(&JOBSCDNAM &INCREMENT &CUTOFF &RESET &TIMVAL)
DCL VAR(&JOBSCDNAM) TYPE(*CHAR) LEN(10)
DCL VAR(&INCREMENT) TYPE(*CHAR) LEN(6)
DCL VAR(&CUTOFF) TYPE(*CHAR) LEN(6)
DCL VAR(&RESET) TYPE(*CHAR) LEN(6)
DCL VAR(&TIMVAL) TYPE(*CHAR) LEN(4)
DCL VAR(&USRSPC) TYPE(*CHAR) LEN(20) +
VALUE('CHGSCDTIM QTEMP ') /* USER +
SPACE NAME FOR APIS */
DCL VAR(&CNTHDL) TYPE(*CHAR) LEN(16) +
VALUE(' ') /* CONTINUATION +
HANDLE */
DCL VAR(&NUMENTB) TYPE(*CHAR) LEN(4) /* NUMBER +
OF ENTRIES FROM LIST JOB SCHEDULE ENTRIES +
IN BINARY FORM */
DCL VAR(&NUMENT) TYPE(*DEC) LEN(8 0) /* NUMBER +
OF ENTRIES FROM LIST JOB SCHEDULE ENTRIES +
IN DECIMAL FORM */
DCL VAR(&GENHDR) TYPE(*CHAR) LEN(140) /* GENERIC +
HEADER INFORMATION FROM THE USER SPACE */
DCL VAR(&LSTSTS) TYPE(*CHAR) LEN(1) /* STATUS OF +
THE LIST IN THE USER SPACE */
DCL VAR(&OFFSETB) TYPE(*CHAR) LEN(4) /* OFFSET +
TO THE LIST PORTION OF THE USER SPACE IN +
BINARY FORM */
DCL VAR(&STRPOSB) TYPE(*CHAR) LEN(4) /* STARTING +
POSITION IN THE USER SPACE IN BINARY FORM */
DCL VAR(&ELENB) TYPE(*CHAR) LEN(4) /* LIST JOB +
ENTRY LENGTH IN BINARY 4 FORM */
DCL VAR(&LENTRY) TYPE(*CHAR) LEN(1156) /* +
RETRIEVE AREA FOR LIST JOB SCHEDULE ENTRY */
DCL VAR(&INCHH) TYPE(*CHAR) LEN(2)
DCL VAR(&INCMM) TYPE(*CHAR) LEN(2)
DCL VAR(&INCSS) TYPE(*CHAR) LEN(2)
DCL VAR(&INCHH#) TYPE(*DEC) LEN(2 0)
DCL VAR(&INCMM#) TYPE(*DEC) LEN(2 0)
DCL VAR(&INCSS#) TYPE(*DEC) LEN(2 0)
DCL VAR(&SCDHH) TYPE(*CHAR) LEN(2)
DCL VAR(&SCDMM) TYPE(*CHAR) LEN(2)
DCL VAR(&SCDSS) TYPE(*CHAR) LEN(2)
DCL VAR(&SCDHH#) TYPE(*DEC) LEN(2 0)
DCL VAR(&SCDMM#) TYPE(*DEC) LEN(2 0)
DCL VAR(&SCDSS#) TYPE(*DEC) LEN(2 0)
DCL VAR(&SCDTIME) TYPE(*CHAR) LEN(6)
DCL VAR(&NEWHH#) TYPE(*DEC) LEN(3 0)
DCL VAR(&NEWMM#) TYPE(*DEC) LEN(3 0)
DCL VAR(&NEWSS#) TYPE(*DEC) LEN(3 0)
DCL VAR(&NEWTIME) TYPE(*CHAR) LEN(6)
DCL VAR(&SYSTIME) TYPE(*CHAR) LEN(6)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(07)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGL) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(ERROR))
/* Delete the user space if it already exists. */
DLTUSRSPC USRSPC(QTEMP/CHGSCDTIM)
MONMSG MSGID(CPF0000)
/* Create the user space. The user space will be 256 bytes and */
/* will be initialized to blanks. */
CALL PGM(QUSCRTUS) PARM(&USRSPC 'CHGSCDTIM ' +
X'00000100' ' ' '*ALL ' 'TEMPORARY +
USER SPACE ')
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
/* List the job schedule entry of the name specified. */
CALL PGM(QWCLSCDE) PARM(&USRSPC 'SCDL0200' +
&JOBSCDNAM &CNTHDL 0)
/* Retrieve the generic header from the user space. */
CALL PGM(QUSRTVUS) PARM(&USRSPC X'00000001' +
X'0000008C' &GENHDR)
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
/* Get the information status for the list from the generic header. */
CHGVAR VAR(&LSTSTS) VALUE(%SST(&GENHDR 104 1))
IF COND(&LSTSTS = 'I') THEN(GOTO CMDLBL(ENDPGM))
/* Get the number of entries returned and convert to decimal. */
/* If zero, go to ENDPGM. */
CHGVAR VAR(&NUMENTB) VALUE(%SST(&GENHDR 133 4))
CHGVAR VAR(&NUMENT) VALUE(%BIN(&NUMENTB))
IF COND(&NUMENT = 0) THEN(GOTO CMDLBL(ENDPGM))
/* Get the list entry length and offset. These values are used to */
/* set up the starting position. */
CHGVAR VAR(&ELENB) VALUE(%SST(&GENHDR 137 4))
CHGVAR VAR(&OFFSETB) VALUE(%SST(&GENHDR 125 4))
CHGVAR VAR(%BIN(&STRPOSB)) VALUE(%BIN(&OFFSETB) + 1)
/* Retrieve the list entry. */
CALL PGM(QUSRTVUS) PARM(&USRSPC &STRPOSB &ELENB +
&LENTRY)
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
/* Retrieve the scheduled time if TIMVAL = *SCD */
IF COND(&TIMVAL = '*SCD') +
THEN(DO)
CHGVAR VAR(&SCDHH) VALUE(%SST(&LENTRY 102 2))
CHGVAR VAR(&SCDMM) VALUE(%SST(&LENTRY 104 2))
CHGVAR VAR(&SCDSS) VALUE(%SST(&LENTRY 106 2))
CHGVAR VAR(&SCDHH#) VALUE(&SCDHH)
CHGVAR VAR(&SCDMM#) VALUE(&SCDMM)
CHGVAR VAR(&SCDSS#) VALUE(&SCDSS)
CHGVAR VAR(&SCDTIME) VALUE(&SCDHH || &SCDMM || +
&SCDSS)
ENDDO
/* Parse current time if TIMVAL = *SYS */
IF COND(&TIMVAL = '*SYS') +
THEN(DO)
RTVSYSVAL SYSVAL(QTIME) RTNVAR(&SYSTIME)
CHGVAR VAR(&SCDHH) VALUE(%SST(&SYSTIME 1 2))
CHGVAR VAR(&SCDMM) VALUE(%SST(&SYSTIME 3 2))
CHGVAR VAR(&SCDSS) VALUE(%SST(&SYSTIME 5 2))
CHGVAR VAR(&SCDHH#) VALUE(&SCDHH)
CHGVAR VAR(&SCDMM#) VALUE(&SCDMM)
CHGVAR VAR(&SCDSS#) VALUE(&SCDSS)
CHGVAR VAR(&SCDTIME) VALUE(&SCDHH || &SCDMM || +
&SCDSS)
ENDDO
/* Parse increment time */
CHGVAR VAR(&INCHH) VALUE(%SST(&INCREMENT 1 2))
CHGVAR VAR(&INCMM) VALUE(%SST(&INCREMENT 3 2))
CHGVAR VAR(&INCSS) VALUE(%SST(&INCREMENT 5 2))
CHGVAR VAR(&INCHH#) VALUE(&INCHH)
CHGVAR VAR(&INCMM#) VALUE(&INCMM)
CHGVAR VAR(&INCSS#) VALUE(&INCSS)
/* Calculate new scheduled time */
CHGVAR VAR(&NEWHH#) VALUE(&SCDHH# + &INCHH#)
CHGVAR VAR(&NEWMM#) VALUE(&SCDMM# + &INCMM#)
CHGVAR VAR(&NEWSS#) VALUE(&SCDSS# + &INCSS#)
IF COND(&NEWSS# >= 60) +
THEN(DO)
CHGVAR VAR(&NEWSS#) VALUE(&NEWSS# - 60)
CHGVAR VAR(&NEWMM#) VALUE(&NEWMM# + 1)
ENDDO
IF COND(&NEWMM# >= 60) +
THEN(DO)
CHGVAR VAR(&NEWMM#) VALUE(&NEWMM# - 60)
CHGVAR VAR(&NEWHH#) VALUE(&NEWHH# + 1)
ENDDO
IF COND(&NEWHH# >= 24) +
THEN(DO)
CHGVAR VAR(&NEWHH#) VALUE(&NEWHH# - 24)
ENDDO
CHGVAR VAR(&SCDHH#) VALUE(&NEWHH#)
CHGVAR VAR(&SCDMM#) VALUE(&NEWMM#)
CHGVAR VAR(&SCDSS#) VALUE(&NEWSS#)
CHGVAR VAR(&SCDHH) VALUE(&SCDHH#)
CHGVAR VAR(&SCDMM) VALUE(&SCDMM#)
CHGVAR VAR(&SCDSS) VALUE(&SCDSS#)
CHGVAR VAR(&NEWTIME) VALUE(&SCDHH || &SCDMM || +
&SCDSS)
/* Check if new time exceeds cutoff time */
IF COND(&CUTOFF *NE ' ' *AND &RESET *NE ' ' +
*AND (&NEWTIME *LT &SCDTIME *OR &NEWTIME +
*GE &CUTOFF)) THEN(CHGVAR VAR(&NEWTIME) +
VALUE(&RESET))
/* Update job schedule entry */
CHGJOBSCDE JOB(&JOBSCDNAM) SCDTIME(&NEWTIME)
GOTO CMDLBL(ENDPGM)
ERROR: RCVMSG MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
MSGFLIB(&MSGL)
MONMSG MSGID(CPF0000)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
MONMSG MSGID(CPF0000)
ENDPGM: DLTUSRSPC USRSPC(QTEMP/CHGSCDTIM)
MONMSG MSGID(CPF0000)
ENDPGM
CHGSCDTIM Command Validity Checker Source:
/* This program is the validity checker for the CHGSCDTIM (Change Schedule */
/* Time) command. It verifies that the job exists and that the increment, */
/* cutoff, and reset times are valid. */
PGM PARM(&JOBSCDNAM &INCREMENT &CUTOFF &RESET &TIMVAL)
DCL VAR(&JOBSCDNAM) TYPE(*CHAR) LEN(10)
DCL VAR(&INCREMENT) TYPE(*CHAR) LEN(6)
DCL VAR(&CUTOFF) TYPE(*CHAR) LEN(6)
DCL VAR(&RESET) TYPE(*CHAR) LEN(6)
DCL VAR(&TIMVAL) TYPE(*CHAR) LEN(4)
DCL VAR(&USRSPC) TYPE(*CHAR) LEN(20) +
VALUE('CHGSCDTIM QTEMP ') /* USER +
SPACE NAME FOR APIS */
DCL VAR(&CNTHDL) TYPE(*CHAR) LEN(16) +
VALUE(' ') /* CONTINUATION +
HANDLE */
DCL VAR(&NUMENTB) TYPE(*CHAR) LEN(4) /* NUMBER +
OF ENTRIES FROM LIST JOB SCHEDULE ENTRIES +
IN BINARY FORM */
DCL VAR(&NUMENT) TYPE(*DEC) LEN(8 0) /* NUMBER +
OF ENTRIES FROM LIST JOB SCHEDULE ENTRIES +
IN DECIMAL FORM */
DCL VAR(&GENHDR) TYPE(*CHAR) LEN(140) /* GENERIC +
HEADER INFORMATION FROM THE USER SPACE */
DCL VAR(&LSTSTS) TYPE(*CHAR) LEN(1) /* STATUS OF +
THE LIST IN THE USER SPACE */
DCL VAR(&OFFSETB) TYPE(*CHAR) LEN(4) /* OFFSET +
TO THE LIST PORTION OF THE USER SPACE IN +
BINARY FORM */
DCL VAR(&STRPOSB) TYPE(*CHAR) LEN(4) /* STARTING +
POSITION IN THE USER SPACE IN BINARY FORM */
DCL VAR(&ELENB) TYPE(*CHAR) LEN(4) /* LIST JOB +
ENTRY LENGTH IN BINARY 4 FORM */
DCL VAR(&LENTRY) TYPE(*CHAR) LEN(1156) /* +
RETRIEVE AREA FOR LIST JOB SCHEDULE ENTRY */
DCL VAR(&HH) TYPE(*CHAR) LEN(2)
DCL VAR(&MM) TYPE(*CHAR) LEN(2)
DCL VAR(&SS) TYPE(*CHAR) LEN(2)
DCL VAR(&MSGID) TYPE(*CHAR) LEN(07)
DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGL) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(ERROR))
/* Delete the user space if it already exists. */
DLTUSRSPC USRSPC(QTEMP/CHGSCDTIM)
MONMSG MSGID(CPF0000)
/* Create the user space. The user space will be 256 bytes and */
/* will be initialized to blanks. */
CALL PGM(QUSCRTUS) PARM(&USRSPC 'CHGSCDTIM ' +
X'00000100' ' ' '*ALL ' 'TEMPORARY +
USER SPACE ')
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
/* List the job schedule entry of the name specified. */
CALL PGM(QWCLSCDE) PARM(&USRSPC 'SCDL0200' +
&JOBSCDNAM &CNTHDL 0)
/* Retrieve the generic header from the user space. */
CALL PGM(QUSRTVUS) PARM(&USRSPC X'00000001' +
X'0000008C' &GENHDR)
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
/* Get the information status for the list from the generic header. */
CHGVAR VAR(&LSTSTS) VALUE(%SST(&GENHDR 104 1))
IF COND(&LSTSTS = 'I') THEN(GOTO CMDLBL(ENDPGM))
/* Get the number of entries returned and convert to decimal. */
/* If zero, send error message and exit. */
CHGVAR VAR(&NUMENTB) VALUE(%SST(&GENHDR 133 4))
CHGVAR VAR(&NUMENT) VALUE(%BIN(&NUMENTB))
IF COND(&NUMENT = 0) +
THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
Job name ' *CAT &JOBSCDNAM *TCAT ' not found +
on Job Schedule.') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
GOTO CMDLBL(ENDPGM)
ENDDO
/* Get the list entry length and offset. These values are used to */
/* set up the starting position. */
CHGVAR VAR(&ELENB) VALUE(%SST(&GENHDR 137 4))
CHGVAR VAR(&OFFSETB) VALUE(%SST(&GENHDR 125 4))
CHGVAR VAR(%BIN(&STRPOSB)) VALUE(%BIN(&OFFSETB) + 1)
/* Retrieve the list entry. */
CALL PGM(QUSRTVUS) PARM(&USRSPC &STRPOSB &ELENB +
&LENTRY)
MONMSG MSGID(CPF3C00) EXEC(GOTO CMDLBL(ERROR))
IF COND(%SST(&LENTRY 2 10) *NE &JOBSCDNAM) +
THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
Job name ' *CAT &JOBSCDNAM *TCAT ' not found +
on Job Schedule.') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
GOTO CMDLBL(ENDPGM)
ENDDO
/* Check increment time */
CHGVAR VAR(&HH) VALUE(%SST(&INCREMENT 1 2))
CHGVAR VAR(&MM) VALUE(%SST(&INCREMENT 3 2))
CHGVAR VAR(&SS) VALUE(%SST(&INCREMENT 5 2))
IF COND(&HH *LT '00' *OR &HH *GT '23' *OR +
&MM *LT '00' *OR &MM *GT '59' *OR +
&SS *LT '00' *OR &SS *GT '59') +
THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
Increment time is not valid.') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
ENDDO
/* Check cutoff time */
IF COND(&CUTOFF *NE ' ') +
THEN(DO)
CHGVAR VAR(&HH) VALUE(%SST(&CUTOFF 1 2))
CHGVAR VAR(&MM) VALUE(%SST(&CUTOFF 3 2))
CHGVAR VAR(&SS) VALUE(%SST(&CUTOFF 5 2))
IF COND(&HH *LT '00' *OR &HH *GT '24' *OR +
&MM *LT '00' *OR &MM *GT '59' *OR +
&SS *LT '00' *OR &SS *GT '59') +
THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
Cutoff time is not valid.') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
ENDDO
/* Check reset time */
CHGVAR VAR(&HH) VALUE(%SST(&RESET 1 2))
CHGVAR VAR(&MM) VALUE(%SST(&RESET 3 2))
CHGVAR VAR(&SS) VALUE(%SST(&RESET 5 2))
IF COND(&HH *LT '00' *OR &HH *GT '23' *OR +
&MM *LT '00' *OR &MM *GT '59' *OR +
&SS *LT '00' *OR &SS *GT '59') +
THEN(DO)
SNDPGMMSG MSGID(CPD0006) MSGF(QCPFMSG) MSGDTA('0000 +
Reset time is not valid.') MSGTYPE(*DIAG)
SNDPGMMSG MSGID(CPF0002) MSGF(QCPFMSG) MSGTYPE(*ESCAPE)
ENDDO
ENDDO
GOTO CMDLBL(ENDPGM)
ERROR:
RCVMSG MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
MSGFLIB(&MSGL)
MONMSG MSGID(CPF0000)
SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) +
MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
MONMSG MSGID(CPF0000)
ENDPGM: DLTUSRSPC USRSPC(QTEMP/CHGSCDTIM)
MONMSG MSGID(CPF0000)
ENDPGM
CHGSCDTIM Help Panel Group Source:
:PNLGRP.
:HELP name=CHGSCDTIMP.
:P.
The "Change Job Schedule Time" (CHGSCDTIM) command increments the
schedule time for a job on the AS/400 job scheduler. This enables
you to submit a job from the scheduler on a periodic basis of less
than a day (e.g., every hour or every 15 minutes). Simply run the
CHGSCDTIM command from your program that is called by the scheduler
and specify the job name and the increment time in HHMMSS format.
The schedule time for the job will be incremented by the amount of
time you specified. You can increment the currently scheduled time
or the current system time. You can also optionally specify a cutoff
and reset time. This would enable you to run a job periodically
within certain times each day (e.g., every hour from 8:00 a.m. to
8:00 p.m.).
:EHELP.
:HELP name='CHGSCDTIMP/JOBNAM'.
:P.
Scheduled Job Name:
:LINES.
This is the name of the job as you defined it on
the job scheduler.
:ELINES.
:EHELP.
:HELP name='CHGSCDTIMP/INCREMENT'.
:P.
Increment time:
:LINES.
This is the amount of time you would like to increment
the scheduled job. The format is HHMMSS.
:ELINES.
:EHELP.
:HELP name='CHGSCDTIMP/CUTOFF'.
:P.
Cutoff time:
:LINES.
This is the time of day you would like to stop
incrementing the job. The format is HHMMSS. If a
cutoff time is specified, a reset time is required.
:ELINES.
:EHELP.
:HELP name='CHGSCDTIMP/RESET'.
:P.
Reset time:
:LINES.
This is the time of day you would like to restart the
job. The format is HHMMSS. A reset time is required
if a cutoff time is specified.
:ELINES.
:EHELP.
:HELP name='CHGSCDTIMP/TIMVAL'.
:P.
Time value:
:LINES.
This is the time value that you would like to
increment. *SCD will increment the time on the
scheduler. *SYS will set the schedule time to
the current time plus the increment.
:ELINES.
:EHELP.
:EPNLGRP.
The following CL program can be used to create the CHGSCDTIM command.
The program assumes that the source is in QGPL/CSTCMDSRC:
PGM
DCL VAR(&LIBRARY) TYPE(*CHAR) LEN(10) VALUE('QGPL')
DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) VALUE('CSTCMDSRC')
/* Create Command Processing Program */
CRTCLPGM PGM(&LIBRARY/CHGSCDTIMC) SRCFILE(&LIBRARY/&SRCFILE)
/* Create Validity Checker Program */
CRTCLPGM PGM(&LIBRARY/CHGSCDTIMV) SRCFILE(&LIBRARY/&SRCFILE)
/* Create Help Panel Group */
CRTPNLGRP PNLGRP(&LIBRARY/CHGSCDTIMP) +
SRCFILE(&LIBRARY/&SRCFILE)
/* Create Change Job Schedule Time Command */
CRTCMD CMD(&LIBRARY/CHGSCDTIM) PGM(&LIBRARY/CHGSCDTIMC) +
SRCFILE(&LIBRARY/&SRCFILE) +
VLDCKR(&LIBRARY/CHGSCDTIMV) +
HLPPNLGRP(&LIBRARY/CHGSCDTIMP) HLPID(CHGSCDTIMP)
ENDPGM
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期三, 11月 01, 2023
2001-12-15 工具: CHGSCDTIM 更改工作排程時間
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言