Web-сервисы: Сервис по загрузке поисковых фильтров — различия между версиями
| [досмотренная версия] | [досмотренная версия] |
| Строка 37: | Строка 37: | ||
====FilterBindingScriptService.asmx/GetFilterByGet==== | ====FilterBindingScriptService.asmx/GetFilterByGet==== | ||
public void GetFilterByGet(string jsNodes, string jsChanged, string callbackFunction) | public void GetFilterByGet(string jsNodes, string jsChanged, string callbackFunction) | ||
| + | |||
| + | ===Формат данных=== | ||
| + | ====Описание класса 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==== | ||
| + | <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_name" 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> | ||
| + | ====Пример JSON-запроса к сервису==== | ||
| + | <nowiki>callback: | ||
| + | jsonp1277981564108 | ||
| + | callbackFunction: | ||
| + | SuccessFilterBindingResponse | ||
| + | jsChanged: | ||
| + | {'changedNode':null} | ||
| + | jsNodes: | ||
| + | {'nodes':[{"AutoPostBack":"true","Name":"lstDepartFrom","Sort":"sd_ctfromname","Type":"DepartFrom","Value":"-10"},{"AutoPostBack":"true","Name":"lstCountry","ParentNodesString":"[lstDepartFrom]","Sort":"sd_cnname","Type":"Country","Value":"-10"},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstTourType","ParentNodesString":"[lstDepartFrom][lstCountry]","Sort":"sd_tourtypename","Type":"TourType","Value":""},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstResort","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType]","Sort":"sd_rsname","Type":"Resort","Value":""},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstCity","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort]","Sort":"sd_ctname","Type":"City","Value":"-10"},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstTour","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity]","Sort":"sd_tourcreated desc","Type":"Tour","Value":"-10"},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstHotel","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_hdname","Type":"Hotel","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstRoom","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"rm_name","Type":"Room","Value":"-10"},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstDuration","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_nights","Type":"Nights","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstCategory","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_hdstars","Type":"HotelStars","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstBoard","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"pn_name","Type":"Pansion","Value":"-10"},{"AutoPostBack":"false","Name":"dpTourDateFrom","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"td_date","Type":"CalendarTourDatesJs"}]}</nowiki> | ||
[[Category:Мастер-Web_Дополнительные_модули]] | [[Category:Мастер-Web_Дополнительные_модули]] | ||
Версия 14:37, 2 ноября 2011
Введение
Данный модуль предназначен для формирования поискового фильтра, т.е. позволяет при изменении какого-либо из критериев отбора туров определить возможные значения зависимых от него критериев.
Установка
Для установки Сервиса по загрузке поисковых фильтров нужно создать директорию FilterBinding в каталоге c:/inetpub/wwwroot/ (корневом каталоге IIS) и выложить туда распакованные файлы из архива mw-filterbinding-2007.2.XX.XXXX.zip. В управлении IIS необходимо создать виртуальный каталог для папки FilterBinding.
Создание виртуального каталога
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия:
- 1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel)
- 2. В открывшемся окне выбрать Администрирование (Administrative Tools)
- 3. Запустить Internet Information Services (IIS) Manager
- 4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties)
- 5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК»
Подключение к базе данных ПК «Мастер-Тур»
В файле web.config, расположенном в папке FilterBinding пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести).
Строка подключения к базе данных ПК «Мастер-Тур»:
<add key = "connectionString" value = "Data Source=ip-адрес сервера базы данных ПК Мастер-тур;Initial Catalog=название базы данных ПК Мастер-тур;User ID=логин пользователя ПК Мастер-тур;Password=пароль пользователя ПК Мастер-тур"/>
Настройка
После установки «Сервис по загрузке поисковых фильтров» доступен по адресу:
- http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingService.asmx (обращение к сервису происходит путем передачи ему SOAP-сообщения)
- http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingScriptService.asmx (обращение к сервису происходит из javascript с передачей параметров в формате JSON)
Подготовка данных
Сигнатура вызова
FilterBindingService.asmx /GetFilter
public HybridArrayDictionary<SchemeNodeBase, IList> GetFilter(List<SchemeNodeBase> nodes, SchemeNode changedNode, BindType bindType)
FilterBindingScriptService.asmx/GetFilterByGet
public void GetFilterByGet(string jsNodes, string jsChanged, string callbackFunction)
Формат данных
Описание класса 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
/// <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_name" 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>
Пример JSON-запроса к сервису
callback:
jsonp1277981564108
callbackFunction:
SuccessFilterBindingResponse
jsChanged:
{'changedNode':null}
jsNodes:
{'nodes':[{"AutoPostBack":"true","Name":"lstDepartFrom","Sort":"sd_ctfromname","Type":"DepartFrom","Value":"-10"},{"AutoPostBack":"true","Name":"lstCountry","ParentNodesString":"[lstDepartFrom]","Sort":"sd_cnname","Type":"Country","Value":"-10"},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstTourType","ParentNodesString":"[lstDepartFrom][lstCountry]","Sort":"sd_tourtypename","Type":"TourType","Value":""},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstResort","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType]","Sort":"sd_rsname","Type":"Resort","Value":""},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstCity","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort]","Sort":"sd_ctname","Type":"City","Value":"-10"},{"AutoPostBack":"true","FirstItem":"Все","Name":"lstTour","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity]","Sort":"sd_tourcreated desc","Type":"Tour","Value":"-10"},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstHotel","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_hdname","Type":"Hotel","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstRoom","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"rm_name","Type":"Room","Value":"-10"},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstDuration","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_nights","Type":"Nights","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstCategory","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"sd_hdstars","Type":"HotelStars","Value":""},{"AutoPostBack":"false","FirstItem":"Все","Name":"lstBoard","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"pn_name","Type":"Pansion","Value":"-10"},{"AutoPostBack":"false","Name":"dpTourDateFrom","ParentNodesString":"[lstDepartFrom][lstCountry][lstTourType][lstResort][lstCity][lstTour]","Sort":"td_date","Type":"CalendarTourDatesJs"}]}