Я могу вызвать программу вручную, используя эту команду:
CALL PGM(BMANMTHRD) PARM(('TESTPGM') (X'000000465F') ('P') (X'001F'))
Но я пытаюсь создать CLP, чтобы вызвать программу BMANMTHRD. Но я не могу передать шестнадцатеричные значения.
Я попытался вызвать его, используя переменные *DEC, и команда выглядела бы так:
CALL PGM(BMANMTHRD) PARM(('TESTPGM') (00465) ('P') (01))
Но это не сможет продолжаться успешно.
Похоже, вам действительно не нужны шестнадцатеричные значения в вашей программе CL; в вашем примере показаны упакованные десятичные числа в шестнадцатеричной записи, а в вашем примере CL также используются числовые значения:
Подробнее об упакованных десятичных значениях можно прочитать здесь: Упакованный десятичный формат
Важно иметь в виду следующее:
CL предполагает атрибуты по умолчанию *DEC (15 5) для числовых литералов и *CHAR (32) для строковых литералов.
Командная строка ничего не знает о переменных, поэтому вам нужно делать это в шестнадцатеричном порядке оттуда (а также SBMJOB и т. д.), что, кстати, является обычной практикой и нормально. Подробнее об этом можно прочитать здесь Программирование IBM CL
Закодируйте это следующим образом:
DCL VAR(&PARM1) TYPE(*DEC) LEN(9)
DCL VAR(&PARM3) TYPE(*DEC) LEN(3)
затем переместите свои значения в переменные, затем вызовите свою программу следующим образом (вам также не нужны круглые скобки вокруг ваших параметров)
CHGVAR &PARM1 VALUE(456)
CHGVAR &PARM3 VALUE(1)
CALL PGM(BMANMTHRD) PARM('TESTPGM' &PARM1 'P' &PARM3)
Это решит вашу проблему.
Всего наилучшего, AS/400 IBM i навсегда. (Не стесняйтесь принять это как ответ, если вам это нравится)