| Code: 
							
								
								
								| 
    package com.free400.vengoal;
 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
 import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400Exception;
import com.ibm.as400.access.AS400File;
import com.ibm.as400.access.AS400FileRecordDescription;
import com.ibm.as400.access.AS400Message;
import com.ibm.as400.access.CommandCall;
import com.ibm.as400.access.Job;
import com.ibm.as400.access.QSYSObjectPathName;
import com.ibm.as400.access.Record;
import com.ibm.as400.access.RecordFormat;
import com.ibm.as400.access.SequentialFile;
import com.ibm.as400.access.SpooledFile;
import com.ibm.as400.access.SpooledFileList;
 public class AS400CommandOutput {
    
    private static final String FILE_SEPARATOR_PROP = "file.separator";
    public static java.text.SimpleDateFormat datetimeFmt = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    private AS400 as400;
    private CommandCall commandCall;
    private SequentialFile seqfile;
    private String lastSplfName=null, lastSplfJob=null, lastSplfUsr=null, lastSplfJobNbr=null;
    private int lastSplfNbr=0;
    private String file;
    private String commandJobNbr;
    private String ddmJobNbr;
    private File toFile = null;
    private PrintWriter writer_;
    private FileOutputStream os;
    private boolean fileOpened = false;
     public AS400CommandOutput(AS400 as400){
        this.as400 = as400;
        this.commandCall = new CommandCall(this.as400);
    }
    
    public AS400CommandOutput(AS400 as400, File toFile){
        this.as400 = as400;
        this.toFile = toFile;
        this.commandCall = new CommandCall(this.as400);
    }
    
    public AS400 getSystem(){
        return as400;
    }    
     public String getCommandJobNbr(){
        String cmdJobNbr = null;
        try {
            as400.connectService(AS400.COMMAND);
            Job[] as400Jobs = as400.getJobs(AS400.COMMAND);
            for(int i=0; i < as400Jobs.length; i++){
                cmdJobNbr = as400Jobs[i].getNumber();
                System.out.println("Linking to AS400 job: " + as400Jobs[i].getNumber() + "/" + as400Jobs[i].getUser() + "/" + as400Jobs[i].getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }        
        return cmdJobNbr;
    }
    
    public String getDDMJobNbr(){
        String ddmJobNbr = null;
        try {
            as400.connectService(AS400.RECORDACCESS);
            Job[] as400Jobs = as400.getJobs(AS400.RECORDACCESS);
            for(int i=0; i < as400Jobs.length; i++){
                ddmJobNbr = as400Jobs[i].getNumber();
                System.out.println("Linking to AS400 job: " + as400Jobs[i].getNumber() + "/" + as400Jobs[i].getUser() + "/" + as400Jobs[i].getName());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }        
        return ddmJobNbr;
    }
    
    public void getLastSplfInfo(String selectSplfName, boolean deleteSplf) throws Exception{
        String splfName, splfJob, splfUsr, splfJobNbr, splfDate,splfTime;
        int splfNbr; 
        String lastSplfDateTime=" ";
        String splfDateTime;     
    
        SpooledFileList splfList = new SpooledFileList( as400 );
        // set filters, all users, on all queues
        splfList.setUserFilter(as400.getUserId());
        splfList.setQueueFilter("/QSYS.LIB/%ALL%.LIB/%ALL%.OUTQ");
        // open list, openSynchronously() returns when the list is completed.
        splfList.openSynchronously();
        Enumeration enumer = splfList.getObjects();            
        while( enumer.hasMoreElements() )
        {
            SpooledFile splf = (SpooledFile)enumer.nextElement();
            if ( splf != null )
            {
                // output this spooled file's name
                splfName = splf.getStringAttribute(SpooledFile.ATTR_SPOOLFILE);
                splfJob = splf.getStringAttribute(SpooledFile.ATTR_JOBNAME);
                splfUsr = splf.getStringAttribute(SpooledFile.ATTR_JOBUSER);
                splfJobNbr =  splf.getStringAttribute(SpooledFile.ATTR_JOBNUMBER);
                splfDate =  splf.getStringAttribute(SpooledFile.ATTR_DATE);
                splfTime =  splf.getStringAttribute(SpooledFile.ATTR_TIME);
                splfNbr = splf.getIntegerAttribute(SpooledFile.ATTR_SPLFNUM);
                splfDateTime = splfDate + splfTime;
                //System.out.println("splfDate:" + splfDate + " splfTime:" + splfTime + " job:" + splfJobNbr + "/"+ splfUsr + "/" + splfJob +  " spooled file = " + splfName + " splfNbr=" + splfNbr);
                if(splfName.equalsIgnoreCase(selectSplfName) && splfJob.equalsIgnoreCase("QPRTJOB")){
                    if (deleteSplf){
                        splf.delete();
                    } else if (splfDateTime.compareTo(lastSplfDateTime) > 0){
                        lastSplfDateTime = splfDateTime;
                        lastSplfName = splfName;
                        lastSplfJob  = splfJob;
                        lastSplfUsr  = splfUsr;                         
                        lastSplfJobNbr=splfJobNbr;
                        lastSplfNbr = splfNbr;
                    }
                }
            }
            //System.out.println("last SPLFInfo: job " + lastSplfJobNbr + "/"+ lastSplfUsr + "/" + lastSplfJob + " lastSplfName:" + lastSplfName + " lastSplfNbr:" + lastSplfNbr);
        }
        // clean up after we are done with the list
        splfList.close();
    }
    
    public void cpysplfWithQtemp(String splfName, boolean deleteTempFile) throws Exception{
        if(seqfile == null){
            seqfile = new SequentialFile();
            seqfile.setSystem(as400);
            seqfile.setPath("/QSYS.LIB/QGPL.LIB/QDDSSRC.FILE"); // for run following command use;
        }
         if(ddmJobNbr == null)
            ddmJobNbr = getDDMJobNbr();        
         file = splfName.substring(0, 4) + ddmJobNbr;        
        
        getLastSplfInfo(splfName, false);
        CPYSPLF(seqfile, lastSplfName, lastSplfJob, lastSplfUsr, lastSplfJobNbr, lastSplfNbr, true, "QTEMP", file, "M000000000", 201);
        seqfile.setPath(new QSYSObjectPathName("QTEMP", file, "M000000000", "MBR").getPath());
        setRecordFormat();
        if(toFile == null)
            readAll();
        else
            readAll(toFile);
        getLastSplfInfo(splfName, true);
    }
    
    public void readAll(){
        readAll(null);
    }
    
    public void readAll(File toFile){
        try {
            seqfile.open(AS400File.READ_ONLY, 100, AS400File.COMMIT_LOCK_LEVEL_NONE);
            Record dataRcd = seqfile.readNext();
            while (dataRcd != null) {
                if(toFile == null)
                    onRecord(dataRcd);
                else
                    onRecord(toFile, dataRcd);
                dataRcd = seqfile.readNext();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                seqfile.close();
                if(fileOpened){
                    writer_.close();
                    os.close();
                    fileOpened = false;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    public void onRecord(Record record) {
        System.out.println(getClass() + ":" + record);        
    }
    
    public void onRecord(File file, Record record) throws IOException{
        if(!fileOpened){
            os = new FileOutputStream(file, file.exists());
            writer_ = new PrintWriter(os, true);
            fileOpened = true;
        }
         writer_.println(record);
         writer_.flush();    
    }
    
    public void setRecordFormat() throws Exception{
        AS400FileRecordDescription recordDescription = new AS400FileRecordDescription(as400, seqfile.getPath());
        RecordFormat[] formats = recordDescription.retrieveRecordFormat();
        RecordFormat recordFormat = formats[0];
        seqfile.setRecordFormat(recordFormat);
    }
    
    public void CPYSPLF(SequentialFile seqFile, String splfName, String splfJob, String splfUsr, String splfJobNbr, int splfNbr , boolean includeIGCData, String toLibrary, String toFile, String toMbr, int toFileRecordLength){
         String cmdCRTPF = "CRTPF FILE(" 
                + toLibrary.toUpperCase().trim()  
                + "/" 
                + toFile.toUpperCase().trim()  
                + ") RCDLEN(" 
                + toFileRecordLength 
                + ") MBR(" 
                + toMbr.toUpperCase().trim() 
                + ") MAXMBRS(*NOMAX) SIZE(*NOMAX)";
        
        String cmdCPYSPLF = "CPYSPLF FILE(" 
                + splfName
                + ") TOFILE(" 
                + toLibrary.toUpperCase().trim() 
                + "/" 
                + toFile.toUpperCase().trim() 
                + ") JOB("
                + splfJobNbr 
                + "/" 
                + splfUsr 
                + "/" 
                + splfJob
                + ") SPLNBR(" 
                + splfNbr 
                + ") MBROPT(*REPLACE)";
        try {
            if(!chkObjExist(seqFile, toLibrary, toFile, "*FILE"))
                seqFile.runCommand(cmdCRTPF);    
             AS400Message[] messagelist = seqFile.runCommand(cmdCPYSPLF);
            for (int i = 0; i < messagelist.length; i++) {
                if (messagelist[i].getID() != null){                    
                    if(messagelist[i].getID().equalsIgnoreCase("CPF3485")){
                        System.out.println(cmdCPYSPLF +" Command successful"); 
                    } else
                        System.out.println(messagelist[i].getID() + " " + messagelist[i].getText());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public boolean chkObjExist(SequentialFile seqFile, String objLib, String objName, String objType) throws Exception {
        boolean objectExist = true;
        String cmdChkObj;
        cmdChkObj = "CHKOBJ OBJ(" + objLib + "/" + objName + ") OBJTYPE(" + objType + ")";
        AS400Message[] messagelist = seqFile.runCommand(cmdChkObj);
        for (int i = 0; i < messagelist.length; i++) {
            if (messagelist[i].getID() != null){
                System.out.println(messagelist[i].getID() + " " + messagelist[i].getText());
                if (messagelist[i].getID().equalsIgnoreCase("CPF9801")){
                    objectExist = false;
                }
            }
        }
        return objectExist;
    }
    
    public boolean runCmd(String commandString) {        
        boolean success = false;
        try {
            // Run the command.
            if (success = commandCall.run(commandString)){
                //System.out.println(commandString + " Command successful");
            }else{
                System.out.println(commandString + " Command failed");
                throw new AS400Exception(commandCall.getMessageList());
            }
        } catch (Exception e) {
            System.out.println("Command " + commandCall.getCommand() + " did not run");
            e.printStackTrace();
        }
        return success;
    }
    
    public static void main(String[] args) {
        try {
            AS400 as400 = new AS400("as400ip", "user", "userpass");
            AS400CommandOutput get400ACTJOB = new AS400CommandOutput(as400, new File("d:\\temp\\WRKACTJOB.TXT"));
            get400ACTJOB.runCmd("WRKACTJOB OUTPUT(*PRINT) RESET(*YES) SEQ(*CPUPCT)");
            Thread.sleep(5000);
            get400ACTJOB.runCmd("WRKACTJOB OUTPUT(*PRINT) SEQ(*CPUPCT)");
            get400ACTJOB.cpysplfWithQtemp("QPDSPAJB", true);
             get400ACTJOB.runCmd("WRKSYSSTS OUTPUT(*PRINT)");
            get400ACTJOB.cpysplfWithQtemp("QPDSPSTS", true);
         } catch (Exception e) {
            e.printStackTrace();
        }
    }    
}
  |  |