Using Custom Records to Pass Group Items

Restriction: This applies to native code only.

The CustomRecord interface in com.microfocus.cobol.lang enables you to pass group items to a legacy COBOL program, when using cobCall() and cobrcall().

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 
    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 = 
      while(strCustomerRef.length() <  6)  
         strCustomerRef = "0"+strCustomerRef;  
		          /* must ensure length is right! */  
      return new ParameterList()  
        .add(new Pointer(this.customerName,30))  
    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;  

The Java program could call the COBOL program as follows:

cobcall("RecordDemo",new ParameterList().add(
              new RecordData(myname, myaddress, myref)));