Справочник IBM Integration Bus ESQL для OutputRoot не работает

Я довольно недавно начал работать с IBM Integration Bus v10.0.0.9, используя их документацию о том, как все это работает, а также синтаксис ESQL и советы.

Согласно они рекомендуют использовать ссылки для доступа к деревьям сообщений, чтобы не совершать так много переходов. Они даже показывают, как использовать ссылочные переменные здесь для дерева сообщений OutputRoot.

Зная это, я пытался сделать в ComputeNode следующее:

-- ComputeNode MRM Writer
DECLARE refPointer REFERENCE TO OutputRoot.MRM.PARENT_NODE;
SET refPointer.CHILD_NODE = 'Some value';

Теоретически это должно быть эквивалентно:

SET OutputRoot.MRM.PARENT_NODE.CHILD_NODE = 'Some value';

Однако при попытке достичь значения на следующем ComputeNode я обнаружил, что оно равно нулю:

-- ComputeNode MRM Reader
DECLARE someValue CHARACTER InputRoot.MRM.PARENT_NODE.CHILD_NODE;

Я попытался использовать CREATE LASTCHILD OF OutputRoot.MRM DOMAIN 'MRM' NAME 'PARENT_NODE';, а затем попытался использовать ссылку, но все еще дает нулевое значение. И я знаю, что проблема заключается в использовании ссылки, когда я использую полный путь, значение присутствует. Я также знаю, что ссылки действительно работают, потому что я использую ссылочную переменную для получения значений из дерева сообщений InputRoot.

Что я могу сделать, чтобы справочник работал? Или их нельзя использовать для некоторых доменов, и если да, то для каких?

РЕДАКТИРОВАТЬ

Я заметил, что эта проблема является общей и возникает даже при использовании обычной ссылки на OutputRoot.XMLNSC. Так что проблема не в домене MRM, а в самих ссылках. Я также заметил, что если я устанавливаю среду vatriable для ссылки, а затем устанавливаю OutputRoot.MRM на значение переменной среды, это, похоже, работает, но это довольно излишне, и по какой-то причине иногда это не удается.

-- Redundant workaround:
SET Environment.Variables.Output = refPointer;
SET OutputRoot.MRM.PARENT_NODE = Environment.Variables.Output;
SET Environment.Variables.Output = NULL;

person jmhg92    schedule 28.12.2018    source источник
comment
Установлен ли режим вашего первого вычислительного узла на сообщение? Вы можете воспользоваться User Trace, чтобы лучше понять, что происходит.   -  person Daniel Steinmann    schedule 02.01.2019
comment
Вы не должны использовать OutputRoot.MRM. Во всех поддерживаемых в настоящее время версиях IIB домен DFDL является гораздо лучшей (и более простой) альтернативой домену MRM.   -  person kimbert    schedule 02.01.2019
comment
@DanielSteinmann Установлен режим Сообщение. Как я уже сказал, проблема возникает только тогда, когда я использую ссылки вместо прямого вызова всего поля дерева.   -  person jmhg92    schedule 07.01.2019
comment
@kimbert Я не могу изменить структуру, которая используется прямо сейчас, поэтому я должен сохранить дизайн OutputRoot.MRM. Я просто пытаюсь оптимизировать вычислительный код, поскольку в нем более 30 строк используют полный путь.   -  person jmhg92    schedule 07.01.2019
comment
вам необходимо создать дочернее свойство перед назначением: CCREATE FIELD OutputRoot.MRM.PARENT_NODE TYPE NameValue VALUE 'This is my TestCase';   -  person Bruno    schedule 07.01.2019
comment
Если вы хотите увидеть, что происходит в вашем коде, запустите трассировку, используя следующие команды mqsichangetrace mqsireadlog mqsiformatlog. Кстати, вы начинаете использовать -l debug и останавливаете его с помощью -l none, также используйте флаг -r для сброса, чтобы у вас не было много старых вещей, которые могут быть там.   -  person TJA    schedule 08.01.2019
comment
@Bruno Это сработало! Похоже, что ссылки на самом деле не работают, как с обычной командой SET с полным путем.   -  person jmhg92    schedule 15.01.2019
comment
@ jmhg92 здорово! оцените мой комментарий к другому с тем же вопросом.   -  person Bruno    schedule 16.01.2019
comment
@Bruno Извините, но похоже, что у меня либо недостаточно репутации, чтобы проголосовать за комментарий, либо я просто не знаю, как его оценить (я везде искал, но не могу найти способ сделать это). Если бы вы могли сформулировать это как ответ, я могу отметить его как правильный ответ.   -  person jmhg92    schedule 19.01.2019


Ответы (1)


Перед назначением вам необходимо создать дочернее свойство:

СОЗДАТЬ ПОЛЕ OutputRoot.MRM.PARENT_NODE TYPE NameValue VALUE 'Это мой TestCase';

person Bruno    schedule 19.01.2019