javascript から sharepoint 2007 サイトにアクセスする必要があります。基本的には search.asmx サービスを使用する必要がありますが、rest も jsonp もサポートしていないため、直接使用することはできません。
当初の計画は、rest と jsonp をサポートするカスタム wcf サービスを作成することでした。これは小さな仕事でしたが、Sharepoint の担当者にサービスを提供したとき、Sharepoint 2007 にインストールするためにサービスを wsp パッケージにパッケージ化して動作させることができた人はいませんでした。
この質問Rest Webservices for Sharepoint 2007によると、これはそれほど簡単ではない可能性があり、rest-typed url には httpmodule が必要です。サービスが SPContext にアクセスする必要があると思うので、スタンドアロン アプリとして実行するという別の考え方では不十分かもしれません。
アプリケーション ページを作成するだけで、コード ビハインド レンダリングをオーバーライドし、出力バッファをクリアし、MIME タイプを変更し、json シリアル化されたデータをレンダリングすることは可能でしょうか? したがって、URL はhttp://spsite/mycustomquery.aspx?q=mysearchtext&start=0&count=200&callback=mycallbackfunction
.
アプリケーション ページは少なくとも Get をサポートしますが、SPContext にアクセスできますか?
これが私が始めたwcfサービスです。
契約
[ServiceContract]
public interface IRestSPQuery
{
[OperationContract]
[WebGet(UriTemplate = "query/{queryText}/{startAt}/{count}?callback={callback}", ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "callback")]
ResultTable Query(string queryText, string startAt, string count, string callback);
}
実装
public ResultTable Query(string queryText, string startAt, string count, string callback)
{
//http://sharepointsite/_vit_bin/CustomQuery/RestSPQuery.svc/Query/searchtext/0/200?callback=myfunction
KeywordQuery keywordQuery = new KeywordQuery(SPContext.Current.Site);
keywordQuery.StartRow = startAt;
keywordQuery.RowLimit = count;
keywordQuery.SortList.Add("Rank", SortDirection.Descending);
keywordQuery.QueryText = queryText;
ResultTableCollection searchResults = keywordQuery.Execute();
ResultTable relevantResultsTable = searchResults[ResultType.RelevantResults];
return relevantResultsTable;
}