Я довольно недавно начал работать с 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;