Передача аргумента, полученного по ComConnector, на сервер

Программирование - Теория программирования

С точки зрения инкапсуляции, данные, переданные по COMConnector, следует обрабатывать в базе-приемнике. И тут возникает проблема, малопонятная для новичка из-за сложностей в отладке модуля внешнего соединения. Аргументы попросту не передаются в серверные модули.

Ситуация: Не всегда для обеспечения взаимодействия между двумя базами удобно использовать универсальный обмен данными. Бывают случаи, когда проще создать нужные элементы в базе-приемнике, написав специализированный код. К тому же такой механизм менее затратен. 

Подсоединяемся к другой базе через ComConnector и вызываем написанную нами экспортную функцию этой базы, передавая ей некий сложносочиненный аргумент.  К примеру - структуру, состоящую из строковых и числовых элементов. 

Суть проблемы: пытаемся из модуля, помеченного для внешнего соединения, вызвать функцию серверного модуля, передавая ей то, что получили по ComConnector. 

А оно не передается, ибо внезапно оказалось мутабельно. 

Механизм возникновения проблемы:  Все просто, в базе-приемнике это уже не структура, а COMОбъект.

Решение проблемы: Нам нужно вновь сделать это структурой. Благо использовать методы и свойства структуры по отношению к COMОбъекту мы можем.

// Аргумент - ComObject вида Структура, содержащая значения элементарных типов, любой глубины вложенности
// или структура, содержащая элементы типа ComObject при рекурсивном вызове
// Результат - аналогичная Структура, содержащая значения элементарных типов.
Функция ПереинициализироватьСтруктуру(ИсхСтруктура)
   НовСтруктура = Новый Структура;
   Для Каждого Ключ из ИсхСтруктура Цикл
      Если ТипЗнч(Ключ.Значение) = Тип("COMОбъект") Тогда
         НовСтруктура.Вставить(Ключ.Ключ, ПереинициализироватьСтруктуру(Ключ.Значение));
      Иначе
         НовСтруктура.Вставить(Ключ.Ключ, Ключ.Значение);
      КонецЕсли;
   КонецЦикла;
   Возврат НовСтруктура;
КонецФункции 

 PS приведенный механизм работает только на структурах. А вот как бы добавить функционал вложения в структуры таблиц значений? Собственно загвоздка заключается в том, чтобы выяснить, что из себя представляет очередной вложенный COMОбъект - структуру или ТЗ.

Пока кроме как через попытка-исключение с применением какого-нибудь специфичного для ТЗ метода идей нет... Впрочем, никто не мешает использовать структуры вместо ТЗ, т.к. ТЗ в структуру переводится достаточно просто. 

Скачать файлы

Наименование Файл Версия Размер
Статья в PDF
.pdf 369,22Kb
20.03.13
7
.pdf 369,22Kb 7 Скачать

См. также

Комментарии
1. Vladimir A (wowik) 276 27.03.13 10:52 Сейчас в теме
Ничего не понял, хотя и не новичок во всей этой ерунде с COM.
2. Евгений К (rar_xxx) 21 11.03.14 12:08 Сейчас в теме
Я через массивы передаю, муторно, индекс перепутаешь ошибка будет, но у меня мало что через com надо передавать, переживу ).
Оставьте свое сообщение