ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

Wrkjobscde

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wrkjobscde

    I need to automate my month end process and one of the areas is to put the jobs on hold in the work job scheduler(WRKJOBSCDE). Does oneone have a suggestion on how I do that. Put the jobs on hold in the work job scheduler during the month end and then releasing the jobs?

    Thanks,

    DAC

  • #2
    Re: Wrkjobscde

    create a file containing the job names on the scheduler, read that file and use the HLDJOBSCDE command and RLSJOBSCDE
    I'm not anti-social, I just don't like people -Tommy Holden

    Comment


    • #3
      Re: Wrkjobscde

      If you know the jobs, use the HLDJOBSCDE command prior to the Month End job... then do a RLSJOBSCDE command to release them again.

      The HLD command does give you the option to Hold *ALL or generic* as well as specific.

      Comment


      • #4
        Re: Wrkjobscde

        We do something similar during restores to our Test environment...by reading the output spool file: WRKJOBSCDE OUTPUT(*PRINT)

        So far, this has worked very well for the last few releases because the spooled output has remained consistent.

        Terry

        Comment


        • #5
          Re: Wrkjobscde

          tidier solution would be to use the WRKJOBSCDE API to list them - http://publib.boulder.ibm.com/infoce...s/qwclscde.htm

          neater solution that printing and then reading a splf
          predictably positive, permanently punctilious, purposely proactive, potentially priceless, primarily professional : projex

          Comment


          • #6
            Re: Wrkjobscde

            Neater you say!

            code from my second favorite site http://www.think400.dk/

            Code:
            Retrieve Job Schedule Entries
            
                  ********************************************************************
                  * PROGRAM     :  JOBSCDER
                  * DESCRIPTION :  Retrieve Job Schedule Entries, sort by Time
                  * AUTHOR      :  Joe Marx
                  *
                  * NOTES       :  Written for Sox Remedation               
                  *
                  * APIs Used:   QWCLSCDE - Retrieve Job Schedule Entries
                  *              QLGSORT  - Sort List
                  *              QUSCRTUS - Create User Space
                  *              QUSDLTUS - Delete User Space
                  *              QUSPTRUS - Retrieve From User Space w/ Pointer
                  *              QWCRNETA - Retrieve Network Attributes
                  *              QMHSNDPM - Send Message
                  *
                  *               
                  * MAINTENANCE  PROGRAMMER, PROJECT #, AND DESCRIPTION.
                  * -----------  ---------------------------------------
                  * 10/26/2004   Joe Marx - Created
                  ********************************************************************
                 FQSYSPRT   O    F  132        PRINTER OFLIND(*INOF)
                  * DATE FORMATS --------------------------------------------
                 D FORMATMDY       S               D   DATFMT(*MDY)
                 D FORMATUSA       S               D   DATFMT(*USA)
                 D FORMATYMD       S               D   DATFMT(*YMD)
                 D FORMATISO       S               D   DATFMT(*ISO)
             
                 D PGM_INFO       SDS
                 D  PGM_NAME         *PROC
                 D  PGM_STATUS       *STATUS
                 D  PGM_USER             254    263
             
                  * DELETE  USER SPACE
                 D DELETESPACE     PR                  EXTPGM('QUSDLTUS')
                 D                               20
                 D                              116
             
                  * CREATE USER SPACE
                 D USERSPACE       PR                  EXTPGM('QUSCRTUS')
                 D                               20
                 D                               10
                 D                               10I 0
                 D                                1
                 D                               10
                 D                               50
                 D                               10
                 D                              116
                 D                               10
             
                  *  GET A RESOLVED POINTER TO THE USER SPACE
                 D GETPOINTER      PR                  EXTPGM('QUSPTRUS')
                 D                               20    CONST
                 D                                 *
                 D                              116
             
                  ***  API for List of Job Schedule Entries
                 D JobSch          PR                  EXTPGM('QWCLSCDE')
                 D                               20    CONST
                 D                                8    CONST
                 D                               10    CONST
                 D                               16    CONST
                 D                              116
            
                  ***  QCMD
                 DCOMMAND          PR                  EXTPGM('QCMDEXC')
                 D CMDSTRING                   3000    CONST OPTIONS(*VARSIZE)
                 D CMDLENGTH                     15P 5 CONST
                 D CMDOPT                         3    CONST OPTIONS(*NOPASS)
             
                 D SendMsg         PR                  extpgm('QMHSNDPM')
                 D   MsgID                        7    const
                 D   MsgFile                     20    const
                 D   MsgDta                      80    const
                 D   MsgDtaLen                   10i 0 const
                 D   MsgType                     10    const
                 D   MsgQ                        10    const
                 D   MsgQNbr                     10i 0 const
                 D   MsgKey                       4
                 D   ErrorDS                     16
             
                  ***  API Error Handling
                 D                 DS
                 D APIERROR                     116
                 D  BYTPRV                        9B 0 OVERLAY(APIERROR) INZ(16)
                 D  BYTAVA                        9B 0 OVERLAY(APIERROR:5)
                 D  MSGID                         7    OVERLAY(APIERROR:9)
                 D  ERR###                        1    OVERLAY(APIERROR:16)
                 D  MSGDTAE                     100    OVERLAY(APIERROR:17)
            
                  * GENERIC LIST HEADER
                 D SPCPTR          S               *
                 D QUSH0100        DS                  BASED(SPCPTR)
                 D  QUSUA                        64                         USER AREA
                 D  QUSSGH                       10I 0                      HEADER SIZE
                 D  QUSSRL                        4                         RELEASE LEVEL
                 D  QUSFN                         8                         FORMAT NAME
                 D  QUSAU                        10                         API USED
                 D  QUSDTC                       13                         DATE/TIME CREATED
                 D  QUSIS                         1                         INFO STATUS
                 D  QUSSUS                       10I 0                      SIZE USER SPACE
                 D  QUSOIP                       10I 0                      OFSET INPUT PARM
                 D  QUSSIP                       10I 0                      INPUT PARM SIZE
                 D  QUSOHS                       10I 0                      OFFSET HDR SECTION
                 D  QUSSHS                       10I 0                      HEADER SECTION SIZE
                 D  QUSOLD                       10I 0                      OFFSET LIST DATA
                 D  QUSSLD                       10I 0                      SIZE LIST DATA
                 D  QUSNBRLE                     10I 0                      NUMBER LIST ENTRIES
                 D  QUSSEE                       10I 0                      SIZE EACH ENTRY
                 D  QUSSIDLE                     10I 0                      CCSID LIST ENT
                 D  QUSCID                        2                         COUNTRY ID
                 D  QUSLID                        3                         LANGUAGE ID
                 D  QUSSLI                        1                         SUBSET LIST INDICO
                 D  QUSERVED00                   42                         RESERVED
            
                 D JS_PTR          S               *
                 D JS              S              1    BASED(JS_PTR) DIM(32767)
                 D JS_Detail       DS          1156    Based(JS_PTR)
                 D  JS_Char1                      1    Overlay(JS_Detail:1)
                 D  JS_Job                       10    Overlay(JS_Detail:*Next)
                 D  JS_Entry                     10    Overlay(JS_Detail:*Next)
                 D  JS_SchDate                   10    Overlay(JS_Detail:*Next)
                 D  JS_SchDays                   70    Overlay(JS_Detail:*Next)
                 D  JS_SchTime                    6    Overlay(JS_Detail:*Next)
                 D  JS_Freq                      10    Overlay(JS_Detail:*Next)
                 D  JS_DayofMon                  50    Overlay(JS_Detail:*Next)
                 D  JS_Recovery                  10    Overlay(JS_Detail:*Next)
                 D  JS_NextDate                  10    Overlay(JS_Detail:*Next)
                 D  JS_Status                    10    Overlay(JS_Detail:*Next)
                 D  JS_JobqNam                   10    Overlay(JS_Detail:*Next)
                 D  JS_JobqLib                   10    Overlay(JS_Detail:*Next)
                 D  JS_UsrPrf                    10    Overlay(JS_Detail:*Next)
                 D  JS_LastDate                  10    Overlay(JS_Detail:*Next)
                 D  JS_LastTime                   6    Overlay(JS_Detail:*Next)
                 D  JS_Text                      50    Overlay(JS_Detail:*Next)
                 D  JS_Fill1                     23    Overlay(JS_Detail:*Next)
                 D  JS_JobqStatus                10    Overlay(JS_Detail:*Next)
                 D  JS_DatesOmit                200    Overlay(JS_Detail:*Next)
                 D  JS_JobdNam                   10    Overlay(JS_Detail:*Next)
                 D  JS_JobdLib                   10    Overlay(JS_Detail:*Next)
                 D  JS_UsrPrf2                   10    Overlay(JS_Detail:*Next)
                 D  JS_MsgQNam                   10    Overlay(JS_Detail:*Next)
                 D  JS_MsgQlib                   10    Overlay(JS_Detail:*Next)
                 D  JS_SaveEnt                   10    Overlay(JS_Detail:*Next)
                 D  JS_LastSubN                  10    Overlay(JS_Detail:*Next)
                 D  JS_LastSubU                  10    Overlay(JS_Detail:*Next)
                 D  JS_LastSubJ                   6    Overlay(JS_Detail:*Next)
                 D  JS_LastAttD                  10    Overlay(JS_Detail:*Next)
                 D  JS_LastAttT                   6    Overlay(JS_Detail:*Next)
                 D  JS_LastAttS                  10    Overlay(JS_Detail:*Next)
                 D  JS_Fill2                      2    Overlay(JS_Detail:*Next)
                 D  JS_Len                        4  0 Overlay(JS_Detail:*Next)
                 D  JS_Command                  512    Overlay(JS_Detail:*Next)
             
                  * Sort Block
                 DSORTBLOCK        DS
                 D  BLOCKLEN               1      4B 0 INZ(0)
                 D  REQTYPE                5      8B 0 INZ(8)
                 D  RSVP1                  9     12B 0 INZ(0)
                 D  OPTIONS               13     16B 0 INZ(0)
                 D  RECLEN                17     20B 0 INZ(0)
                 D  RECCOUNT              21     24B 0 INZ(0)
                 D  OFF2KEY               25     28B 0 INZ(80)
                 D  NBROFKEYS             29     32B 0 INZ(0)
                 D  OFF2NLSI              33     36B 0 INZ(0)
                 D  OFF2IFL               37     40B 0 INZ(0)
                 D  NBRINF                41     44B 0 INZ(0)
                 D  OFF2OFL               45     48B 0 INZ(0)
                 D  NBROUTF               49     52B 0 INZ(0)
                 D  KEYENTLEN             53     56B 0 INZ(16)
                 D  NLSSLEN               57     60B 0 INZ(290)
                 D  IFELEN                61     64B 0 INZ(0)
                 D  OFELEN                65     68B 0 INZ(0)
                 D  OFF2NBM               69     72B 0 INZ(0)
                 D  OFF2VLRA              73     76B 0 INZ(0)
                 D  RSVP2                 77     80B 0 INZ(0)
                 D  KEYINF                       16A   DIM(MaxKey)
             
                  * Sort Block IO
                 DSORTIOBLOC       DS
                 D  IOTYPE                 1      4B 0 INZ(0)
                 D  RSVP3                  5      8B 0 INZ(0)
                 D  IORECLEN               9     12B 0 INZ(0)
                 D  IORECCNT              13     16B 0 INZ(0)
             
                  * Sort INFO Data Structure
                 DKEYINFDS         DS
                 D  KEYSTART               1      4B 0
                 D  KEYSIZE                5      8B 0
                 D  KEYDTATYP              9     12B 0
                 D  KEYASCDESC            13     16B 0
             
                  *----------------------------------------------------------------
                  * QWCRNETA  Retrieve network attribute - get system name
                  * See SYSTEM PROGRAMMER'S INTERFACE REFERENCE for API detail.
                  *----------------------------------------------------------------
                 D vsd             s              5u 0                      START OF DATA
                 D vso             s              5u 0                      START OFFSET
            
                  * Load number of attributes to retrieve and attribute name
                 D vapiky          ds
                 D  vnkfld                       10i 0 inz(1)
                 D  vkarry                       11    inz('SYSNAME')
             
                  *     Number of keys returned and offset to attribute data
                 D vrcvr1          ds           200    inz
                 D  vnkyrt                       10i 0
                 D  voffna                       10i 0
                 D  vrcvln         s             10i 0 inz(200)
             
                  *     Network Attribute Information Table returned
                 D vnait           ds                  inz
                 D  vrtatt                 1     10
                 D  vrttyp                11     11
                 D  vrtsta                12     12
                 D  vrtlen                       10i 0
             
                  * User Defined Variables
                 D JS_Format       S             20    INZ('SCDL0200')
                 D JS_Name         S              8    INZ('*ALL')
                 D JS_Handle       S             10    INZ(' ')
                 D SPC_LIB         S             10    INZ('QTEMP     ')
                 D EXT_ATTR        S             10    INZ
                 D SPACE_SIZE      S             10I 0 INZ(500000)
                 D SPACE_INIT      S              1    INZ(X'00')
                 D SPACE_AUT       S             10    INZ('*ALL')
                 D SPACE_TEXT      S             50    INZ('MEDI001R TEXT')
                 D SPACE_RPL       S             10    INZ('*YES')
                 D SPACEDOMAN      S             10    INZ('*USER')
                 D SPACENAME       S             20    INZ('MEDI001R  QTEMP     ')
                 D TIMES           S              7  0
                 D COUNT           S              7  0
                 D LLEN            S              7  0
                 D Ljob            S             10
                 D COUNT2          S              7  0
                 D #Status         S              3A
                 D #Date           S             10A
                 D #Command        S             31A
                 D #Time           S              6  0
                 D #Frequency      S             10A
                 D MAXKEY          C                    4
                 D EXITER          S              1A
                 D NOTUSED         S             16A
                 D RETURNSIZE      S              9B 0
                 D SIZELIST        S              9B 0
                 D SYSNAME         S              8
                 D #str            S              4  0
                 D #end            S              4  0
                 D #Len            S              4  0
                 D CMDSTRING       S           3000    VARYING
                 D CMDLENGTH       S             15  5
                 D MsgDta          s             80
                 D MsgKey          s              4
             
                  **  Initial Startup
                 C                   EXSR      INIT
            
                  **  Main Processing
                 C                   EXSR      Main
            
                  **  Special Processing
                 C                   EXSR      Special
            
                  * Send Message that Job has completed.
                 C***                CALLP     COMMAND( CMDSTRING : %LEN(CMDSTRING))
            
                 C                   eval      MsgDta = 'AS/400 Batch Job Schedule -
                 C                             has printed'
                 C                   callp     SendMsg ('CPF9898':
                 C                               'QCPFMSG   QSYS':
                 C                               MsgDta:
                 C                               %len(MsgDta):
                 C                               '*ESCAPE':
                 C                               '*':
                 C                               2:
                 C                               MsgKey:
                 C                               ApiError)
            
                  ** End Program
                 C                   EVAL      *INLR = *ON
            
                  *==============================================================
                  * Subroutine - Main
                  *  This subroutine processing....
                  *==============================================================
                 C     Main          begsr
             
                  **  Print Header at least 1 time....
                 C                   EXCEPT    HEAD1
             
                  **  RETRIEVE DATABASE FILE DESCRIPTION USING USER SPACE
                  ** CREATE USER SPACE
                 C                   CALLP     USERSPACE(SPACENAME  :
                 C                                       EXT_ATTR   : SPACE_SIZE :
                 C                                       SPACE_INIT : SPACE_AUT  :
                 C                                       SPACE_TEXT : SPACE_RPL  :
                 C                                       APIERROR   : SPACEDOMAN  )
             
                  **  RETRIEVE WRKJOBSCDE API - QWCLSCDE
                 C                   CALLP     JOBSCH(SPACENAME  :
                 C                                    JS_Format  : JS_Name :
                 C                                    JS_Handle  : APIERROR  )
             
                  *  GET A RESOLVED POINTER TO THE USER SPACE
                  *  RECEIVES HEADER INFO FROM USER SPACE
                 C                   CALLP     GETPOINTER(SPACENAME : SPCPTR :
                 C                                        APIERROR)
                 C
             
                  * SET JS_PTR TO THE FIRST BYTE OF THE USER SPACE
                 C                   EVAL      JS_PTR = SPCPTR
            
                  * Initial Sort API
                 c                   EXSR      $InzSort
             
                  * Initial Sort List
                 c                   EXSR      $SortList
             
                  * DELETE ALL USER SPACES BEFORE EXITING PROGRAM
                 C                   CALLP     DELETESPACE(SPACENAME : APIERROR )
             
                  * Print Totals
                 C                   EXSR      @@HEAD
                 C                   EXCEPT    TOT1
                 C                   EndSr
            
                  *==============================================================
                  * Subroutine - Special
                  *  This subroutine processing....
                  *==============================================================
                 C     Special       begsr
            
                  **  Print Header at least 1 time....
                 C                   EXCEPT    HEAD2
             
                  **  RETRIEVE DATABASE FILE DESCRIPTION USING USER SPACE
                  ** CREATE USER SPACE
                 C                   CALLP     USERSPACE(SPACENAME  :
                 C                                       EXT_ATTR   : SPACE_SIZE :
                 C                                       SPACE_INIT : SPACE_AUT  :
                 C                                       SPACE_TEXT : SPACE_RPL  :
                 C                                       APIERROR   : SPACEDOMAN  )
             
                  **  RETRIEVE WRKJOBSCDE API - QWCLSCDE
                 C                   CALLP     JOBSCH(SPACENAME  :
                 C                                    JS_Format  : JS_Name :
                 C                                    JS_Handle  : APIERROR  )
             
                  *  GET A RESOLVED POINTER TO THE USER SPACE
                  *  RECEIVES HEADER INFO FROM USER SPACE
                 C                   CALLP     GETPOINTER(SPACENAME : SPCPTR :
                 C                                        APIERROR)         
                 C
            
                  * SET JS_PTR TO THE FIRST BYTE OF THE USER SPACE
                 C                   EVAL      JS_PTR = SPCPTR
            
                  * Initial Sort API
                 c                   EXSR      $InzSort
            
                  * Initial Sort List
                 c                   EXSR      $SortList2
            
                  * DELETE ALL USER SPACES BEFORE EXITING PROGRAM
                 C                   CALLP     DELETESPACE(SPACENAME : APIERROR )
            
                  * Print Totals
                 C                   EXSR      @@HEAD2
                 C                   EXCEPT    TOT2
            
                 C                   EndSr
            
                  *==============================================================
                  * Subroutine - Init
                  *  This subroutine Initializes the Program
                  *==============================================================
                 C     Init          begsr
            
                 C                   call      'QWCRNETA'                    RETRIEVE SPACE
                 C                   parm                    vrcvr1
                 C                   parm      200           vrcvln
                 C                   parm                    vnkfld          NUMBER OF KEYS
                 C                   parm                    vkarry          KEY ARRAY
                 C                   parm                    ApiError
            
                 C     voffna        add       1             vso             START OFFSET
                 C     voffna        add       1             vso             START OFFSET
                 C                   eval      vnait = %subst(vrcvr1:vso:16) LOAD NAIT DST
                 C     vso           add       16            vsd             START OF DATA
                 C     vrtlen        subst     vrcvr1:vsd    SYSNAME         EXTRACT SYSNAM
             
                 c                   Endsr
            
                  *==============================================================
                  * Subroutine - @@HEAD
                  *  Check for Overflow - Reprints Heading
                  *==============================================================
                 C     @@HEAD        begsr
            
                 c                   if        *inOF = *on
                 C                   EXCEPT    HEAD1
                 c                   Eval      *inOF = *off
                 c                   EndIf
            
                 C                   Endsr
            
                  *==============================================================
                  * Subroutine - @@HEAD2
                  *  Check for Overflow - Reprints Heading for Special
                  *==============================================================
                 C     @@HEAD2       begsr
            
                 c                   if        *inOF = *on
                 C                   EXCEPT    HEAD1
                 c                   Eval      *inOF = *off
                 c                   EndIf
            
                 C                   Endsr
            
                  *==============================================================
                  * Subroutine - InzSort
                  *  This subroutine Initializes the Sort API
                  *==============================================================
                 c     $InzSort      begsr
            
                  * Initialize the key fields to sort on.
                  * Load JS_Freq field as key field, 06 byte, Char, ascending sequence.
                 c                   eval      KeyStart   = 107
                 c                   eval      KeySize    = 10
                 c                   eval      KeyDtaTyp  = 2
                 c                   eval      KeyAscDesc = 1
                 c                   eval      KeyInf(1)  = KeyInfDs
            
                  * Load JS_schTime field as key field, 06 byte, Char, ascending sequence.
                 c                   eval      KeyStart   = 101
                 c                   eval      KeySize    = 06
                 c                   eval      KeyDtaTyp  = 2
                 c                   eval      KeyAscDesc = 1
                 c                   eval      KeyInf(2)  = KeyInfDs
            
                  * Load JS_Job     field as key field, 10 byte, char , ascending sequence.
                 c                   eval      KeyStart   = 1
                 c                   eval      KeySize    = 10
                 c                   eval      KeyDtaTyp  = 6
                 c                   eval      KeyAscDesc = 1
                 c                   eval      KeyInf(3)  = KeyInfDs
            
                  * Load other sort parameters.
                 c                   eval      BlockLen  = 80 + 16 * MaxKey
                 c                   eval      NbrOfKeys = 3                    Variable
                 c                   eval      RecLen    = %size(JS_Detail)
            
                  * Initialize Sort I/O API fields.
                 c                   eval      IORecLen = RecLen
                 c                   eval      IORecCnt = 1
            
                  * All done initializing.
                 c                   ENDSR
            
                  *==============================================================
                  * Subroutine - SortList
                  *  This subroutine sorts the List
                  *==============================================================
                 c     $SortList     begsr
            
                  * First step - Initialize the sort routine.
                 c                   call      'QLGSORT'
                 c                   parm                    SortBlock
                 c                   parm                    NotUsed
                 c                   parm                    NotUsed
                 c                   parm                    SizeList
                 c                   parm                    ReturnSize
                 c                   parm                    ApiError
            
                  * Next step - write records to I/O routine.
                 c                   eval      IOType = 1
            
                  * INCREMENT JS_PTR TO THE FIRST LIST ENTRY
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSOLD + 1))
                 C                   FOR       TIMES=1 BY 1 TO QUSNBRLE
            
                 c                   call      'QLGSRTIO'
                 c                   parm                    SortIOBloc
                 c                   parm                    JS_Detail
                 c                   parm                    NotUsed
                 c                   parm                    SizeList
                 c                   parm                    NotUsed
                 c                   parm                    ApiError
            
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSSEE + 1))
                 C                   Endfor
                                                                                
                  * Next step - Signal end of input, clear JS_DETAIL for reload.
                 c                   eval      IOType = 2                       
                 c                   call      'QLGSRTIO'                       
                 c                   parm                    SortIOBloc         
                 c                   parm                    JS_Detail          
                 c                   parm                    NotUsed            
                 c                   parm                    SizeList           
                 c                   parm                    NotUsed            
                 c                   parm                    ApiError           
                                                                                
                                                                                
                  * Final step - write the records back to the subfile.         
                 c                   eval      IOType = 3                       
                                                                                
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSOLD + 1))   
                 C                   FOR       TIMES=1 BY 1 TO QUSNBRLE         
                                                                                
                 c                   call      'QLGSRTIO'                       
                 c                   parm                    SortIOBloc         
                 c                   parm                    NotUsed            
                 c                   parm                    JS_Detail          
                 c                   parm                    IORecLen           
                 c                   parm                    NotUsed            
                 c                   parm                    ApiError
            
                  * Set up Date of Run....
                 C                   Eval      #DATE = JS_SCHDATE
                 C                   Select
                 C                   WHEN      JS_SCHDATE = '*NONE'
                 C                             and JS_SchDays <> '*ALL'
                 C                   Eval      #DATE = 'USER DEF'
                 C                   WHEN      JS_SCHDATE = '*NONE'
                 C                             and JS_SchDays = '*ALL'
                 C                   Eval      #DATE = '*All'
                 C                   EndSL
            
                  * Set up #Status...
                 C                   Eval      #Status = %subst(JS_Status:1:3)
            
                  * Set up #Time.....
                 C                   Move      JS_SCHTIME    #Time
            
                  * Set up #command.....
                 C                   Eval      #COMMAND = %subst(JS_COMMAND:1:31)
                 C                   If        %subst(JS_COMMAND:1:9) = 'CALL PGM('
                 C                   Eval      #str = %scan('/':  JS_Command )
                 C                   Eval      #end = %scan(')':  JS_Command )
            
                  * check if library with program(meaning / comes after program)
                 C                   If        #str > #end
                 C                             or #str = 0
                 C                   Eval      #COMMAND = %subst(JS_COMMAND: 10
                 C                                         :(#End-1) - 9)
                 C                   Else
                 C                   Eval      #COMMAND = %subst(JS_COMMAND: #str+1
                 C                                         :(#End-1)-#Str) 
                 C                   Endif
                 C                   Endif
             
                 C                   Eval      #LEN  = %len(%trim(JS_COMMAND))
                 C                   If        #LEN  > LLEN
                 C                   Eval      LLEN = #LEN
                 C                   Eval      LJOB = JS_Job
                 C                   Endif
            
                 C                   EVAL      COUNT = COUNT + 1
                 C                   EXSR      @@HEAD
                 C                   EXCEPT    DET1
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSSEE + 1))
                 C                   ENDFOR
            
                 c                   endsr
            
                  *==============================================================
                  * Subroutine - SortList2
                  *  This subroutine sorts the List
                  *==============================================================
                 c     $SortList2    begsr
            
                  * First step - Initialize the sort routine.
                 c                   call      'QLGSORT'
                 c                   parm                    SortBlock
                 c                   parm                    NotUsed
                 c                   parm                    NotUsed
                 c                   parm                    SizeList
                 c                   parm                    ReturnSize
                 c                   parm                    ApiError
            
                  * Next step - write records to I/O routine.
                 c                   eval      IOType = 1
            
                  * INCREMENT JS_PTR TO THE FIRST LIST ENTRY
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSOLD + 1))
                 C                   FOR       TIMES=1 BY 1 TO QUSNBRLE
            
                 c                   call      'QLGSRTIO'
                 c                   parm                    SortIOBloc
                 c                   parm                    JS_Detail
                 c                   parm                    NotUsed
                 c                   parm                    SizeList
                 c                   parm                    NotUsed
                 c                   parm                    ApiError
            
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSSEE + 1))
                 C                   Endfor
            
                  * Next step - Signal end of input, clear JS_DETAIL for reload.
                 c                   eval      IOType = 2
                 c                   call      'QLGSRTIO'
                 c                   parm                    SortIOBloc
                 c                   parm                    JS_Detail
                 c                   parm                    NotUsed
                 c                   parm                    SizeList
                 c                   parm                    NotUsed
                 c                   parm                    ApiError
            
                  * Final step - write the records back to the subfile.
                 c                   eval      IOType = 3                        
                                                                        
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSOLD + 1))    
                 C                   FOR       TIMES=1 BY 1 TO QUSNBRLE          
                                                                                
                 c                   call      'QLGSRTIO'                        
                 c                   parm                    SortIOBloc          
                 c                   parm                    NotUsed             
                 c                   parm                    JS_Detail           
                 c                   parm                    IORecLen            
                 c                   parm                    NotUsed             
                 c                   parm                    ApiError            
                                                                                 
                  * Set up Date of Run....                                       
                 C                   Eval      #DATE = JS_SCHDATE                
                 C                   Select                                      
                 C                   WHEN      JS_SCHDATE = '*NONE'              
                 C                             and JS_SchDays <> '*ALL'          
                 C                   Eval      #DATE = 'USER DEF'                
                 C                   WHEN      JS_SCHDATE = '*NONE'              
                 C                             and JS_SchDays = '*ALL'           
                 C                   Eval      #DATE = '*All'                    
                 C                   EndSL                                       
                                                                                 
                  * Set up #Status...
                 C                   Eval      #Status = %subst(JS_Status:1:3)
            
                  * Set up #Time.....
                 C                   Move      JS_SCHTIME    #Time
            
                  * Set up #command.....
                 C                   Eval      #COMMAND = %subst(JS_COMMAND:1:31)
                 C                   If        %subst(JS_COMMAND:1:9) = 'CALL PGM('
                 C                   Eval      #str = %scan('/':  JS_Command )
                 C                   Eval      #end = %scan(')':  JS_Command )
                 C                   Eval      #COMMAND = %subst(JS_COMMAND:#str+1
                 C                                         :(#End-1)-#Str) 
                 C                   Endif
            
                  * Set up #Frequency....
                 C                   Eval      #Frequency =  '*SUNDAY'
            
                 c                   If        %scan('*SUN' : JS_SchDays) > 0
                 C                   EVAL      COUNT2 = COUNT2 + 1
                 C                   EXSR      @@HEAD2
                 C                   EXCEPT    DET2
                 c                   Endif
            
                 C                   EVAL      JS_PTR = %ADDR(JS(QUSSEE + 1))
                 C                   ENDFOR
                 c                   endsr
            
                 OQSYSPRT   E            HEAD1         01
                 O                                         + 50 'Job Schedule List'
                 O          E            HEAD1          1
                 O                                         +  1 'Date of Report....:'
                 O                       *Date         y   +  1
                 O                                          120 'PAGE......:'
                 O                       PAGE          Z    132
                 O          E            HEAD1          1
                 O                                         +  1 'Program Name......:'
                 O                       PGM_NAME          +  1
                 O                                          120 'UserId....:'
                 O                       PGM_USER           132
                 O          E            HEAD1          2
                 O                                         +  1 'System Name.......:'
                 O                       SYSNAME           +  1
                 O          E            HEAD1          1
                 O                                           +0 'Opt Job'
                 O                                           +4 'Status'
                 O                                           +2 'Date'
                 O                                           +7 'Time'
                 O                                           +5 'Frequency'
                 O                                           +2 'Description'
                 O                                          +40 'Program/Command'
                 O          E            HEAD1          1
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '------------'
                 O          E            DET1           1
                 O                       JS_Job              +0
                 O                       #Status             +1
                 O                       #Date               +5
                 O                       #Time               +1 '  :  :  '
                 O                       JS_Freq             +1
                 O                       JS_Text             +1
                 O                       #Command            +1
                 O          E            TOT1        3
                 O                                           +0 'COUNT:'
                 O                       COUNT         4     +2
                 O***       E            TOT1        1
                 O***                                        +0 'Longest Length of Command:'
                 O***                    LLEN          4     +2
                 O***                    LJOB                +2
            
                 OQSYSPRT   E            HEAD2            01
                 O                                         + 46 'Special Job Schedule List'
                 O          E            HEAD2          1
                 O                                         +  1 'Date of Report....:'
                 O                       *Date         y   +  1
                 O                                          120 'PAGE......:'
                 O                       PAGE          Z    132
                 O          E            HEAD2          1
                 O                                         +  1 'Program Name......:'
                 O                       PGM_NAME          +  1
                 O                                          120 'UserId....:'
                 O                       PGM_USER           132
                 O          E            HEAD2          2
                 O                                         +  1 'System Name.......:'
                 O                       SYSNAME           +  1
                 O          E            HEAD2          1
                 O                                           +0 'Opt Job'
                 O                                           +4 'Status'
                 O                                           +2 'Date'
                 O                                           +7 'Time'
                 O                                           +5 'Frequency'
                 O                                           +2 'Description'
                 O                                          +40 'Program/Command'
                 O          E            HEAD2          1
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '--------------------'
                 O                                           +0 '------------'
                 O          E            DET2           1
                 O                       JS_Job              +0
                 O                       #Status             +1
                 O                       #Date               +5                     
                 O                       #Time               +1 '  :  :  '          
                 O                       #Frequency          +1                     
                 O                       JS_Text             +1                     
                 O                       #Command            +1                     
                 O          E            TOT2        3                              
                 O                                           +0 'COUNT:'            
                 O                       COUNT2        4     +2
            All my answers were extracted from the "Big Dummy's Guide to the As400"
            and I take no responsibility for any of them.

            www.code400.com

            Comment


            • #7
              Re: Wrkjobscde

              What??? and you havent run it through the Rational WebSphere Code Dingle-Dongle /FREE converter? shame on you
              predictably positive, permanently punctilious, purposely proactive, potentially priceless, primarily professional : projex

              Comment


              • #8
                Re: Wrkjobscde

                We climb to the tops of mountains to be closer to God, then use stone chisels to carve out our code.
                All my answers were extracted from the "Big Dummy's Guide to the As400"
                and I take no responsibility for any of them.

                www.code400.com

                Comment


                • #9
                  Re: Wrkjobscde

                  Ok, here's the big question....

                  Where do these things go once entered?

                  I checked qsys, qgpl and other libs, both in my libl and out of, and I can't find them.

                  Do they just sit in netherland!

                  I have a job that checks to see if a jobscde exists to do some work later on and I'm trying to have it not add an additional entry if one exists already (which it's doing) by using chkobj (*libl/job name) *JOBSCD and although I can see the job when I do wrkjobscde, the program does not.

                  I just want to check if one exists.
                  Everyday's a school day, what grade are you in?

                  Comment


                  • #10
                    Re: Wrkjobscde

                    Retrieve Job Schedule Entries

                    Example: Changing a job schedule entry

                    Example code for using the List Job Schedule Entries (QWCLSCDE) API
                    "Time passes, but sometimes it beats the <crap> out of you as it goes."

                    Comment


                    • #11
                      Re: Wrkjobscde

                      So what you're infering is that there is no way to check to see if an entry exists simply by doing chkobj *jobscd!

                      Ok, so I'm going to have to do it the other way.

                      Thanks.
                      Everyday's a school day, what grade are you in?

                      Comment


                      • #12
                        Re: Wrkjobscde

                        Good Choice
                        All my answers were extracted from the "Big Dummy's Guide to the As400"
                        and I take no responsibility for any of them.

                        www.code400.com

                        Comment


                        • #13
                          Re: Wrkjobscde

                          There is another way to do what I originally wanted to do:
                          RMVJOBSCDE and monitor for CPF1628 - "Job schedule entry &3 number &4 not found", then add my new entry.
                          Everyday's a school day, what grade are you in?

                          Comment


                          • #14
                            Re: Wrkjobscde

                            Originally posted by Finkpad View Post
                            What??? and you havent run it through the Rational WebSphere Code Dingle-Dongle /FREE converter? shame on you
                            @ Finkpad

                            I dont think you have to shame on Jamie or me (owner of Think400.dk).

                            Just do me a favour and contact all the contributors at Think400.dk and ask them to update their old code.
                            I have been collecting all these tips and API's from mid '90 - and I dont expect the contributors to update.

                            If you have a problem with that... you should now how to convert to a more modern /free language ;-)

                            Leif @ Think400.dk (also know as Leguar)

                            Comment


                            • #15
                              Re: Wrkjobscde

                              Leif
                              Great to hear from you... I think Nick was just messin with me.
                              Thanks for the support, let me know if there is anything I can do for you.

                              Thanks from all of us for creating and maintaining such an important site.
                              Ive used it many many times.

                              Take care and be safe

                              jamie
                              All my answers were extracted from the "Big Dummy's Guide to the As400"
                              and I take no responsibility for any of them.

                              www.code400.com

                              Comment

                              Working...
                              X