Custom records are useful for passing group items to existing COBOL programs. You use then in conjunction with the .cobcall mechanism.
The CustomRecord interface is:
package com.microfocus.cobol.lang;
public interface CustomRecord
{
public Object[] getParameters();
public void setParameters(Object[] parms);
}
The data item customerDetails can be defined as follows:
01 customerDetails. 03 customerName pic x(30). 03 customerAddress pic x(30). 03 customerRef pic 9(6).
A Java implementation could be:
import com.microfocus.cobol.lang.*;
import java.text.*;
public class RecordData implements
com.microfocus.cobol.lang.CustomRecord
{
private String customerName;
private StringBuffer customerAddress;
private int customerRef;
RecordData(String name, String address, int ref)
{
customerName = name;
customerAddress = new StringBuffer(address);
customerRef = ref;
}
public String getCustomerName()
{
return this.customerName;
}
public String getCustomerAddress()
{
return this.customerAddress.toString();
}
public int getCustomerRef()
{
return this.customerRef;
}
public Object[] getParameters()
{
String strCustomerRef =
Integer.toString(this.customerRef);
while(strCustomerRef.length() < 6)
{
strCustomerRef = "0"+strCustomerRef;
}
customerAddress.setLength(30);
/* must ensure length is right! */
customerAddress.ensureCapacity(30);
return new ParameterList()
.add(new Pointer(this.customerName,30))
.add(this.customerAddress)
.add(strCustomerRef.getBytes())
.getArguments();
}
public void setParameters(Object[] parms)
{
Pointer ptr = (Pointer)parms[0];
this.customerName = ptr.toString();
this.customerAddress = (StringBuffer)parms[1];
byte[] byteCustomerRef = (byte[])parms[2];
this.customerRef =
Integer.parseInt(new String(byteCustomerRef));
}
public String toString()
{
return "Customer Name :
"+this.customerName+"\n"+ "Customer Address :
"+this.customerAddress+"\n"+
"Customer Ref : "+this.customerRef;
}
}
and
package com.microfocus.cobol.lang;
public interface CustomRecord
{
public Object[] getParameters();
public void setParameters(Object[] parms);
}