Web-сервисы: Сервис по загрузке поисковых фильтров — различия между версиями
[досмотренная версия] | [досмотренная версия] |
(Новая страница: «==Введение== Данный модуль предназначен для формирования поискового фильтра, т.е. позволяе...») |
Biryukov (обсуждение | вклад) |
||
(не показаны 23 промежуточные версии 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. | ||
Строка 6: | Строка 10: | ||
===Создание виртуального каталога=== | ===Создание виртуального каталога=== | ||
По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия: | По умолчанию корневым каталогом IIS является C:/Inetpub/wwwroot. Для создания виртуального каталога для приложения находящегося в этом каталоге нужно выполнить следующие действия: | ||
− | *1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel). | + | *1. Зайти в Пуск (Start) – Настройки (Settings) – Панель управления (Control Panel) |
+ | <BR> | ||
+ | [[Файл:865.PNG]]<BR> | ||
+ | *2. В открывшемся окне выбрать Администрирование (Administrative Tools) | ||
+ | <BR> | ||
+ | [[Файл:866.PNG]]<BR> | ||
+ | *3. Запустить Internet Information Services (IIS) Manager | ||
+ | <BR> | ||
+ | [[Файл:867.PNG]]<BR> | ||
+ | *4. В открывшемся дереве каталогов выбрать Web Sites – Default Web Site. В открывшемся списке найти папку, для которой нужно создать виртуальный каталог, кликнуть по ней правой кнопкой мыши и зайти в Свойства (Properties) | ||
+ | <BR> | ||
+ | [[Файл:868.PNG]]<BR> | ||
+ | *5. В открывшемся окне, в закладке Directory нужно нажать кнопку «Create», а затем кнопку «ОК» | ||
+ | <BR> | ||
+ | [[Файл:869.PNG]]<BR> | ||
+ | ===Подключение к базе данных ПК «Мастер-Тур»=== | ||
+ | В файле web.config, расположенном в папке FilterBinding пропишите необходимые параметры подключения (курсивом выделены значения, которые необходимо ввести). | ||
+ | Строка подключения к базе данных ПК «Мастер-Тур»:<BR> | ||
+ | <add key = "connectionString" value = "Data Source=''ip-адрес сервера базы данных ПК Мастер-тур'';Initial Catalog=''название базы данных ПК Мастер-тур'';User ID=''логин пользователя ПК Мастер-тур'';Password=''пароль пользователя ПК Мастер-тур''"/> | ||
+ | <br>При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка '''searchConnectionString''' веб-сервисом не поддерживается. | ||
+ | |||
+ | ==Настройка== | ||
+ | После установки «Сервис по загрузке поисковых фильтров» доступен по адресу: | ||
+ | * http://ip- адрес сервера Мастер-Веб/FilterBinding/FilterBindingService.asmx (обращение к сервису происходит путем передачи ему SOAP-сообщения) | ||
+ | |||
+ | ==Подготовка данных== | ||
+ | ===Сигнатура вызова=== | ||
+ | ====FilterBindingService.asmx /GetFilter==== | ||
+ | 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> | ||
+ | |||
− | [[Category: | + | [[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)
- 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=пароль пользователя ПК Мастер-тур"/>
При использовании репликации в строке подключения необходимо указать подключение к поисковой базе. Настройка 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>