Ваш образец в основном на правильном пути. Но ваш параметр ветки числовой. Поэтому вы должны использовать AS400ZonedDecimal вместо AS400Text:
AS400ZonedDecimal branchNbr = new AS400ZonedDecimal(7,0)
Программа RPG может быть упакована вместо зонирования. Ничего страшного, просто используйте вместо этого AS400PackedDecimal.
Когда вы создаете объект ProgramParameter, ваши требования к конструктору различаются в зависимости от того, являются ли они входными или выходными параметрами для вашей программы. Для входных параметров просто передайте результаты toBytes (). Нет необходимости указывать длину. Для параметров только для вывода просто передайте длину.
Я согласен с ответом Роберта о том, что какая-то информация отсутствует, но его предположения относительно выводимости кода ошибки кажутся верными. Однако я бы предположил, что параметр DCIndicator является входным, поскольку ваш образец передает значение. Для параметра кода ошибки после вызова программы вам нужно извлечь значение и что-то с ним сделать. Учитывая, что у вас уже есть, вот как будет работать вызов программы. Обратите внимание, что я указал имя библиотеки «MyLibrary». Это для примера. Вам нужно будет определить, в какой библиотеке находится ваш программный объект.
ProgramCall pgm = new ProgramCall(as400, QSYSObjectPathName.toPath("MyLibrary","ZM30000R","PGM"), parmList);
if (pgm.run() == true) {
String sErrorCode = (String) errorCodeTxt.toObject(parmList[3].getOutputData());
//Do something with your output data.
}
else {
AS400Message[] messageList = pgm.getMessageList();
for (int i=0; i<messageList.length; i++) {
String sMessageID = messageList[i].getID();
String sMessageText = messageList[i].getText();
//Do something with the error messages
}
}
Что еще нужно рассмотреть, это списки библиотек. Ожидает ли программа RPG, что определенные библиотеки будут в списке библиотек? Если это так, вы должны выполнить CommandCalls, чтобы добавить библиотеки в список библиотек перед вызовом программы.