Как добавить префикс к имени свойства MQ RFH2 с помощью формы RPGLE API MQSETMP?

Столкнулся с проблемой. Мне нужно поместить сообщение RFH2 в MQ со свойством в заголовке. При использовании MQ API:

MQCRTMHMQSETMPMQPUT

тогда все работает, пока имя Property не содержит префикса (например, 'Property1') - WRKMQMQ показывает, что сообщение имеет формат RFH2, показывает, что оно содержит свойства, показывает правильный список свойств ...

Но как только я пытаюсь добавить префикс типа ctx.Property1, все перестает работать ... Однако ни одна из вышеперечисленных функций не возвращает ошибку. Сообщение будет помещено в MQ, но без заголовка RFH2 и без свойств.

Вопрос в том, как правильно указать префикс имени свойства?

1 ответ

В документации IBM отсутствует пара важных моментов:

  1. Если папка не указана явно, MQSETMP помещает свойство в папку usr (т.е. PropertyName полностью идентично usr.PropertyName). Но если папка указана явно, то свойство помещается в нем и ctx.PropertyName не равно usr.ctx.PropertyName (в первом случае, имущество находится в CTX папке снаружи от USR , во втором - in ctx внутри usr) - чтобы свойство помещалось в папку ctx внутри папки usr , необходимо явно указатьusr.ctx . Такое неописанное поведение может сбивать с толку.
  2. (и это главное) - нигде не описано, что MQPUT не создает заголовок сообщения RFH2, если папка usr пуста, даже если есть другая, не пустая папка вне usr . Но в то же время, если в папке usr есть другие свойства, будет создан заголовок, который будет содержать как папку usr, так и другие форлдеры за ее пределами.

Таким образом, в моем случае правильно называть свойство не ctx.PropertyName , а usr.ctx.PropertyName.

Следует иметь в виду (что также не отражено в документации), что если PropertyName или usr.PropertyName передается в MQSETMP , вызов MQINQMP после получения сообщения вернет имя свойства в форме PropertyName без usr . Но если в MQSETMP передается usr.ctx.PropertyName , то MQINQMP вернет полное имя usr.ctx.PropertyName.

Другие вопросы по тегам