Example: Using LineDataRecordWriter to create a line data spooled file

Note: Read the Code example disclaimer for important legal information.

/////////////////////////////////////////////////////////////////////
//
// LineDataRecordWriter example.  This program uses the line data
// record writer access class to create a line data spooled file
// on the system.
//
// This source is an example of using the IBM Toolbox for Java
// "LineDataRecordWriter" class.
//
////////////////////////////////////////////////////////////////////////

import com.ibm.as400.access.*;
import java.io.*;
import java.math.BigDecimal;
   
public class TestA {

    //Private 
    private static int ccsid_           = -1;       // local ccsid variable
    private static AS400 system_        = null;     // the system
    private static SequentialFile file_ = null;     // the file

    /**
     **  Create the record field descriptions and record format.
     **/
    public static RecordFormat initializeRecordFormat()
    {
        // Create the record format. 
        RecordFormat qcustcdt = new RecordFormat();
        
        // Create record field descriptions for the record format.
        ZonedDecimalFieldDescription customerNumber =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6,0),
                                                           "CUSNUM");
        CharacterFieldDescription lastName =
                          new CharacterFieldDescription(new AS400Text(8, ccsid_, system_), "LSTNAM");

        CharacterFieldDescription initials =
                          new CharacterFieldDescription(new AS400Text(3, ccsid_, system_), "INIT");

        CharacterFieldDescription street =
                          new CharacterFieldDescription(new AS400Text(13, ccsid_, system_), "STREET");

        CharacterFieldDescription city =
                          new CharacterFieldDescription(new AS400Text(6, ccsid_, system_), "CITY");

        CharacterFieldDescription state =
                          new CharacterFieldDescription(new AS400Text(2, ccsid_, system_), "STATE");

        ZonedDecimalFieldDescription zipCode =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(5,0),
                                                           "ZIPCOD");
        ZonedDecimalFieldDescription creditLimit =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(4,0),
                                                           "CDTLMT");
        ZonedDecimalFieldDescription chargeCode =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(1,0),
                                                           "CHGCOD");
        ZonedDecimalFieldDescription balanceDue =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6,2),
                                                           "BALDUE");
        ZonedDecimalFieldDescription creditDue =
                          new ZonedDecimalFieldDescription(new AS400ZonedDecimal(6,2),
                                                           "CDTDUE");
      
        // assign constants from FieldDescription class
        int justLeft = FieldDescription.ALIGN_LEFT;
        int justRight = FieldDescription.ALIGN_RIGHT;
       
        // set the length and alignment attributes for writing the fields
        // The length indicates how many characters the field is, and
        // justification indicates where in the layout field the data
        // should be placed.
        customerNumber.setLayoutAttributes(10,justLeft);
        lastName.setLayoutAttributes(10,justLeft);
        initials.setLayoutAttributes(4,justLeft);
        street.setLayoutAttributes(15,justLeft);
        city.setLayoutAttributes(10,justLeft);
        state.setLayoutAttributes(3,justLeft);
        zipCode.setLayoutAttributes(5,justLeft);
        creditLimit.setLayoutAttributes(10,justRight);
        chargeCode.setLayoutAttributes(3,justRight);
        balanceDue.setLayoutAttributes(10,justRight);
        creditDue.setLayoutAttributes(10,justRight);

        // set the record format ID
        String d = "CUSTRECID";
        qcustcdt.setRecordFormatID(d);
        
        // if this were a variable field length record,
        // we would set the type and delimiter accordingly.  We
        // also would not have needed to specify layoutLength and
        // layoutAlignment values.
        // qcustcdt.setRecordFormatType(RecordFormat.VARIABLE_LAYOUT_LENGTH);
        // qcustcdt.setDelimiter(';');
 
        // set the record type to fixed field length 
        qcustcdt.setRecordFormatType(RecordFormat.FIXED_LAYOUT_LENGTH);
        
        // add the field descriptions to the record format.
        qcustcdt.addFieldDescription(customerNumber);
        qcustcdt.addFieldDescription(lastName);
        qcustcdt.addFieldDescription(initials);
        qcustcdt.addFieldDescription(street);
        qcustcdt.addFieldDescription(city);
        qcustcdt.addFieldDescription(state);
        qcustcdt.addFieldDescription(zipCode);
        qcustcdt.addFieldDescription(creditLimit);
        qcustcdt.addFieldDescription(chargeCode);
        qcustcdt.addFieldDescription(balanceDue);
        qcustcdt.addFieldDescription(creditDue);
        
        return qcustcdt;
    }


    /**
     ** Creates the actual record with data
     **/
    public static void createRecord(Record record)
    {
        record.setField("CUSNUM", new BigDecimal(323));
        record.setField("LSTNAM", "Johnson");
        record.setField("INIT", "B E");
        record.setField("STREET", "5234 Elm St");
        record.setField("CITY", "Rchstr");
        record.setField("STATE", "MN");
        record.setField("ZIPCOD", new BigDecimal(55901));
        record.setField("CDTLMT", new BigDecimal(5000.00));
        record.setField("CHGCOD", new BigDecimal(3));
        record.setField("BALDUE", new BigDecimal(25.00));
        record.setField("CDTDUE", new BigDecimal(0.00));
    }
   
   
    public static void main(String[]args) {
  
        // create an instance of the system
        system_ = new AS400("SYSTEMA", "JOE", "PGMR");      
  
        // create a ccsid
        ccsid_ = system_.getCcsid();
             
        // create output queue and specify spooled file data to be *LINE
        OutputQueue outQ = new OutputQueue(system_, "/QSYS.LIB/QUSRSYS.LIB/LDRW.OUTQ");
        PrintParameterList parms = new PrintParameterList();
        parms.setParameter(PrintObject.ATTR_PRTDEVTYPE, "*LINE");
        parms.setParameter(PrintObject.ATTR_PAGDFN,"/QSYS.LIB.QUSRSYS.LIB/LDRW.PAGDFN");
        parms.setParameter(PrintObject.ATTR_CONVERT_LINEDATA,"*YES");
        
      
        // initialize the record format for writing data 
        RecordFormat recfmt = initializeRecordFormat();
        
        // create a record and assign data to be printed...
        Record record = new Record(recfmt);
        createRecord(record);
       
        SpooledFileOutputStream os = null;
        
        try { 
            // create the output spooled file to hold the record data
            os = new SpooledFileOutputStream(system_, parms, null, outQ);   
        }
        
        if (os != null) { // Output stream was created successfully!
            LineDataRecordWriter ldw;
            try {
                // create the line data record writer
                ldw = new LineDataRecordWriter(os, ccsid_, system_);
                
                // write the record of data
                ldw.writeRecord(record);
            }
            catch (IOException e) {
                System.out.println("Error occurred writing record data");
            }
                
            // close the output stream (spooled file)
            try {
                os.close();
            }
            catch (Exception e) {
                System.out.println("Error occurred closing output stream.");
            }
        }
    }
}