Web-сервисы: Сервис по загрузке поисковых фильтров — различия между версиями

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
 
(не показаны 22 промежуточные версии 6 участников)
Строка 1: Строка 1:
 
==Введение==
 
==Введение==
 
Данный модуль предназначен для формирования поискового фильтра, т.е. позволяет при изменении какого-либо из критериев отбора туров определить возможные значения зависимых от него критериев.
 
Данный модуль предназначен для формирования поискового фильтра, т.е. позволяет при изменении какого-либо из критериев отбора туров определить возможные значения зависимых от него критериев.
 +
 +
===Ссылка на тестовый сервис===
 +
С работой тестового [http://demo.megatec.ru/DS_Filterbinding/FilterBindingService.asmx сервиса по загрузке поисковых фильтров] вы можете ознакомиться на нашем демо-сервере.
 +
 
==Установка==
 
==Установка==
 
Для установки Сервиса по загрузке поисковых фильтров нужно создать директорию FilterBinding в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS)  и выложить туда распакованные файлы из архива mw-filterbinding-2007.2.XX.XXXX.zip.
 
Для установки Сервиса по загрузке поисковых фильтров нужно создать директорию FilterBinding в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS)  и выложить туда распакованные файлы из архива mw-filterbinding-2007.2.XX.XXXX.zip.
Строка 24: Строка 28:
 
В файле web.config, расположенном в папке FilterBinding пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
 
В файле web.config, расположенном в папке FilterBinding пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
 
Строка подключения к базе данных ПК «Мастер-Тур»:<BR>
 
Строка подключения к базе данных ПК «Мастер-Тур»:<BR>
<add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>  
+
<add key = "connectionString" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-тур'';Initial Catalog=''название базы данных ПК Мастер-тур'';User ID=''логин пользователя ПК Мастер-тур'';Password=''пароль пользователя ПК Мастер-тур''"/>
 +
<br>При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка '''searchConnectionString''' веб-сервисом не поддерживается.
 +
 
 
==Настройка==
 
==Настройка==
 
После установки «Сервис по загрузке поисковых фильтров» доступен по адресу:
 
После установки «Сервис по загрузке поисковых фильтров» доступен по адресу:
* http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingService.asmx (обращение к сервису происходит путем передачи ему SOAP-сообщения)
+
* http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingService.asmx (обращение к сервису происходит путем передачи ему SOAP-сообщения)
* http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingScriptService.asmx (обращение к сервису происходит из javascript с передачей параметров в формате JSON)
+
 
 
==Подготовка данных==
 
==Подготовка данных==
 
===Сигнатура вызова===
 
===Сигнатура вызова===
 
====FilterBindingService.asmx /GetFilter====
 
====FilterBindingService.asmx /GetFilter====
 +
public HybridArrayDictionary<SchemeNodeBase, IList> GetFilter(List<SchemeNodeBase> nodes, SchemeNode changedNode, BindType bindType)
  
public HybridArrayDictionary<SchemeNodeBase, IList> GetFilter(List<SchemeNodeBase> nodes, SchemeNode changedNode, BindType bindType)
+
===Формат данных===
 +
====Описание класса HybridArrayDictionary====
 +
 
 +
<nowiki>/// <summary>
 +
    /// Класс, реализующий часть функционала Hashtable,
 +
    /// но не реализует интерфейс IDictionary,
 +
    /// что дает возможность передавать его в XMLSerializer
 +
    /// </summary>
 +
    /// <typeparam name="T1">Класс для ключа</typeparam>
 +
    /// <typeparam name="T2">Класс для значения</typeparam>
 +
    public class HybridArrayDictionary<T1, T2>
 +
    {
 +
        /// <summary>
 +
        /// Массив хранимых объектов
 +
        /// </summary>
 +
        [XmlElement("HybridArrayDictionary")]
 +
        public List<Pair<T1, T2>> Items { get; set; }
 +
 
 +
        public HybridArrayDictionary(){ }
 +
 
 +
        public HybridArrayDictionary(IDictionary<T1, T2> dict) { }
 +
 
 +
        public Dictionary<T1, T2> ToDictionary(){ }
 +
       
 +
        /// <summary>
 +
        /// Добавление элемента в коллекцию
 +
        /// </summary>
 +
        /// <param name="key">Ключ</param>
 +
        /// <param name="value">Значение</param>
 +
        public void Add(T1 key, T2 value) { }
 +
 
 +
        /// <summary>
 +
        /// Удаление элемента из коллекции
 +
        /// </summary>
 +
        /// <param name="key">Ключ удаляемого элемента</param>
 +
        public void Remove(T1 key) { }
 +
 
 +
        /// <summary>
 +
        /// Проверка наличия элемента с заданным ключом
 +
        /// </summary>
 +
        /// <param name="key">Ключ элемента</param>
 +
        /// <returns></returns>
 +
        public bool Contains(T1 key) { }
 +
 
 +
        /// <summary>
 +
        /// Доступ к значению элемента по ключу
 +
        /// </summary>
 +
        /// <param name="key">Ключ элемента</param>
 +
        /// <returns>Значение элемента</returns>
 +
        public T2 this[T1 key] { get; set; }
 +
 
 +
        /// <summary>
 +
        /// Список ключей элементов, имеющихся в коллекции
 +
        /// </summary>
 +
        [XmlIgnore]
 +
        public ArrayList Keys { get; }
 +
    }</nowiki>
 +
 
 +
====Описание класса SchemeNode====
 +
<font style="color:red">'''Внимание!'''</font> При передаче в запросе ''значения'' (Value) ''категории отеля'' (lstCategory) необходимо указывать '''Наименование''', а не ключ данной категории.
 +
 
 +
[[Файл: am_064.png|left|Полезная информация]] <BR>
 +
Сервис возвращает ключ тура из поля '''TO_Key''' (ключ рассчитанного тура). Если необходимо возвращать ключ тура из поля '''TO_TRKey''' (ключ тура из справочника), <br/> то в web.config нужно добавить настройку <add key="quotedDynamicPriceTour" value="false"/>.
 +
<BR>
 +
 
 +
<nowiki>/// <summary>
 +
    /// Класс, представляющий собой узел поискового фильтра
 +
    /// </summary>
 +
    public class SchemeNode : SchemeNodeBase
 +
    {
 +
        /// <summary>
 +
        /// Имя сборки, содержащей лоадеры
 +
        /// </summary>
 +
        public override string Assembly { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Вызывает ли изменение состояния узла отправку запроса на сервер
 +
        /// </summary>
 +
        public override bool AutoPostBack { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Коллекция узлов, зависящих от данного узла
 +
        /// </summary>
 +
        public override List<SchemeNodeBase> ChildNodes { get; }
 +
 
 +
        /// <summary>
 +
        /// Список узлов, зависящих от данного узла в формате [node1name][node2name]...[nodeNname]
 +
        /// </summary>
 +
        public string ChildNodesString { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Поле контрола, содержащее отображаемый текст
 +
        /// </summary>
 +
        public override string DataTextField { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Поле контрола, содержащее значение
 +
        /// </summary>
 +
        public override string DataValueField { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Текст отображаемый у первого элемента списка (например "Все")
 +
        /// </summary>
 +
        public override string FirstItem { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Имя контрола, который отображает содержимое узла
 +
        /// </summary>
 +
        public override string Name { get; set; }
 +
 
 +
        /// <summary>
 +
        /// Имя контрола, который расположен на уровень выше по иерархии зависимостей узлов
 +
        /// </summary>
 +
        public override string ParentControlName { get; set; }
 +
 
 +
        /// <summary>
 +
        /// Коллекция узлов, от которых зависит узел
 +
        /// </summary>
 +
        public override List<SchemeNodeBase> ParentNodes { get; }
 +
 
 +
        /// <summary>
 +
        /// Список узлов, от которых зависит узел в формате [node1name][node2name]...[nodeNname]
 +
        /// </summary>
 +
        public string ParentNodesString { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Поле БД, по которому будет произведена сортировка
 +
        /// </summary>
 +
        public override string Sort { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Коллекция пар [имя источника]-[ключ в БД источника]
 +
        /// </summary>
 +
        public override Hashtable SourceValues { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Тип узла поискового фильтра
 +
        /// Возможные значения: DepartFrom, Country, TourType, Resort,
 +
        /// City, Tour, Hotel, Room, Nights, HotelStars, Pansion,
 +
        /// CalendarTourDates, CalendarTourDatesJs
 +
        /// </summary>
 +
        public override string Type { get; set; }
 +
       
 +
        /// <summary>
 +
        /// Значение поискового узла
 +
        /// </summary>
 +
        public override string Value { get; set; }
 +
 
 +
        /// <summary>
 +
        /// Восстановление связей между узлами
 +
        /// (заполнение ParentNodes и ChildNodes на основании ParentNodesString и ChildNodesString)
 +
        /// </summary>
 +
        /// <param name="nodes"></param>
 +
        public void RestoreRelations(ICollection nodes)
 +
    }</nowiki>
 +
 
 +
====Описание перечисления BindType====
 +
<nowiki>/// <summary>
 +
    /// Тип бинда
 +
    /// </summary>
 +
    public enum BindType
 +
    {
 +
        //первая
 +
        First,
 +
        //контрол изменился
 +
        ControlChanged,
 +
        //загрузка по умолчанию
 +
        Default
 +
    } </nowiki>
 +
 
 +
==Работа в системе==
 +
===Пример вызова===
 +
====Пример SOAP-запроса к сервису====
 +
<nowiki><?xml version="1.0" encoding="utf-8"?>
 +
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 +
  <soap:Body>
 +
    <GetFilter xmlns="http://megatec.ru/">
 +
      <nodes>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstDepartFrom" Value="" Type="DepartFrom" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="sd_ctfromname" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString />
 +
          <ChildNodesString>[lstCountry]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCountry" Value="" Type="Country" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="sd_cnname" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom]</ParentNodesString>
 +
          <ChildNodesString>[lstTourType]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstTourType" Value="" Type="TourType" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_tourtypename" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry]</ParentNodesString>
 +
          <ChildNodesString>[lstResort]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstResort" Value="" Type="Resort" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_rsname" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType]</ParentNodesString>
 +
          <ChildNodesString>[lstCity]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCity" Value="" Type="City" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_ctname" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType][lstResort]</ParentNodesString>
 +
          <ChildNodesString>[lstTour]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstTour" Value="" Type="Tour" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_tourcreated desc" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity]</ParentNodesString>
 +
          <ChildNodesString>[lstHotel][lstDuration][lstCategory][lstBoard][lstCalendarTourDates]</ChildNodesString>
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstHotel" Value="" Type="Hotel" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_hdname" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
 +
          <ChildNodesString />
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstDuration" Value="" Type="Nights" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_nights" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
 +
          <ChildNodesString />
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCategory" Value="" Type="HotelStars" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_hdstars" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
 +
          <ChildNodesString />
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstBoard" Value="" Type="Pansion" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="pn_code" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
 +
          <ChildNodesString />
 +
        </SchemeNodeBase>
 +
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCalendarTourDates" Value="" Type="CalendarTourDates" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false"
 +
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="td_date" ParentControlName="" Bind="true">
 +
          <TypeDependencies />
 +
          <DefaultSelect xsi:type="DefaultSelection" />
 +
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
 +
          <ChildNodesString />
 +
        </SchemeNodeBase>
 +
      </nodes>
 +
      <bindType>Default</bindType>
 +
    </GetFilter>
 +
  </soap:Body>
 +
</soap:Envelope></nowiki>
  
====FilterBindingScriptService.asmx/GetFilterByGet====
 
public void GetFilterByGet(string jsNodes, string jsChanged, string callbackFunction)
 
  
[[Category:Мастер-Web_Дополнительные_модули]]
+
[[Category:Web-сервисы]]

Текущая версия на 11:29, 15 августа 2019

Введение

Данный модуль предназначен для формирования поискового фильтра, т.е. позволяет при изменении какого-либо из критериев отбора туров определить возможные значения зависимых от него критериев.

Ссылка на тестовый сервис

С работой тестового сервиса по загрузке поисковых фильтров вы можете ознакомиться на нашем демо-сервере.

Установка

Для установки Сервиса по загрузке поисковых фильтров нужно создать директорию FilterBinding в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS) и выложить туда распакованные файлы из архива mw-filterbinding-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки FilterBinding.

Создание виртуального каталога

По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:

  • 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)


865.PNG

  • 2. В открывшемся окне выбрать Администрирование (Administrative Tools)


866.PNG

  • 3. Запустить Internet Information Services (IIS) Manager


867.PNG

  • 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties)


868.PNG

  • 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК»


869.PNG

Подключение к базе данных ПК «Мастер-Тур»

В файле web.config, расположенном в папке FilterBinding пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). Строка подключения к базе данных ПК «Мастер-Тур»:
<add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка searchConnectionString веб-сервисом не поддерживается.

Настройка

После установки «Сервис по загрузке поисковых фильтров» доступен по адресу:

  • http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingService.asmx (обращение к сервису происходит путем передачи ему SOAP-сообщения)

Подготовка данных

Сигнатура вызова

FilterBindingService.asmx /GetFilter

public HybridArrayDictionary<SchemeNodeBase, IList> GetFilter(List<SchemeNodeBase> nodes, SchemeNode changedNode, BindType bindType)

Формат данных

Описание класса HybridArrayDictionary

/// <summary>
    /// Класс, реализующий часть функционала Hashtable, 
    /// но не реализует интерфейс IDictionary,
    /// что дает возможность передавать его в XMLSerializer
    /// </summary>
    /// <typeparam name="T1">Класс для ключа</typeparam>
    /// <typeparam name="T2">Класс для значения</typeparam>
    public class HybridArrayDictionary<T1, T2>
    {
        /// <summary>
        /// Массив хранимых объектов
        /// </summary>
        [XmlElement("HybridArrayDictionary")]
        public List<Pair<T1, T2>> Items { get; set; }

        public HybridArrayDictionary(){ }

        public HybridArrayDictionary(IDictionary<T1, T2> dict) { }

        public Dictionary<T1, T2> ToDictionary(){ }
        
        /// <summary>
        /// Добавление элемента в коллекцию
        /// </summary>
        /// <param name="key">Ключ</param>
        /// <param name="value">Значение</param>
        public void Add(T1 key, T2 value) { }

        /// <summary>
        /// Удаление элемента из коллекции
        /// </summary>
        /// <param name="key">Ключ удаляемого элемента</param>
        public void Remove(T1 key) { }

        /// <summary>
        /// Проверка наличия элемента с заданным ключом
        /// </summary>
        /// <param name="key">Ключ элемента</param>
        /// <returns></returns>
        public bool Contains(T1 key) { }

        /// <summary>
        /// Доступ к значению элемента по ключу
        /// </summary>
        /// <param name="key">Ключ элемента</param>
        /// <returns>Значение элемента</returns>
        public T2 this[T1 key] { get; set; }

        /// <summary>
        /// Список ключей элементов, имеющихся в коллекции
        /// </summary>
        [XmlIgnore]
        public ArrayList Keys { get; }
    }

Описание класса SchemeNode

Внимание! При передаче в запросе значения (Value) категории отеля (lstCategory) необходимо указывать Наименование, а не ключ данной категории.

Полезная информация


Сервис возвращает ключ тура из поля TO_Key (ключ рассчитанного тура). Если необходимо возвращать ключ тура из поля TO_TRKey (ключ тура из справочника), 
то в web.config нужно добавить настройку <add key="quotedDynamicPriceTour" value="false"/>.


/// <summary>
    /// Класс, представляющий собой узел поискового фильтра
    /// </summary>
    public class SchemeNode : SchemeNodeBase
    {
        /// <summary>
        /// Имя сборки, содержащей лоадеры
        /// </summary>
        public override string Assembly { get; set; }
        
        /// <summary>
        /// Вызывает ли изменение состояния узла отправку запроса на сервер
        /// </summary>
        public override bool AutoPostBack { get; set; }
        
        /// <summary>
        /// Коллекция узлов, зависящих от данного узла
        /// </summary>
        public override List<SchemeNodeBase> ChildNodes { get; }

        /// <summary>
        /// Список узлов, зависящих от данного узла в формате [node1name][node2name]...[nodeNname]
        /// </summary>
        public string ChildNodesString { get; set; }
        
        /// <summary>
        /// Поле контрола, содержащее отображаемый текст
        /// </summary>
        public override string DataTextField { get; set; }
        
        /// <summary>
        /// Поле контрола, содержащее значение
        /// </summary>
        public override string DataValueField { get; set; }
        
        /// <summary>
        /// Текст отображаемый у первого элемента списка (например "Все")
        /// </summary>
        public override string FirstItem { get; set; }
        
        /// <summary>
        /// Имя контрола, который отображает содержимое узла
        /// </summary>
        public override string Name { get; set; }

        /// <summary>
        /// Имя контрола, который расположен на уровень выше по иерархии зависимостей узлов
        /// </summary>
        public override string ParentControlName { get; set; }

        /// <summary>
        /// Коллекция узлов, от которых зависит узел
        /// </summary>
        public override List<SchemeNodeBase> ParentNodes { get; }

        /// <summary>
        /// Список узлов, от которых зависит узел в формате [node1name][node2name]...[nodeNname]
        /// </summary>
        public string ParentNodesString { get; set; }
        
        /// <summary>
        /// Поле БД, по которому будет произведена сортировка
        /// </summary>
        public override string Sort { get; set; }
        
        /// <summary>
        /// Коллекция пар [имя источника]-[ключ в БД источника]
        /// </summary>
        public override Hashtable SourceValues { get; set; }
        
        /// <summary>
        /// Тип узла поискового фильтра
        /// Возможные значения: DepartFrom, Country, TourType, Resort, 
        /// City, Tour, Hotel, Room, Nights, HotelStars, Pansion, 
        /// CalendarTourDates, CalendarTourDatesJs
        /// </summary>
        public override string Type { get; set; }
        
        /// <summary>
        /// Значение поискового узла
        /// </summary>
        public override string Value { get; set; }

        /// <summary>
        /// Восстановление связей между узлами 
        /// (заполнение ParentNodes и ChildNodes на основании ParentNodesString и ChildNodesString)
        /// </summary>
        /// <param name="nodes"></param>
        public void RestoreRelations(ICollection nodes)
    }

Описание перечисления BindType

/// <summary>
    /// Тип бинда
    /// </summary>
    public enum BindType
    {
        //первая
        First,
        //контрол изменился
        ControlChanged,
        //загрузка по умолчанию
        Default
    }	

Работа в системе

Пример вызова

Пример SOAP-запроса к сервису

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <GetFilter xmlns="http://megatec.ru/">
      <nodes>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstDepartFrom" Value="" Type="DepartFrom" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true" 
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="sd_ctfromname" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString />
          <ChildNodesString>[lstCountry]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCountry" Value="" Type="Country" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true" 
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="sd_cnname" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom]</ParentNodesString>
          <ChildNodesString>[lstTourType]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstTourType" Value="" Type="TourType" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true"
 DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_tourtypename" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry]</ParentNodesString>
          <ChildNodesString>[lstResort]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstResort" Value="" Type="Resort" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_rsname" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType]</ParentNodesString>
          <ChildNodesString>[lstCity]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCity" Value="" Type="City" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_ctname" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType][lstResort]</ParentNodesString>
          <ChildNodesString>[lstTour]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstTour" Value="" Type="Tour" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="true" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_tourcreated desc" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity]</ParentNodesString>
          <ChildNodesString>[lstHotel][lstDuration][lstCategory][lstBoard][lstCalendarTourDates]</ChildNodesString>
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstHotel" Value="" Type="Hotel" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_hdname" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
          <ChildNodesString />
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstDuration" Value="" Type="Nights" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_nights" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
          <ChildNodesString />
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCategory" Value="" Type="HotelStars" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="sd_hdstars" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
          <ChildNodesString />
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstBoard" Value="" Type="Pansion" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false" 
DataTextField="Name" DataValueField="SearchID" FirstItem="All" FirstItemContainer="" Sort="pn_code" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
          <ChildNodesString />
        </SchemeNodeBase>
        <SchemeNodeBase xsi:type="SchemeNode" Name="lstCalendarTourDates" Value="" Type="CalendarTourDates" Assembly="Megatec.MasterWeb.Loading" AutoPostBack="false" 
DataTextField="Name" DataValueField="SearchID" FirstItem="" FirstItemContainer="" Sort="td_date" ParentControlName="" Bind="true">
          <TypeDependencies />
          <DefaultSelect xsi:type="DefaultSelection" />
          <ParentNodesString>[lstDepartFrom][lstCountry][lstResort][lstCity][lstTourType][lstTour]</ParentNodesString>
          <ChildNodesString />
        </SchemeNodeBase>
      </nodes>
      <bindType>Default</bindType>
    </GetFilter>
  </soap:Body>
</soap:Envelope>