Solved

Sorting Spool Files in Queues ...

Posted on 2003-11-19
12
1,237 Views
Last Modified: 2007-12-19

Hi

When viewing AS400 spool files by queue or by user i would like to be able to sort them by
date in Ascending or Descending order.  I know i can do this in Operations Navigator on a PC but it is painfully slow.  Ideally i would like to find a third party product or tool that would allow me and my users to do this directly on the as400.

All suggestions welcome

Thanks
John Keane.
0
Comment
Question by:KEANEJ
12 Comments
 
LVL 14

Expert Comment

by:daveslater
ID: 9786654
Hi
What functionallity do you want from the utility ie
Just view or a all options that you get with workoutq

Dave
0
 

Author Comment

by:KEANEJ
ID: 9786710

If i run the commands "WRKSPLF JOEPUBLIC"  or "WRKOUTQ PRT15" i would like to be able to sort the spool files in Ascending or Descending order of the Creation Date column in addition to the functionality i already have with the above two commands.


0
 
LVL 13

Expert Comment

by:samic400
ID: 9789994
used to be a CVTOUTQ cmd that you could use in a CL and it would generate an OUTFILE based on the header information of all of your spool files. You could read down through this file using the RCVF cmd and based upon dates, you could change the output priority of your spool files, thus "sorting" your output.... You would have to put your own logic in there using the CHGSPLFA cmd with the OUTFILE information for each record.
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9849366
Hi
how are you getting on with this.
I have been playing with some spool API's but it will be a few weeks before I have anything like a solution.
I am working on it when I get board.

rgs


Dave
0
 
LVL 14

Expert Comment

by:daveslater
ID: 10405869
Hi
Just an update - I have about 85% of the program complete.
Let me know if you are still intrested.

Dave
0
 
LVL 14

Accepted Solution

by:
daveslater earned 50 total points
ID: 10470596
Hi again
I have stopped work on the function as there has not been any responce.

Dave
0
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
LVL 14

Expert Comment

by:daveslater
ID: 10579981
Hi
why have you closed it? All I wanted to know is if you still required it.

I have an RPG program that is 85% complete. It displays spool files, allows you to sort them by various criteria (it is very fast). The only think left to do is to write the commands to send, delete etc..

I will publish what I have done so far - you can have a look - if you want me to continue let me know.

Watch this space.

Dave
0
 

Author Comment

by:KEANEJ
ID: 10579994

Hi

Sorry,  i got sidetracked from this problem,  yes if you can finish it, that would be great.

John

0
 
LVL 14

Expert Comment

by:daveslater
ID: 10580181
This CL creates a message file that is for the screen and errors. I may add to it

             PGM                                                                  
             CRTMSGF    MSGF(*CURLIB/FLXSPLF)                                      
                                                                                   
             ADDMSGD    MSGID(ERR0000) MSGF(*CURLIB/FLXSPLF) MSG(' ')              
                                                                                   
             ADDMSGD    MSGID(ERR0001) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('The cursor is not in a position to +                
                          sort')                                                  
                                                                                   
             ADDMSGD    MSGID(FLX0001) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('(No spooled output files)')                        
                                                                                   
             ADDMSGD    MSGID(FTR0000) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('Parameters for options 1, 2, 3 or +                
                          command')                                                
                                                                                   
             ADDMSGD    MSGID(FTR0001) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('F3=Exit   F5=Refresh    F12=Cancel   +              
                          F16=Sort   F17=Top   F18=Bottom')                        
                                                                               
             ADDMSGD    MSGID(HDR0000) MSGF(*CURLIB/FLXSPLF) +                
                          MSG('Flexible Spool File Manager')                  
                                                                               
             ADDMSGD    MSGID(HDR0001) MSGF(*CURLIB/FLXSPLF) +                
                          MSG('Type options, press Enter.')                    
                                                                               
             ADDMSGD    MSGID(HDR0002) MSGF(*CURLIB/FLXSPLF) MSG('  +          
                          1=Send   2=Change   3=Hold   4=Delete   +            
                          5=Display   6=Release   7=Messages')                
                                                                               
             ADDMSGD    MSGID(HDR0003) MSGF(*CURLIB/FLXSPLF) MSG('  +          
                          8=Attributes        9=Work with printing +          
                          status')                                            
                                                                               
             ADDMSGD    MSGID(OPT0001) MSGF(*CURLIB/FLXSPLF) +                
                          MSG('Opt  File        User        +                  
                          Queue       User Data   Sts   Pages    +            
                          Page  Copy')                                        
                                                                               
             ADDMSGD    MSGID(OPT0002) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('                             Device +              
                          or                     Total     Cur')                  
                                                                                 
             ADDMSGD    MSGID(OPT0101) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('Opt  File        User        Form +                
                          Type   Pty  Date      Time')                            
                                                                                 
             ADDMSGD    MSGID(OPT0102) MSGF(*CURLIB/FLXSPLF) +                    
                          MSG('                                       -          
       Creation  Creation')                                                      
                                                                                 
                                                                                 
             ENDPGM                                                              

This is the display file

     A                                      DSPSIZ(24 80 *DS3)                  
     A                                      CF01                                
     A                                      CF02                                
     A                                      CF03                                
     A                                      CF04                                
     A                                      CF05                                
     A                                      CF06                                
     A                                      CF07                                
     A                                      CF08                                
     A                                      CF09                                
     A                                      CF10                                
     A                                      CF11                                
     A                                      CF12                                
     A                                      CF13                                
     A                                      CF14                                
     A                                      CF15                                
     A                                      CF16                                
     A                                      CF17                                
     A                                      CF18                                
     A                                      CF19                              
     A                                      CF20                              
     A                                      CF21                              
     A                                      CF22                              
     A                                      CF23                              
     A                                      CF24                              
     A                                      ROLLUP                            
     A                                      ROLLDOWN                          
     A*****************************************************   À              
     A          R F00                       OVERLAY                          
     A            OPT001M        7   H                                        
     A            OPT002M        7   H                                        
     A            OPT003M        7   H                                        
     A            HDR000        79   O  1 27MSGID(HDR0000 FLXSPLF)            
     A                                      DSPATR(HI)                        
     A            HDR001        79   O  3  2COLOR(BLU)                        
     A                                      MSGID(HDR0001 FLXSPLF)            
     A            HDR002        79   O  4  2COLOR(BLU)                        
     A                                      MSGID(HDR0002 FLXSPLF)            
     A            HDR003        79   O  5  2COLOR(BLU)                        
     A                                      MSGID(HDR0003 FLXSPLF)          
     A            OPT001        79   O  7  2DSPATR(HI)                      
     A                                      MSGID(&OPT001M FLXSPLF)        
     A            OPT002        79   O  8  2DSPATR(HI)                      
     A                                      MSGID(&OPT002M FLXSPLF)        
     A            OPT003        79   O  9  2DSPATR(HI)                      
     A                                      MSGID(&OPT003M FLXSPLF)        
     A*****************************************************   À            
     A          R F98                                                      
     A                                      RTNCSRLOC(*MOUSE &C#ROW &C#POS)
     A                                      OVERLAY                        
     A            C#ROW          3  0H                                      
     A            C#POS          3  0H                                      
     A            FTR001M        7   H                                      
     A            FTR003M        7   H                                      
     A            FTR001        79   O 20  2                                
     A                                      MSGID(&FTR001M FLXSPLF)        
     A                                 21  2'===>'                          
     A            FTRCMD        74   B 21  7                                
     A            FTR003        79   O 22  2COLOR(BLU)                      
     A                                      MSGID(&FTR003M FLXSPLF)          
      *****************************************************                  
     A          R SFLMSG                    SFL                              
     A                                      SFLMSGRCD(24)                    
     A            MSGKEY                    SFLMSGKEY                        
     A            MSGQ                      SFLPGMQ                          
      *****************************************************                  
     A          R SFLMSGCT                  SFLCTL(SFLMSG)                  
     A                                      SFLSIZ(20) SFLPAG(1)            
     A                                      OVERLAY                          
     A  70                                  SFLEND                          
     A  70                                  SFLDSP                          
     A  70                                  SFLDSPCTL                        
     A  70                                  SFLINZ                          
     A N70                                  SFLCLR                          
     A            MSGQ                      SFLPGMQ                          
     A***********************************************************************
     A          R F01SFL                    SFL                              
     A            SEL01          1A  B 10  3                                
     A            FILE          10A  O 10  7                                
     A            USER          10A  O 10 19                                
     A            QUEUE         10A  O 10 31                                
     A            USRDTA        10A  O 10 43                                
     A            STAT           3A  O 10 55                                
     A            PAGES          5Y 0O 10 61EDTCDE(Z)                        
     A            COPY           5  0O 10 75EDTCDE(Z)                        
      ***********************************************************************
     A          R F01CTL                    SFLCTL(F01SFL)                  
     A                                      OVERLAY                          
     A  31                                  SFLDSP                          
     A                                      SFLDSPCTL                        
     A N31                                  SFLCLR                          
     A  41                                  SFLEND(*MORE)                    
     A                                      SFLSIZ(0009)                    
     A                                      SFLPAG(0009)                    
     A            RRN            4  0H      SFLRCDNBR                        
     A***********************************************************************
     A          R F02SFL                    SFL                              
     A            SEL01          1A  B 10  3                                
     A            FILE          10A  O 10  7                                
     A            USER          10A  O 10 19                                
     A            FORMTYPE       4   O 10 31                                
     A            PRTY           1   O 10 44                                
     A            DATE           6Y 0O 10 48EDTCDE(Y)                        
     A            TIME           6Y 0O 10 58EDTWRD('0 :  :  ')              
      ***********************************************************************
     A          R F02CTL                    SFLCTL(F02SFL)                  
     A                                      OVERLAY                          
     A  31                                  SFLDSP                          
     A                                      SFLDSPCTL                        
     A N31                                  SFLCLR                          
     A  41                                  SFLEND(*MORE)                    
     A                                      SFLSIZ(0009)                    
     A                                      SFLPAG(0009)                    
     A            RRN            4  0H      SFLRCDNBR                        
      ***********************************************************************
     A          R F99                                                        
     A            MSG99         70   O 11  4 MSGID(FLX0001 FLXSPLF)          
      ***********************************************************************
     A          R NOMSG                     OVERLAY                          
     A                                 24  2' '          

The RPGLE will follow soon

Dave
0
 
LVL 14

Expert Comment

by:daveslater
ID: 10580622
It will be best to copy this into note pad and the FTP to a source file

Dave


      *
     H  ACTGRP(*CALLER)
     H  BNDDIR('MYBNDDIR')
     FFLXSPLF   CF   E             WORKSTN INFDS(INFDS)
     F                                     SFILE(F01SFL:RRN)
     F                                     SFILE(F02SFL:RRN)
      ********************************************************************
      ** Get aid byte from the display
     D INFDS           DS
     D  @KEY                 369    369
      ********************************************************************
      * Hex definitionns for @KEY                            À
     D F1              C                   CONST(X'31')
     D F2              C                   CONST(X'32')
     D F3              C                   CONST(X'33')
     D F4              C                   CONST(X'34')
     D F5              C                   CONST(X'35')
     D F6              C                   CONST(X'36')
     D F7              C                   CONST(X'37')
     D F8              C                   CONST(X'38')
     D F9              C                   CONST(X'39')
     D F10             C                   CONST(X'3A')
     D F11             C                   CONST(X'3B')
     D F12             C                   CONST(X'3C')
     D F13             C                   CONST(X'B1')
     D F14             C                   CONST(X'B2')
     D F15             C                   CONST(X'B3')
     D F16             C                   CONST(X'B4')
     D F17             C                   CONST(X'B5')
     D F18             C                   CONST(X'B6')
     D F19             C                   CONST(X'B7')
     D F20             C                   CONST(X'B8')
     D F21             C                   CONST(X'B9')
     D F22             C                   CONST(X'BA')
     D F23             C                   CONST(X'BB')
     D F24             C                   CONST(X'BC')
     D ENTER           C                   CONST(X'F1')
     D HELP            C                   CONST(X'F3')
     D ROLLUP          C                   CONST(X'F4')
     D ROLLDN          C                   CONST(X'F5')
     D PRINT           C                   CONST(X'F6')
      ********************************************************************
      ** Spool file status
     D AStatus         S              4    dim(12) ctdata
     D                                     perrcd(12)
      ********************************************************************
      **  error data structure:
     D ErrorDs         Ds
     D  ErBytPrv                     10i 0 Inz( %Size( ErrorDs  ))
     D  ErBytAvl                     10i 0
     D  ErMsgId                       7a
     D                                1a
     D  Erdata                      128a
      ********************************************************************
      **  Spooled file information:
     D OSPL0300        Ds
     D  spJobId                      26a
     D   spJobNam                    10a   Overlay( spJobId: 1 )
     D   spUsrNam                    10a   Overlay( spJobId: *Next )
     D   spJobNbr                     6a   Overlay( spJobId: *Next )
     D  spSplfNam                    10a
     D  spSplfNbr                    10i 0
     D  spSplfSts                    10i 0
     D  spDatOpn                      7a
     D  spTimOpn                      6a
     D  spSplfSch                     1a
     D  spJobSysNam                  10a
     D  spUsrDta                     10a
     D  spFrmTyp                     10a
     D  spOutQnam                    10a
     D  spOutQlib                    10a
     D  spAuxStgPool                 10i 0
     D  spSplfSiz                    10i 0
     D  spSizMtp                     10i 0
     D  spTotPag                     10i 0
     D  spCpyLft                     10i 0
     D  spSplfPty                     1a
     D                                3a
      ********************************************************************
      **  Execute command:
     D Qcmdexc         Pr                  ExtPgm( 'QCMDEXC' )
     D  Cmd                         512a   Const  Options( *VarSize )
     D  CmdLen                       15p 5 Const
      **
     D  CmdV1          s            512    varying
     D  CmdV2          s            512    varying
     D  CmdV3          s            512    varying
      ********************************************************************
      **  Close list
     D CloseLst        Pr                  ExtPgm( 'QGY/QGYCLST' )
     D  ClHandle                      4a   Const
     D  ClError                    1024a          Options( *VarSize )
      ********************************************************************
      **  Get list entry:
     D GetLstEnt       Pr                  ExtPgm( 'QGY/QGYGTLE' )
     D  GlRcvVar                  65535a          Options( *VarSize )
     D  GlRcvVarLen                  10i 0 Const
     D  GlHandle                      4a   Const
     D  GlLstInf                     80a
     D  GlNbrRcdRtn                  10i 0 Const
     D  GlRtnRcdNbr                  10i 0 Const
     D  GlError                    1024a          Options( *VarSize )
      ********************************************************************
      **  Sort information:
     D srSrtInf        Ds
     D  srNbrKeys                    10i 0
     D  srSrtInfa                    12a   Dim( 10 )
      **Sort Sub definition
     D srSrtInf1       Ds
     D   s1SrtInf
     D   srKeyFldOfs                 10i 0 Overlay( s1SrtInf :  1 )
     D   srKeyFldLen                 10i 0 Overlay( s1SrtInf :  5 )
     D   srKeyFldTyp                  5i 0 Overlay( s1SrtInf :  9 )
     D   srSrtOrd                     1a   Overlay( s1SrtInf : 11 )
     D   srRsv                        1a   Overlay( s1SrtInf : 12 )
      ********************************************************************
      **  Open list of jobs:
     D LstSplf         Pr                  ExtPgm( 'QGY/QGYOLSPL' )
     D  LsRcvVar                  65535a          Options( *VarSize )
     D  LsRcvVarLen                  10i 0 Const
     D  LsLstInf                     80a
     D  LsNbrRcdRtn                  10i 0 Const
     D  LsSrtInf                   1024a   Const  Options( *VarSize )
     D  LsSltInf                   1024a   Const  Options( *VarSize )
     D  LsJobNam                     26a   Const
     D  LsFmtNam                      8a   Const
     D  LsError                    1024a          Options( *VarSize )
      ********************************************************************
      **  Procedure definitionas
     D fnOpenList      Pr              n
     DfnGetList        Pr              n
     DfnCloseList      Pr              n
     DfnSort           Pr              n
     D IDX                            3  0 Const
     D/COPY DSLIBEE/QRPGLESRC,SFLSRVPGMP
      ********************************************************************
      **  Global variables
     D SplfChkDts      s               z
     D NbrSplfs        s             10i 0 Inz
     D MsgKey          s              4a
     D MsgTxt          s            512a   Varying
     D CmdStr          s            512a   Varying
     D SortBinary      S              5I 0 INZ(9)
     D SortChar        S              5I 0 INZ(4)
     D SlCurRcdNbr     s             10i 0 Inz( 0 )
     D SlSavRcdNbr     s             10i 0 Inz( 0 )
     DOPT              S              1    DIM(32766) BASED(OPTPT)
     DOPTDS            DS         32766
     DOPTPT            S               *   INZ(%ADDR(OPTDS))
     DSFLSIZ           C                   9
     DVIEW             S              3  0
     DIDX              S              7  0
     DDTDATE           S               D
     DMSGF             S             20    INZ('FLXSPLF   *LIBL')
      ********************************************************************
      **  Parameters
      *
     D p_Select        Ds
     D  SlNbrElm                      5i 0
     D  SlUsrNam                     10a
     D  SlOutQ                       20a
     D   SlOutQnam                   10a   Overlay( SlOutQ: 1 )
     D   SlOutQlib                   10a   Overlay( SlOutQ: *Next )
     D  SlFrmTyp                     10a
     D  SlUsrDta                     10a
      *
     D  DoDatFrm       S              7a
     D  DoTimFrm       S              6a
      *
     D p_SplfSts       s             10a
     D p_Option        s              3a
      *
     D p_ToOutQ        Ds
     D  ToOutQnam                    10a
     D  ToOutQlib                    10a
      ********************************************************************
      **  List information:
     D SlLstInf        Ds
     D  NbrRecs                      10i 0
     D  RcdNbrRtn                    10i 0
     D  LiHandle                      4a
     D  LiRcdLen                     10i 0
     D  LiInfSts                      1a
     D  LiDts                        13a
     D  LiLstSts                      1a
     D                                1a
     D  LiInfLen                     10i 0
     D  LiRcd1                       10i 0
     D                               40a
      ********************************************************************
      **
      ********************************************************************
      *
     C     *Entry        Plist
     C                   Parm                    p_Select
     C                   Parm                    p_SplfSts
     C                   Parm                    p_Option
      ** Set output queue for subfile message
     C                   EVAL      MSGQ='*'
      * Set screen hadings (soft coded in msgf FLXSPLF)
     C                   EVAL      FTR001M='FTR0000'
     C                   EVAL      FTR003M='FTR0001'
      * Open the list
     c                   eval      *IN01=fnOPenList()
     C                   CLEAR                   SlCurRcdNbr
      * Roll forward - fill first page
     C                   EXSR      srRollf
B01  C                   Do        *HIVAL
      * Check for records to display
B02  C                   IF        NbrRecs    =0
     C                   EVAL      *IN31=*Off
     C                   WRITE     F99
X02  C                   ELSE
     C                   EVAL      *IN31=*ON
     C                   EVAL      *IN41=NbrRecs    <=SlCurRcdNbr
E02  C                   ENDIF
      **
B02  C                   IF        View=0
     C                   EVAL      OPT003M='OPT0001'
     C                   EVAL      OPT002M='OPT0002'
     C   31              WRITE     F01CTL
X02  c                   ELSEIF    VIEW=1
     C                   EVAL      OPT003M='OPT0101'
     C                   EVAL      OPT002M='OPT0102'
     C   31              WRITE     F02CTL
E02  C                   ENDIF
      * Write heading and clear format
      ** Execute F98 so we can get Parms for the option
     C   70              WRITE     SFLMSGCT
     C  N70              WRITE     NOMSG
     C                   WRITE     F00
     C                   EXFMT     F98
     c                   EVAL      *IN70=FnClrsflmsgq()
      ** F3/12=exit
B02  c                   if        @key=F3 or @key=F12
     c                   leave
      ** F17 = Top
X02  c                   elseif    @key=F17
     C                   CLEAR                   SlCurRcdNbr
     C                   EXSR      srRollf
      ** F18 = Bottom
X02  c                   elseif    @key=F18
     C                   eval      SlCurRcdNbr= NbrRecs   - SFLSIZ
     C                   EXSR      srRollf
      ** Page down
X02  C                   ELSEIF    @KEY=ROLLDN AND NOT *IN41
     C                   EXSR      srRollf
      ** Page up
X02  C                   ELSEIF    @KEY=ROLLUP AND SlCurRcdNbr>0
     C                   EXSR      srRollb
      ** F5=Refresh
X02  C                   ELSEIF    @KEY=F5
     c                   eval      *IN01=fnOPenList()
      ** set correct page
B03  c                   IF        NbrRecs    <SlsavRcdNbr
     C                   EVAL      SlsavRcdNbr=NbrRecs
     C                   EXSR      srRollb
X03  C                   else
     C                   eval      SlCurRcdNbr=SlsavRcdNbr-1
     C                   EXSR      srRollf
E03  c                   endif
      ** F11=Switch view
X02  C                   ELSEIF    @KEY=F11
     C                   EVAL      VIEW+=1
B03  C                   IF        VIEW=2
     C                   CLEAR                   VIEW
E03  C                   ENDIF
     C                   ITER
      ** F16=Sort
X02  C                   ELSEIF    @KEY=F16
      ** If no sort simply loop
B03  c                   if        not fnSort(1)
     C                   EVAL      *IN70=
     C                             fnSndSflMsg(
     C                             'ERR0001': MSGF:
     C                             *blanks)
     c                   iter
E03  c                   endif
      **
     c                   eval      *IN01=fnOPenList()
     C                   CLEAR                   SlCurRcdNbr
     C                   EXSR      srRollf
      **
      ** ENTER=Process required entrys
X02  C                   ELSEIF    @KEY=Enter
     C                   EXSR      srProcess
E02  c                   endif
E01  c                   enddo
      * Close list
     C                   EVAL      *IN01=fnCloseList()
     C                   Eval      *InLr       = *On
      *
     C                   Return
      ******************************************************************************************
      ** srProcess - Process any options
      ******************************************************************************************
     C     SrProcess     BEGSR
     C
     C                   EXSR      SRSavOpt
     C                   IF        OPTDS=*BLANKS
     C                   LEAVEsr
     C                   ENDIF
     C
     C                   DO        *HIVAL
     C                   IF        OPTDS=*BLANKS
     C                   LEAVE
     C                   ENDIF
      **
     C                   EVAL      IDX=%CHECK(' ':OPTDS)
     C                   EVAL      OPT(IDX)=' '
      ** Get entry details
     C                   Eval      SlCurRcdNbr = idx
     C                   EVAL      *IN02=fnGetList()
      **
     C                   EVAL      CMDv1= 'file(' + spSplfNam + ')' +
     C                                    ' JOB(' + %TRIM(spJobNbr) + '\' +
     C                                             %TRIM(spUsrNam) + '\' +
     C                                             %TRIM(spJobNam) + ')' +
     C                                    ' SPLNBR(' +%TRIM(%EDITC(
     C                                               spSplfNbr:'Z')) + ')'
     C
     C                   ENDDO
      ** refresh list
     c                   eval      *IN01=fnOPenList()
      ** set correct page
B03  c                   IF        NbrRecs    <SlsavRcdNbr
     C                   EVAL      SlsavRcdNbr=NbrRecs
     C                   EXSR      srRollb
X03  C                   else
     C                   eval      SlCurRcdNbr=SlsavRcdNbr-1
     C                   EXSR      srRollf
E03  c                   endif
      **
     C                   ENDSR
      *
      ******************************************************************************************
      ** srRollf - Ouput next page of the subfile
      ******************************************************************************************
     C     SrRollF       BEGSR
     C                   EXSR      SRSavOpt
     C                   CLEAR                   *IN01
      ** Process required number of records
B01  C                   DO        SFLSIZ
      ** No more entries?
B02  C                   IF        SlCurRcdNbr = NbrRecs
     C                   LEAVE
E02  C                   ENDIF
      ** Get entry data
     C                   Eval      SlCurRcdNbr = SlCurRcdNbr + 1
     c                   EVAL      *IN02=fnGetList()
      ** populate subfile details
     c                   EXSR      srSflDetails
      *
E01  C                   EndDo
     c                   ENDSR
      ******************************************************************************************
      ** SrRollb - Load previous page of the subfile
      ******************************************************************************************
     C     SrRollb       BEGSR
      **
     C                   EXSR      SRSavOpt
     C                   Eval      SlCurRcdNbr = SlSavRcdNbr -10
B01  C                   IF        SlCurRcdNbr<0
     C                   CLEAR                   SlCurRcdNbr
E01  C                   ENDIF
      **
     C                   CLEAR                   *IN01

B01  C                   DO        SFLSIZ
      **
B02  C                   IF        SlCurRcdNbr = NbrRecs
     C                   LEAVE
E02  C                   ENDIF
      **
     C                   Eval      SlCurRcdNbr = SlCurRcdNbr + 1
     c                   EVAL      *IN02=fnGetList()
      ** populate subfile details
     c                   EXSR      srSflDetails
      *
E01  C                   EndDo
     c                   ENDSR
      ******************************************************************************************
      **   SrsflDetails - Move MODS to subfile fields
      ******************************************************************************************
     C     srSflDetails  BegSr
      ** First time on Roll refresh subfile and save current page details
B01  C                   IF        NOT *IN01
     C                   CLEAR                   F01SFL
     C                   CLEAR                   F01CTL
     C                   WRITE     F01CTL
     C                   WRITE     F02CTL
     C                   EVAL      *IN01=*ON
     C                   EVAL      SlsavRcdNbr = SlCurRcdNbr
E01  C                   ENDIF
      ** Increment record number
     C                   EVAL      RRN+=1
      ** Move fields to screen
     C                   EVAL      FILE=spSplfNam
     C                   EVAL      USER=spUsrNam
     C                   EVAL      QUEUE =spOutQnam
     C                   EVAL      USRDTA=spUsrDta
     C                   EVAL      PAGES=spTotPag
     C                   EVAL      COPY=spCpyLft
     c                   eval      formtype=spFrmTyp
     C                   MOVE      spSplfPty     PRTY
      ** Conver date to DMY format
     C     *CYMD0        MOVE      spDatOpn      DTDATE
     C     *DMY          MOVE      DTDATE        DATE
     C                   MOVE      spTimOpn      TIME
      ** Get Previous option?
     C                   EVAL      SEL01=OPT(RRN+SlsavRcdNbr-1)
B01  C                   IF        spSplfSts > 0 AND
     C                             spSplfSts <=%ELEM(aStatus)
     C                   EVAL      stat=Astatus(spSplfSts)
E01  c                   endif
      ** Write Subfile record
     c                   WRITE     F01SFL
     c                   WRITE     F02SFL
      **
     c                   ENDSR
      ******************************************************************************************
      **   SrsavOpt save user options
      ******************************************************************************************
     C     SRSavOpt      BegSr
      ** save options
B01  C                   DO        SFLSIZ        RRN
B02  C                   IF        VIEW=0
     C     RRN           CHAIN(E)  F01SFL
X02  C                   ELSE
     C     RRN           CHAIN(E)  F02SFL
E02  C                   ENDIF
B02  C                   IF        %ERROR
     C                   LEAVE
E02  C                   ENDIF
      ** set options
B02  C                   IF        %FOUND
     C                   EVAL      OPT(RRN+SlsavRcdNbr-1)=SEL01
E02  C                   ENDIF
E01  C                   ENDDO
      **
     c                   eval      rrn=1
      **
     c                   ENDSR
      *******************************************************************************
      ** Open List & Return Handle
      *******************************************************************************
     PfnOpenList       B
     DfnOpenList       PI              N
      **  Selection information:
     D SlSltInf        Ds
     D  srNbrUsrNam                  10i 0 Inz( %Elem( srUsrEnt ))
     D   srUsrEnt                    12a   Dim( 1 )
     D    srUsrNam                   10a   Overlay( srUsrEnt: 1 )
     D    srUsrRsv                    2a   Overlay( srUsrEnt: *Next )
     D                                     Inz( *Allx'00' )
     D  srNbrOutQ                    10i 0 Inz( %Elem( srOutQ ))
     D   srOutQ                      20a   Dim( 1 )
     D    srOutQNam                  10a   Overlay( srOutQ: 1 )
     D    srOutQlib                  10a   Overlay( srOutQ: *Next )
      *
     D  srFrmTyp                     10a
     D  srUsrDta                     10a
      *
     D  srNbrSplfSts                 10i 0 Inz( %Elem( srSplfSts ))
     D   srSplfSts                   12a   Dim( 1 )
     D    srStatus                   10a   Overlay( srSplfSts: 1 )
     D                                2a   Overlay( srSplfSts: *Next )
     D                                     Inz( *Allx'00' )
      *
     D  srNbrDevNam                  10i 0 Inz( %Elem( srDevEnt ))
     D   srDevEnt                    12a   Dim( 1 )
     D    srDevNam1                  10a   Overlay( srDevEnt: 1 )
     D                                     Inz( '*ALL' )
     D                                2a   Overlay( srDevEnt: *Next )
     D                                     Inz( *Allx'00' )
     C                   EVAL      *IN01=fnCloseList()
     C                   Eval      srSplfSts(1) = p_SplfSts
     C                   Eval      srUsrNam     = SlUsrNam
     C                   Eval      srFrmTyp     = SlFrmTyp
     C                   Eval      srUsrDta     = SlUsrDta
      *
B01  C                   If        SlOutQnam   <> '*ALL'
     C                   Eval      srOutQ(1)    = SlOutQ
X01  C                   Else
     C                   Eval      srOutQ(1)    = SlOutQnam
E01  C                   EndIf
      *
     C                   Eval      DoDatFrm     = '1991231'
     C                   Eval      DoTimFrm     = '240000'
      *
     C                   Eval      SplfChkDts   = %Date( DoDatFrm: *CYMD0 ) +
     C                                            %Time( DoTimFrm: *HMS0 )
     C                   EVAL       C#POS=31
     C                   EVAL      *IN01=fnSort(1)

     C                   CallP     LstSplf( OSPL0300
     C                                    : %size( OSPL0300 )
     C                                    : SlLstInf
     C                                    : 1
     C                                    : srSrtInf
     C                                    : SlSltInf
     C                                    : *Blanks
     C                                    : 'OSPL0300'
     C                                    : ErrorDs
     C                                    )
     C                   RETURN    LiHandle
     PfnOpenList       E
      *******************************************************************************
      ** fnGeTLstEntry
      *******************************************************************************
     PfnGetList        B
     DfnGeTList        PI              N
      ***
     C                   CallP     GetLstEnt( OSPL0300
     C                                      : %Size( OSPL0300 )
     C                                      : LiHandle
     C                                      : SlLstInf
     C                                      : 1
     C                                      : SlCurRcdNbr
     C                                      : ErrorDs
     C                                      )
B01  C                   IF        ErBytAvl<>0
     C                   RETURN    *Off
E01  C                   ENDIF
      **
     C                   RETURN    *ON
     PfnGetList        e
      *******************************************************************************
      ** fnCloseList
      *******************************************************************************
     PfnCloseList      B
     DfnCloseList      PI              N

      *
     C                   CallP     CloseLst( LiHandle
     C                                     : ErrorDs
     C                                     )
     C                   RETURN    *ON
      *
     PfnCloseList      e
      *******************************************************************************
      ** fnSort
      *******************************************************************************
     PfnSort           B
     DfnSort           PI              N
     D IDX                            3  0 Const
      ** User
B01  C                   If        view=0 and C#POS>=19 and C#POS<=29
     C                   Eval      srNbrKeys      = Idx
     C                   Eval      srKeyFldOfs    = 11
     C                   Eval      srKeyFldLen    = 10
     C                   Eval      srKeyFldTyp    = 4
     C                   Eval      srSrtOrd       = '1'
     C                   Eval      srRsv          = x'00'
     C                   eval      srSrtInfa(Idx)=srSrtInf1
     C                   RETURN    *ON
     C
X01  C                   elseif    view=1 and C#POS>=48
      ** Date / Time
     C                   Eval      srNbrKeys      = Idx
     C                   Eval      srKeyFldOfs    = 45
     C                   Eval      srKeyFldLen    = 13
     C                   Eval      srKeyFldTyp    = 4
     C                   Eval      srSrtOrd       = '1'
     C                   Eval      srRsv          = x'00'
     C                   eval      srSrtInfa(Idx)=srSrtInf1
     C                   RETURN    *ON
      ** output queue
X01  C                   elseif    view=0 and C#POS>=31 and C#POS<=41
     C                   Eval      srNbrKeys      = Idx
     C                   Eval      srKeyFldOfs    = 89
     C                   Eval      srKeyFldLen    = 10
     C                   Eval      srKeyFldTyp    = 4
     C                   Eval      srSrtOrd       = '1'
     C                   Eval      srRsv          = x'00'
     C                   eval      srSrtInfa(Idx)=srSrtInf1
     C                   RETURN    *ON
E01  C                   endif
     C                   RETURN    *OFF
      *
     PfnSort           e
**
RDY OPN CLO SAV WTR HLD MSGWPND PRT FIN SND DFR
0
 
LVL 14

Expert Comment

by:daveslater
ID: 10580631
and finally the command - I have called everything FLXSPLF

             CMD        PROMPT('Manage Spooled Files')                    
                                                                         
             PARM       KWD(SELECT) TYPE(E0001) PROMPT('Select files +    
                          for')                                          
                                                                         
             PARM       KWD(STATUS) TYPE(*CHAR) LEN(10) RSTD(*YES) +      
                          DFT(*ALL) SPCVAL((*ALL *ALL) (*HLD *HELD) +    
                          (*RDY *READY) (*SAV *SAVED)) +                  
                          PROMPT('Spooled file status')                  
                                                                         
 E0001:      ELEM       TYPE(*NAME) DFT(*CURRENT) SPCVAL((*CURRENT) +    
                          (*ALL)) EXPR(*YES) PROMPT('User')              
                                                                         
             ELEM       TYPE(Q0001) PROMPT('Output queue')                
                                                                         
             ELEM       TYPE(*NAME) DFT(*ALL) SPCVAL((*ALL) (*STD)) +    
                          EXPR(*YES) CHOICE('Form type, *ALL, +          
                          *STD') PROMPT('Form type')                      
                                                                         
             ELEM       TYPE(*NAME) DFT(*ALL) SPCVAL((*ALL)) +              
                          CHOICE('User data, *ALL') PROMPT('User data')    
                                                                           
 Q0001:      QUAL       TYPE(*NAME) DFT(*ALL) SPCVAL((*ALL))                
                                                                           
             QUAL       TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL) +            
                          (*CURLIB)) EXPR(*YES) PROMPT('Library')          
                                                                           
 Q0002:      QUAL       TYPE(*NAME) EXPR(*YES)                              
                                                                           
             QUAL       TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL) +            
                          (*CURLIB)) EXPR(*YES) PROMPT('Library')          
                                                                           

Let me know how you get on

dave
0
 

Expert Comment

by:Bowersst
ID: 11021378
John,
At the beginning of your question you mentioned that third part software would be ideal.My company subscribes to TAATOOLS. The enhancements that they make to IBM commands are incredible. They have a WRKALLSPLF command with the ascending descending parameter built in to the command. I don't have the specs on price but they do have a website.

Steve
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
In  today’s increasingly digital world, managed service providers (MSPs) fight for their customers’ attention, looking for ways to make them stay and purchase more services. One way to encourage that behavior is to develop a dependable brand of prod…
Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now