В моей оркестровке у меня есть различные шаги, которые сопоставляют плоский файл с двумя промежуточными сообщениями и в конечном итоге записывают в SQL. Сначала я сделал это без обработки исключений, и он работал с допустимым входным файлом.
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌───────┐ ┌───────┐ ┌─────┐
│ PIPE │-►│ RCV │-►│ MAP_1 │-►│ MAP_2 │-►│ SQL │
└──────┘ └─────┘ └───────┘ └───────┘ └─────┘
Теперь я пытаюсь получить исключения для каждой области, где я использую карту. в начале оркестровки, после первой формы приема, я помещаю форму сообщения конструкции, которая инициализирует все сообщения в оркестровке. Я создаю блоки catch (каждый с формой Construct для моего fault_msg и формой отправки), порт FILE и build.
msg0 msg1 msg2
┌──────┐ ┌─────┐ ┌──────┬──┐ ┌───────┬──┐ ┌───────┬──┐ ┌─────┬──┐
│ PIPE │-►│ RCV │-►│ INIT │ex│-►│ MAP_1 │ex│-►│ MAP_2 │ex│-►│ SQL │ex│
└──────┘ └─────┘ └──────┴──┘ └───────┴──┘ └───────┴──┘ └─────┴──┘
VS ПРОДОЛЖАЕТ ИНИЦИАЛИЗИРОВАТЬ msg даже в блоках карты для сообщений, которые должны вводиться УЖЕ заполненными (или заполненными, или любым другим термином). Это почему?
EDIT: я выяснил, что BT хочет, чтобы каждое сообщение инициализировалось, даже если оно не используется во время обработки исключений. Поэтому мне нужно создать собственное сообщение об ошибке, которое будет возвращать пустые сообщения вместе с моим собственным сообщением об ошибке. Чтобы их инициализировать, конечно, мне нужно объявить в начале кода выражения следующим образом:
unusedMsg.Part = new System.Xml.XmlDocument();
Дело в том, что проблема все еще возникает для последнего сопоставления (sql):
┌──────────────────────┐
│ scope │
│ ┌────────────────┐ │
┌──────┐ │ │ MAP │ │ ┌────────┐
│ msg2 │ -►│ │ msg2 > sqlReq │ │ -► │ sqlReq │
└──────┘ │ └────────────────┘ │ └────────┘
├──────────────────────┤
│ ex │
│ ┌────────────────┐ │
│ │ construct │ │ ┌────────┐
│ │ msg2 > msgERR │ │ -► │ msgERR │
│ └────────────────┘ │ └────────┘
└──────────────────────┘
где он продолжает спрашивать это:
msg2.Part': часть сообщения не была инициализирована в операторе конструкции
и еще я точно знаю, что msg2 ИНИЦИАЛИЗИРУЕТСЯ, потому что у меня не было исключений, производящих его, и я вхожу в новую область. Как это возможно?