I call the RPGIV program from java, the rpgiv program returns a multi-record as an output parameter.
I tried the following to return all lines returned from rpgiv.
AS400DataType[] outputData =
{
new AS400Text(20),
new AS400Text(10),
new AS400Text(10),
new AS400Text(20),
new AS400Text(10),
new AS400Text(1),
new AS400Text(20),
new AS400Text(10),
new AS400Text(10),
new AS400Text(20),
new AS400Text(10),
new AS400Text(1),
new AS400Text(10)
};
AS400Structure [] outputDataConverter2 = new AS400Structure[3];
outputDataConverter2[0] = new AS400Structure(outputData);
outputDataConverter2[1] = new AS400Structure(outputData);
outputDataConverter2[2] = new AS400Structure(outputData);
Object[] dataInputInformation =
{
sSqlSelect,
sFetchDirection,
sOperationsItemId,
sparentOperationsItemTypeList,
sparentOperationsItemSubTpeList,
sparentInternalStatusList,
schildOperationsItemType,
schildOperationsItemSubTpeList,
schildInternalStatusList,
sLinkStatus
};
Object[] dataInputInformationControl =
{
sPosition,
new BigDecimal(sRowsFetched)
};
ProgramParameter[] parameterList = new ProgramParameter[4];
parameterList[0] = new ProgramParameter(7);
parameterList[1] = new ProgramParameter(inputDataConverter.toBytes(dataInputInformation));
parameterList[2] = new ProgramParameter(inputDataControlConverter.toBytes(dataInputInformationControl));
parameterList[3] = new ProgramParameter(outputDataConverter2[0].getByteLength()*3);
try
{
program.setProgram(programName, parameterList);
if (program.run() != true)
{
AS400Message[] messagelist = program.getMessageList();
for (int i = 0; i < messagelist.length; ++i)
{
output[0].ReturnStatus += messagelist[i] + "\n";
}
}
else
{
output[0] = new GetPlannedRoute();
output[1] = new GetPlannedRoute();
output[2] = new GetPlannedRoute();
output[0].SetOutput(parameterList, outputDataConverter2[0]);
output[1].SetOutput(parameterList, outputDataConverter2[1]);
output[2].SetOutput(parameterList, outputDataConverter2[2]);
}
}
This is in the output class.
public void SetOutput(ProgramParameter[] parameterList, AS400Structure outputPlannedRouteConverter)
{
ReturnStatus = P6Entity.CallingRPGFunction.ConvertReturnStatus(parameterList[0]);
Object[] outputData = (Object[]) outputPlannedRouteConverter.toObject(parameterList[3].getOutputData());
parentOperationsItemId = ((String) outputData[0]).trim();
parentOperationsItemType = ((String) outputData[1]).trim();
parentOperationsItemSubType = ((String) outputData[2]).trim();
parentKnownbyId = ((String) outputData[3]).trim();
parentInternalStatus = ((String) outputData[4]).trim();
parentLeafIndicator = ((String) outputData[5]).trim();
childOperationsItemId = ((String) outputData[6]).trim();
childOperationsItemType = ((String) outputData[7]).trim();
childOperationsItemSubType = ((String) outputData[8]).trim();
childKnownbyId = ((String) outputData[9]).trim();
childInternalStatus = ((String) outputData[10]).trim();
childLeafIndicator = ((String) outputData[11]).trim();
InternalStatus = ((String) outputData[12]).trim();
}
I am not sure how to define the List parameter [3] to be able to get a few rows back or several data structures. And how to get a specific instance of the output parameter List [3].
RPGIV Code:
https://www.dropbox.com/s/a29wf1ft0f07sx1/functionCode.txt?dl=0
* FetchedData Occents OCCURS (64) INZ is a set of output that I want to return to java.