Я начал совсем недавно работать с 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.
Что я могу сделать, чтобы ссылка работала?Или нельзя использовать их для некоторых доменов, и если да, то для каких?
EDIT
Я заметил, что эта проблема является общей и возникает даже при обычной ссылке 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;