Я вызываю программу RPGIV из java, программа rpgiv возвращает мультизапись в качестве выходного параметра.Как вызвать программу RPGIV из java, которая возвращает более одной записи
Я попробовал следующее, чтобы вернуть все строки, возвращенные из rpgiv.
// Define Output Data Structure
AS400DataType[] outputData =
{
new AS400Text(20), // parentOperationsItemId;
new AS400Text(10), // parentOperationsItemType;
new AS400Text(10), // parentOperationsItemSubType;
new AS400Text(20), // parentKnownbyId;
new AS400Text(10), // parentInternalStatus;
new AS400Text(1), // parentLeafIndicator;
new AS400Text(20), // childOperationsItemId;
new AS400Text(10), // childOperationsItemType;
new AS400Text(10), // childOperationsItemSubType;
new AS400Text(20), // childKnownbyId;
new AS400Text(10), // childInternalStatus;
new AS400Text(1), // childLeafIndicator;
new AS400Text(10) // InternalStatus;
};
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)
};
// Set up the parameter list
ProgramParameter[] parameterList = new ProgramParameter[4];
parameterList[0] = new ProgramParameter(7); //ReturnStatus
parameterList[1] = new ProgramParameter(inputDataConverter.toBytes(dataInputInformation)); //Input
parameterList[2] = new ProgramParameter(inputDataControlConverter.toBytes(dataInputInformationControl)); //Control
parameterList[3] = new ProgramParameter(outputDataConverter2[0].getByteLength()*3); //Output
try
{
// Set the program name and parameter list.
program.setProgram(programName, parameterList);
// Run Function
if (program.run() != true)
{
// Calling Error
AS400Message[] messagelist = program.getMessageList();
for (int i = 0; i < messagelist.length; ++i)
{
output[0].ReturnStatus += messagelist[i] + "\n";
}
}
else
{
// Set the output
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]);
}
}
Это в выходном классе
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();
}
Я не знаю, как определить ParameterList [3], чтобы иметь возможность получить несколько строк назад или несколько структур данных. И как получить конкретный экземпляр выходного параметраList [3].
RPGIV код:
https://www.dropbox.com/s/a29wf1ft0f07sx1/functionCode.txt?dl=0
The * FetchedData ПРОИСХОДИТ встречается, (64) ИНЗ это выходные данные установить, что я хочу вернуться к Java.
Действительно ли программа RPG возвращает несколько записей? Возвращает ли результат набор результатов? Или это массив? Измените свой вопрос, включив список параметров RPG. –
@BuckCalabro Я добавил источник параметров rpgiv, FetchedData Occurs 64 - это то, что я пытаюсь вернуть. – Renier
Я также вижу, что он всегда возвращает только первую запись. – Renier