Страницы с тегами : ajax
Поиск в приложениях SharePoint. Часть 3.
В SharePoint 2013 появился REST веб-сервис, который позволяет делать поисковые запросы из JavaScript. В SharePoint 2010 есть только search.asmx, который требует генерировать и парсить большой объём XML (в лучших традициях SharePoint).Чтобы упростить жизнь разработчику клиентских компонентов я написал REST веб-сервис для SharePoint 2010.
Реализация
За основу взял метод, который описывал ранее - Javascript-enabled SharePoint WCF services.
Контракт у сервиса очень простой:
[ServiceContract] public interface ISearch { [OperationContract] [WebGet(BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] Stream Query(string q, int top, int skip, string select, string orderBy, bool includeRefiners, string refiners); }
Параметры вызова:
- q – текст запроса (обязательно).
- top – количество результатов.
- skip – с какой позиции в выборке отдавать результаты.
- select – через запятую названия managed properties в результатах.
- orderBy – через запятую названия managed properties по которым сортировать результат, после имени можно указать desc для сортировки по убыванию.
- includeRefiners – true или false, возвращать результаты уточнений или нет.
- refiners - через запятую названия managed properties для формирования уточнений.
Реализация:
public System.IO.Stream Query(string q, int top, int skip, string select, string orderBy, bool includeRefiners, string r) { using (new SPMonitoredScope("Execute Query Method")) { var site = SPContext.Current.Site; var result = GetSearchResults(site, q, top, skip, select, orderBy, includeRefiners, r); return ToJson(result); } }
Метод GetSearchResults довольно простой, он передает параметры запроса в объект KeywordQuery и получает результат.
private static ResultTableCollection GetSearchResults(SPSite site, string q, int top, int skip, string select, string orderBy, bool includeRefiners, string r) { var query = new KeywordQuery(site); query.QueryText = q; query.StartRow = skip; if (top > 0) { query.RowLimit = top; }
SharePoint и Ajax
Как вы думаете, сколько способов сделать ajax запрос в SharePoint? А без jQuery и дополнительных библиотек? Нет, XMLHttpRequest руками писать на надо.
Sys.Net.WebRequest \ Sys.Net.WebRequestExecutor
Эти классы находятся в библиотеке MicrosoftAjax. Она подгружается на каждой странице SharePoint и вы можете использовать её на своих страницах.
Класс Sys.Net.WebRequest описывает параметры запроса, а Sys.Net.WebRequestExecutor, вернее его наследник, выполняет запрос с указанными параметрами. Можно создавать свои реализации WebRequestExecutor, например для тестирования или для проксирования запросов.
Недостаток этих классов в чрезмерной многословности.
var request = new Sys.Net.WebRequest(); request.set_url(url); request.set_httpVerb("GET"); request.add_completed(function(executor, eventArgs) { if(executor. get_responseAvailable()) { //do stuff } });