Office Graph からドキュメントの取得

少し前ですが、ブログに「SharePoint の「最近使ったドキュメント」の取得」という内容を投稿しました。これと、その前に投稿した「Office Graph とグラフ クエリ言語と REST API と」を組み合わせて、Office Delve で表示する内容と同様のものをスクリプト エディター Web パーツを利用して SharePoint サイト上に表示します。
ハッキリ言って、検索で投げるクエリーさえわかれば余裕です。

スクリプト エディター Web パーツを利用して SharePoint サイト上に JSON 形式で取得して表示しましょう。

  1. (必要に応じて) SharePoint サイトを作成
  2. ページの編集画面から、[挿入] – [メディアおよびコンテンツ] – [スクリプト エディター] でスクリプト エディター Web パーツを挿入
    image_thumb1
  3. Web パーツの編集から、[タイトル] に「最近使ったドキュメント」、[枠の種類] に「タイトルのみ」 を選択後に Web パーツが表示された箇所に表示された [スニペットを編集] をクリックし、下記に示すコードを入力して、SharePoint ページを保存したら完了です
    image_thumb3
    delve_parts_thumb[2]

今回のコードのポイントは以下の通りです。

  • テナント名は、各自のテナント名に変更してください。
  • 検索条件は、SharePoint 用アプリの「Mavention Office Graph Query Tester」をインストールして利用すれば、すぐに判明します
  • 検索パラメータ RowLimit で、取得する件数を制限しています
  • JSON 形式で取得すると、各プロパティは検索結果の PrimaryQueryResult.RelevantResults.Table.Rows に各ドキュメントが、PrimaryQueryResult.RelevantResults.Table.Rows[n].Cells に各ドキュメントの管理プロパティが管理プロパティごとに入っているので、管理プロパティ名に応じて利用しています
  • JavaScript ライブラリはパフォーマンス向上を目的に CDN から取得しています

実際のコードを以下で紹介します。

<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js”>
</script>
<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js”>
</script>
<script type=”text/javascript”>
function addFigure(str) {
    var num = new String(str).replace(/,/g, “”);
    while(num != (num = num.replace(/^(-?\d+)(\d{3})/, “$1,$2”)));
    return num;
}

jQuery.ajax({
  url: “https://テナント名.sharepoint.com/_api/search/query?Querytext='(*) AND (FileExtension:doc OR FileExtension:docx OR FileExtension:ppt OR FileExtension:pptx OR FileExtension:xls OR FileExtension:xlsx OR FileExtension:pdf)’&Properties=’TitleBasedSummaries:true,GraphQuery:AND(ACTOR(ME\\,action\\:1021)\\,ACTOR(ME\\,OR(action\\:1021\\,action\\:1036\\,action\\:1037\\,action\\:1039))),GraphRankingModel:action\\:1021\\,weight\\:1\\,edgeFunc\\:weight\\,mergeFunc\\:max’&SelectProperties=’Author,AuthorOwsUser,DocId,DocumentPreviewMetadata,Edges,EditorOwsUser,FileExtension,FileType,HitHighlightedProperties,HitHighlightedSummary,LastModifiedTime,LikeCountLifetime,ListID,ListItemID,OriginalPath,Path,Rank,SPWebUrl,SecondaryFileExtension,ServerRedirectedURL,SiteTitle,Title,ViewCountLifetime,ViewsRecent,siteID,uniqueID,webID’&RankingModelId=’0c77ded8-c3ef-466d-929d-905670ea1d72’&RowLimit=10&StartRow=0&ClientType=’PulseWeb’&BypassResultTypes=true”,
  type: “GET”,
  headers: {“Accept”: “application/json; odata=nometadata”},
  cache:false,               
  success: function(data){
    var items = [];

    $(data.PrimaryQueryResult.RelevantResults.Table.Rows).each(function (i, e) {
      var o = {};
     
      $(e.Cells).each(function (ii, ee) {
        if (ee.Key == ‘Title’)
          o.title = ee.Value;
        else if (ee.Key == ‘Author’)
          o.author = ee.Value;
        else if (ee.Key == ‘Path’)
          o.path = ee.Value;
        else if (ee.Key == ‘FileExtension’)
          o.fileextension = ee.Value;
        else if (ee.Key == ‘FileType’)
          o.filetype = ee.Value;
        else if (ee.Key == ‘HitHighlightedSummary’)
          o.hithighlightedsummary = ee.Value;
        else if (ee.Key == ‘LastModifiedTime’)
          o.lastmodifiedtime = ee.Value;
        else if (ee.Key == ‘ServerRedirectedURL’)
          o.serverredirectedurl = ee.Value;
        else if (ee.Key == ‘SiteTitle’)
          o.sitetitle = ee.Value;
        else if (ee.Key == ‘Size’)
          o.size = ee.Value;
        else if (ee.Key == ‘ViewCountLifetime’) {
          if (ee.Value == null)
            o.viewcountlifetime = “0”;
          else
            o.viewcountlifetime = ee.Value;
          o.viewcountlifetime = addFigure(o.viewcountlifetime);
        }
        else if (ee.Key == ‘ViewsRecent’) {
          if (ee.Value == null)
            o.viewsrecent = “0”;
          else
            o.viewsrecent = ee.Value;
          o.viewsrecent = addFigure(o.viewsrecent);
        }
      });

      if (o.filetype != null)
        o.iconurl = ‘https://テナント名.sharepoint.com/_layouts/images/ic’ + o.filetype + ‘.gif’;
      else
        o.iconurl = ‘https://テナント名.sharepoint.com/_layouts/images/ic’ + o.fileextension + ‘.gif’;

      items.push(‘<img src=”‘ + o.iconurl + ‘”> ‘ +
      ‘<a href=”‘ + o.path + ‘”>’ + o.title + ‘</a> (直近 ‘ + o.viewsrecent + ‘ | 合計 ‘ + o.viewcountlifetime + ‘)</p>’);
    })
   
    $(“.delveDocsInfo”).html(items.join(”))
  }
});
</script>
<div class=”delveDocsInfo”></div>

前回の投稿「SharePoint の「最近使ったドキュメント」の取得」と同様に、戻ってくる情報さえわかれば console.log(data); で出力して、Internet Explorer の開発者モードで確認すれば OK です。
image_thumb[3]

この方法さえわかってしまえば、検索条件で絞りこんで、PowerPoint ドキュメントだけを表示したり、特定の SharePoint サイトのドキュメントだけを表示することが可能であるなど、利用用途はかなり広がります。
ドキュメントをどんどん Office 365 (SharePoint Online、Exchange Online、Yammer、OneDrive for Business など) に置きましょう。そうするだけで、機械学習によって、今、あなたが見るべきドキュメントが、あなたの元に届きます!

SharePoint の「最近使ったドキュメント」の取得

ノルウェーの Mikael Svenson さんが、ブログで面白い投稿を行っているので、少し深堀りしてみました。簡単に書くと、SharePoint Online 上の OneDrive for Business ライブラリ上に表示される「最近使ったドキュメント」 (自分自身が最近参照した Office ドキュメント) をどうやって API で取得するか、というものです。ここには、以下の URL で取得できる、と記載があり、実際に試したところ、確かにデータが取得できました。

https://<テナント名&gt;.sharepoint.com/_api/me/getrecentdocs

注意 : 私自身が探した限りでは、TechNet ライブラリや MSDN ライブラリには記載が見られなかったので、いつでも利用できるとは思わない方がいいです。サポートへ問い合わせるも難しいので、自己責任の範囲で、ちょっとした確認に留めた方がいいかもしれません。

JSON 形式か XML 形式で取得できるということなので、スクリプト エディター Web パーツを利用して SharePoint サイト上に JSON 形式で取得して表示しましょう。

  1. (必要に応じて) SharePoint サイトを作成
  2. ページの編集画面から、[挿入] – [メディアおよびコンテンツ] – [スクリプト エディター] でスクリプト エディター Web パーツを挿入
    image
  3. Web パーツの編集から、[タイトル] に「最近使ったドキュメント」、[枠の種類] に「タイトルのみ」 を選択後に Web パーツが表示された箇所に表示された [スニペットを編集] をクリックし、下記に示すコードを入力して、SharePoint ページを保存したら完了です
    image
    image

実際のコードは以下の通りです。<テナント名> は、各自のテナント名に変更してください。
JSON 形式で取得すると、IconUrl にアイコンの URL、FileName にファイル名、LinkLocation にドキュメントの URL が入っているので、そのまま利用しているだけです。JavaScript ライブラリは CDN から取得していますが、SharePoint サイト コレクション内などにアップロードして参照しても問題ないです。

<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js”>
</script>
<script type=”text/javascript” src=”//ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js”>
</script>
<script type=”text/javascript”>
jQuery.ajax({
url: “https://<テナント名&gt;.sharepoint.com/_api/me/getrecentdocs”,
type: “GET”,
headers: {“Accept”: “application/json;odata=verbose”},
cache:false,
success: function(data){
var items = [];
var loopcount = 10;
var num = 1;
$(data.d.results).each(function(){
items.push(‘<img src=”‘ + this.IconUrl + ‘”> ‘ +
‘<a href=”‘ + this.LinkLocation + ‘”>’ + this.FileName + ‘</a></p>’);
num++;
if (num > loopcount) {return false;}
});
$(“.recentDocsInfo”).html(items.join(”))
}
});
</script>
<div class=”recentDocsInfo”></div>

戻ってくる情報さえわかれば、簡単コーディングです。戻ってくる情報は、開発ツールを利用してもいいですが、この程度なら console.log(data); で出力して、Internet Explorer の開発者モードで確認すれば OK です。楽々 LaTeX…もとい楽々 SharePoint!!

image

SharePoint 2013 検索に Bing を統合する

SharePoint Community に Jasper Oosterveld さんが投稿されましたが、もしかすると知らない人が居るのかも、ということで、ほぼ同じ内容ですが記載をしておきます。SharePoint 2013 の検索結果画面に Bing での検索結果を一緒に表示してやろう、というもので、検索先機能とクエリ ルール機能を利用します。

検索先の設定

  1. 検索画面の [サイトの設定] メニューの [検索] – [検索先] をクリックします。
  2. [新しい検索先] をクリックし、以下のように記述して、[保存] ボタンをクリックします。
    – 名前 : Bing 検索結果
    – プロトコル : OpenSearch 1.0/1.1
    – クエリの変換 : {searchTerms} (元のママ)
    – ソース URL : http://www.bing.com/search?q={searchTerms}&format=rss&Market=ja-jp
    – 資格情報の情報 : 匿名: このソースは認証不要 (元のママ)
    image

クエリ ルールの設定

  1. 検索画面の [サイトの設定] メニューの [検索] – [クエリ ルール] をクリックします。
  2. [検索先の選択…] で  [ローカル SharePoint の結果 (システム)] を選択します。
  3. [新しいクエリ ルール] をクリックし、以下のように記述して、[保存] ボタンをクリックします。
    – ルール名 : インターネット検索
    – クエリの条件 : [クエリにアクション用語を含める] を選択し、[アクション用語はこれらの語句の 1 つです] に [インターネット] と記入
    image
  4. [アクション] の [結果のブロックを追加] をクリックし、以下の通り入力し、[OK] ボタンをクリックします。
    – タイトル : “{subjectTerms}” の Bing 検索結果
    – クエリの構成 : {subjectTerms} (元のママ)
    – このソースを検索 : Bing 検索結果
    – アイテム : 2 (元のママ)
    – [[詳細] リンクを選択すると、次の URL に移動します] を選択し、URL に [http://www.bing.com/search?q={searchboxquery}] を入力する
    – [このブロックは、主要な検索結果の上に常に表示されます] を選択
    – グループ表示テンプレート : [既定のグループ]
    – アイテム表示テンプレート : [検索結果の種類を使用する] (元のママ)
    image

これだけで完成です。「インターネット」を含む検索キーワードで検索すると、Bing で「インターネット」を除いたキーワードで検索した結果が併せて表示されます。例えば、「インターネット SharePoint」で検索すると、「Bing で “SharePoint” で検索した結果」が取得されます。

image

Bing 以外に利用できる外部検索サービス

これだけだと Jasper Oosterveld さんの投稿と同じだよ、ということで、Bing 以外にも同様に利用可能な代表的な外部の検索サービスをソース URL に指定すべき値と共に記載してみます。

以下は YouTube の検索結果ですが、このように RSS 形式で取得できれば、基本的には何でもカモンです!

image

SharePoint 2013 の検索レポートの情報をアプリケーションで取得

SharePoint Server 2013 には、サイト コレクションごとに参照数や検索回数など利用状況を表す「利用状況レポート」および検索に利用されたクエリ、検索したけど結果が取得できなかったクエリなど検索に関連する「検索レポート」が取得できます。

ちなみに、サイト毎に参照数などを取得することも可能です。

参照するには、SharePoint サイトに適切な権限を持つユーザーでアクセスして、[サイトの設定] メニューから [サイトコレクションの管理] – [人気と検索に関するレポート] にアクセスし、[利用状況 のレポートの表示] 画面で参照したいリンクをクリックすれば、Excel シートにまとまった結果が表示されます。

image

image

これで十分なことも多いですが、よく利用されているクエリを取得して再利用したい、といった場合には SearchServiceApplication クラスの GetSearchReport メソッドや GetRollupAnalyticsItemData を利用することになります。

以下で、上記 Excel シートと同じ内容である、2013 年 5 月の特定の SharePoint サイト コレクションの上位のクエリ結果を取得してみます。

$searchApp = Get-SPEnterpriseSearchServiceApplication
$site = Get-SPSite “SharePoint サイトん URL (例: http://server/)
$date = Get-Date “取得したい年月
$result = $searchApp.GetSearchReport(1, [System.Guid]::Empty, $site.ID, $date, $false, 1000)

GetSearchReport メソッドの引数は、それぞれ以下の通りです。

  • レポート ID (1 が「上位のクエリ」)
  • テナント ID (オンプレミスだと Empty)
  • サイト コレクション ID
  • 年月日
  • フラグ ($true は該当日、$false は該当月)
  • 最大取得件数

image

SearchServiceApplication.GetSearchReport method
http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.administration.searchserviceapplication.getsearchreport.aspx

SearchServiceApplication.GetRollupAnalyticsItemData method
http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.administration.searchserviceapplication.getrollupanalyticsitemdata.aspx

期待している通りに、簡単に取得できることがわかるはずです。
SharePoint 2010 から比べると、飛躍的に楽になっていますよ。新しく作り直された検索機能に含まれる分析コンポーネントの賜物です!

ランキングのアルゴリズムは調整できますか?

ユーザーがある検索キーワードで検索を行った際に、検索結果にコンテンツがどのような順序で表示されるかを決定付けるアルゴリズムのことを「ランキング アルゴリズム」と言い、インターネット検索においては、ある時期において、そのサービスの優劣を決定付けた非常に重要なポイントでした。

エンタープライズサーチにおいては、以下のポイントからランキング アルゴリズムの重要性は、インターネット検索のそれを上回ります。ランキングのアルゴリズムが調整できなければ、エンタープライズサーチじゃない。

  • ユーザーが期待している順序にできる限り近く表示できることで、ページを捲る作業が少なく、つまり、クリック数が少なく、ページ毎に表示されている検索結果に対する検討時間を少なくし、エンタープライズサーチの ROI を飛躍的に高めることに繋がります。
  • エンタープライズサーチでは、検索対象のコンテンツの種類や登録方法によってランニング アルゴリズムが変更できることが非常に重要なポイントです。例えば、CMS (コンテンツ管理システム) にコンテンツを登録するときのファイルの命名規則や資料の分類を示すプロパティへの情報追加の仕組みがある場合とない場合で、ユーザーが検索キーワードで検索した際のファイル名やプロパティの重要度が違います。

SharePoint 2013 では、後述する「ランク付けモデル」と呼ばれるランキング アルゴリズムの利用は勿論のこと、それ以外にも検索結果に対する検討時間を少なくするために、クエリ ルールによってユーザーが期待していると思われる検索結果を管理者や他のユーザーの行為によって差し込んだり、絞り込みによって検索結果の件数を減らす (参考) といったことが可能です。

標準で利用可能なランク付けモデル

SharePoint 2013 では、標準で、エンタープライズサーチで通常利用されるであろうランク付けモデルを以下表の通り用意しています。個々のランク付けモデルの詳細は TechNet ライブラリ (英語) を参照してください。
基本的には、このいずれかを選択することで目的は達せられるはずです。

分類

ランク付けモデル名

一般用

既定の検索モデル

 

O14 既定の検索モデル

 

Minspan を高く設定した検索モデル

 

Minspan なしの検索モデル

ひと検索用

ひとの検索アプリケーションのランク付けモデル

 

ひとの検索に適用する専門分野ランク付けモデル

 

ひとの専門分野の検索 (社会的距離に基づくランク付けモデル)

 

ひとの名前の検索に適用するランク付けモデル

 

ひとの名前の検索 (社会的距離に基づくランク付けモデル)

 

ひとの検索の社会的距離モデル

特別な目的用

カタログのランク付けモデル

 

人気のランク付けモデル

 

推薦者のランク付けモデル

 

サイト候補のランク付けモデル

主要な検索結果 Web パーツによるランク付けモデルの指定

主要な検索結果 Web パーツの [検索条件] – [クエリの変更] から [クエリの作成] ウィンドウを開き、[並べ替え] タブを選択し、[並べ替え] に「Rank」を選択することで、[ランク付けモデル] を一覧から選択することが可能です。

image

検索アプリケーション構築時のランク付けモデルの利用方法

REST API を利用した検索アプリケーション作成時には、パラメータ「rankingmodelid​」を利用して、ランク付けモデルを指定した検索を実現します。例えば、以下のような GET リクエストで実行します。

http://xxx/sites/search/_api/search/query?querytext=’*’&rankingmodelid​=’8f6fd0bc-06f9-43cf-bbab-08c377e083f4′

rankingmodelid​ パラメータの値は、次のように Windows PowerShell コマンドレットを実行すると取得可能です。

PS C:\> $ssa = Get-SPEnterpriseSearchServiceApplication
PS C:\> $owner = Get-SPEnterpriseSearchOwner -Level ssa
PS C:\> Get-SPEnterpriseSearchRankingModel -SearchApplication $ssa -Owner $owner

Name                 ID                                   IsDefault
—-                 —                                   ———
既定の検索モデル     8f6fd0bc-06f9-43cf-bbab-08c377e083f4 True
カタログのランク…  ca2a10ff-6f63-4913-a125-34b5894495f4 False

独自のランク付けモデルを作成する

各自のエンタープライズサーチの仕組みに合わせて、ランク付けモデルを作成することも可能です。

ランク付けモデルは、1 つ以上の「ランク ステージ」で構成されており、ランク ステージは、1 つ以上の「ランク機能 (rank feature)」が含まれています。
ランク ステージが複数ある場合の計算方法は MSDN  ライブラリに任せるとして、ランク ステージが 1 つだけだとするならば、ランキング アルゴリズムとは、それぞれのランク機能をどの程度の強弱で反映させるかを決定している定義を意味します

ここでは、ランク機能の要素にどのようなものがあり、これをどのように設定するかを示します。まずは、ランク機能に関してです。

ランク機能

解説

BM25 次のような計算式の情報検索で利用されるアルゴリズム。BM25 アルゴリズム内で、どの管理プロパティに対して重要度や文字列長の補正を行うかの指定が可能です。
Static 数値型の管理プロパティの数値を利用してランク付けを行うためのランク機能。
Bucketed static ファイルの種類や言語のような管理プロパティに対して、指定されている値に応じてランク付けするためのランク機能。例えば、ファイルの種類が PPT なら高いランクにしましょう、のようなイメージ。
Proximity 近傍性を示すためのランク要素。例えば、ユーザーが 2 つの検索キーワードを指定した場合に、両者が同じ管理プロパティ内に現れるか、その距離がどの程度離れているか、といった条件でランキングを決定付けるランク機能。
Dynamic ユーザーが指定した検索キーワードがどの管理プロパティに含まれているかでランキングを決定付けるランク機能です。
Freshness 最終更新日時が格納されている管理プロパティ (通常は LastModifiedTime 管理プロパティ) が過去または未来の際にどのようにランキングを決定するかを決めるランク機能です。

ランキング付けモデルの作成は、ゼロ ベースで行うのは、かなりハードです。既存のランキング付けモデルの内容を取得し、内容を編集した上で登録して利用するのがいいでしょう。また、いきなり大きくランク付けモデルを変更すると結果が良くない場合の後戻りが大きいため、少しずつ変更して確認する、と繰り返すことをお勧めします

  1. 既存のランキング付けモデルの内容を取得する。以下の Windows PowerShell コマンドレットを取得すると、「既定の検索モデル」のランク付けモデルを DefaultRankingmodel.xml ファイルとして取得します。

    $ssa = Get-SPEnterpriseSearchServiceApplication
    $owner = Get-SPenterpriseSearchOwner -Level ssa
    $rankingModel = Get-SPEnterpriseSearchRankingModel -Identity -SearchApplication $ssa -Owner $owner
    $rankingModel.RankingModelXML > DefaultRankingmodel.xml

  2. DefaultRankingmodel.xml ファイルの内容を編集し、NewRankingModel.xml ファイルとして保存します。
  3. 新しいランキング付けモデルを登録する。以下の Windows PowerShell コマンドレットを実行します。

    $myRankingModel = Get-Content .\NewRankingModel.xml
    $myRankingModel = [String]$myRankingModel
    $owner = Get-SPenterpriseSearchOwner -Level ssa
    $newrm = New-SPEnterpriseSearchRankingModel -SearchApplication $ssa -Owner $owner -RankingModelXML $myRankingModel

  4. 新しく作成したランク付けモデルが利用できるようになっているので、Web パーツや検索アプリケーションで指定してください。

Overview of search result ranking in SharePoint Server 2013
http://technet.microsoft.com/en-us/library/dn169065.aspx

Customizing ranking models to improve relevance in SharePoint 2013
http://msdn.microsoft.com/en-us/library/c166ecdd-7f93-4bbb-b543-2687992dd2bc.aspx

REST API を使った SharePoint 用アプリ 3 分間クッキング

以前のエントリで PowerShell を使った REST API の利用例を紹介しました。今回は、折角ですので REST API を使う SharePoint 2013 の新機能にあたる SharePoint 用アプリをパパッと作ってしまいましょう。”環境が整っていれば” 3 分で実行できます。

事前の準備

以下のインストールおよび設定を行ってください。特に最後の手順は若干手順が多いので、注意してください。

SharePoint 用アプリの作成

今回は、以下のサンプル コードをベースに、日本語環境でも問題なく動作するように若干手を加えたものを作成します。注意点としては、取得した検索結果の 2 列目に Doc ID が必ず入ってくるという点と、取得したいと指定した管理プロパティの後 (の列に) にいくつかの情報が付与されるので、それらは不要ならスキップすること、です。

SharePoint 2013: Using the search REST service from an app for SharePoint
http://code.msdn.microsoft.com/officeapps/SharePoint-2013-Perform-a-1bf3e87d

  1. 新しいプロジェクトを作成し、テンプレートとして [Visual C#] – [Office/SharePoint] – [アプリ] の [SharePoint 2013 用アプリ] を選択します
    image
  2. [アプリのデバッグに使用する SharePoint サイト] に [開発者向けサイト] テンプレートで作成しておいた SharePoint サイトの URL を、[SharePoint 用アプリをホストする方法] に [SharePoint ホスト型] を選択します (今回はオンプレミス前提なので、この選択を行いました)
    image
  3. AppManifest.xml ファイルをソリューション エクスプローラーから選択し、[アクセス許可] タブ内に、[スコープ] が [検索対象] で、[アクセス許可] が [QueryAsUserIgnoreAppPrincipal] を選択します
    image
  4. Default.aspx をソリューション エクスプローラーから選択し、画面表示用の HTML を追加します
    image
  5. App.js をソリューション エクスプローラーから選択し、REST API 呼び出しを含む JavaScript コードを追加します
    image
  6. [ビルド] – [ソリューションの配置] で SharePoint 用アプリの配置を行うと、SharePoint ページが表示され、SharePoint 用アプリを信頼するか聞かれるので、[信頼する] を選択します
    image
  7. 表示された検索ボックスに検索キーワードを入力し、[検索] ボタンをクリックすれば、検索結果が表示されます
    image

実際のプロジェクト ファイル一式は、こちらからダウンロードできます。
作成したコードの主な箇所を以下に記載します。TABLE タグが利用されているなど、若干見苦しいところもありますが、そこはサンプルということでご容赦ください。

Default.aspx (一部掲載)

<%– 次の Content 要素内のマークアップはページの TitleArea 内に配置されます –%>
<asp:Content ContentPlaceHolderID=”PlaceHolderPageTitleInTitleArea” runat=”server”>
    サンプル検索アプリケーション
</asp:Content>

<%– 次の Content 要素内のマークアップとスクリプトはページの <body> 内に配置されます –%>
<asp:Content ContentPlaceHolderID=”PlaceHolderMain” runat=”server”>

    <div>
        <input id=”searchTextBox” type=”text” />
        <input id=”searchButton” type=”button” value=”検索” />
    </div>
    <div id=”resultsDiv”>
    </div>

</asp:Content>

App.js (全文掲載)

‘use strict’;

var context = SP.ClientContext.get_current();

// このコードは、DOM を準備できると実行され、SharePoint オブジェクト モデルを使用するために必要なコンテキスト オブジェクトを作成します
$(document).ready(function () {
    var spAppWebUrl = decodeURIComponent(getQueryStringParameter(‘SPAppWebUrl’));

    $(“#searchButton”).click(function () {
        var queryUrl = spAppWebUrl + “/_api/search/query?querytext='” + encodeURIComponent($(“#searchTextBox”).val()) + “‘&selectproperties=’Title,Path,Author,Write,HitHighlightedSummary'”;

        $.ajax({ url: queryUrl, method: “GET”, headers: { “Accept”: “application/json; odata=verbose” }, success: onQuerySuccess, error: onQueryError });
    });
});

// この関数は、上の呼び出しが成功した場合に実行されます
function onQuerySuccess(data) {
    var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;

    $(“#resultsDiv”).empty();
    $(“#resultsDiv”).append(‘<table>’);

    $(“#resultsDiv”).append(‘<tr><th>ランク</th><th>タイトル</th><th>作成者</th><th>更新日</th><th>スニペット</th></tr>’);

    $.each(results, function () {
        $(“#resultsDiv”).append(‘<tr>’);
        $(“#resultsDiv”).append(‘<td>’ + this.Cells.results[0].Value + ‘</td>’);
        $(“#resultsDiv”).append(‘<td><a href=”‘ + encodeURI(this.Cells.results[3].Value) + ‘”>’ + this.Cells.results[2].Value + ‘</a></td>’);
        $(“#resultsDiv”).append(‘<td>’ + this.Cells.results[4].Value + ‘</td>’);
        $(“#resultsDiv”).append(‘<td>’ + this.Cells.results[5].Value + ‘</td>’);
        $(“#resultsDiv”).append(‘<td>’ + this.Cells.results[6].Value + ‘</td>’);
        $(“#resultsDiv”).append(‘</tr>’);
    });

    $(“#resultsDiv”).append(‘</table>’);
}

// この関数は、上の呼び出しが失敗した場合に実行されます
function onQueryError(error) {
    $(“#resultsDiv”).append(error.statusText)
}

//function to get a parameter value by a specific key
function getQueryStringParameter(urlParameterKey) {
    var params = document.URL.split(‘?’)[1].split(‘&’);
    var strParams = ”;
    for (var i = 0; i < params.length; i = i + 1) {
        var singleParam = params[i].split(‘=’);
        if (singleParam[0] == urlParameterKey)
            return decodeURIComponent(singleParam[1]);
    }
}

エブリウェア SharePoint

あるブログによりますと、Windows Azure 仮想マシン (IaaS) が正式リリースされたそうです。パチパチ。

Windows Azure 仮想マシン(IaaS)正式リリース + 自習書を提供 – 雲のごとく – Site Home – MSDN Blogs
http://blogs.msdn.com/b/daisukei/archive/2013/04/16/windows-azure-iaas.aspx

ここでは、そこに書かれていることから SharePoint に関する素敵な情報を 2 点ほどお届けします。

その 1 : 「メモリ集中型インスタンス」の提供

まさに SharePoint (2013) のために用意されたかのような仮想マシン「A6 (4 仮想コア、28 GB メモリ)」「A7 (8 仮想コア、56 GB メモリ)」が提供されています。

料金詳細 – 仮想マシン
http://www.windowsazure.com/ja-jp/pricing/details/virtual-machines/

その 2 : プラットフォーム イメージの追加

上記の画像を見るとわかりますが、プラットフォーム イメージに「SharePoint Server 2013 Trial」があります。そうです。選択して、ドン! です。

それからどしたの?

これで、皆さんは SharePoint (2013) を利用する環境を以下から選択することが可能です。

  1. オンプレミス : 所謂、社内設置型
  2. Office 365 (SharePoint Online) : マイクロソフトが提供するクラウド環境
  3. プライベート クラウド : Partner Hosted Productivity Cloud (PHPC) などマイクロソフトのパートナー企業が提供する環境
  4. Windows Azure 仮想マシン (IaaS) : マイクロソフトが提供する Windows Server + SharePoint Server 2013 の仮想環境

SLA、セキュリティの設定や利用できる管理ツールなどそれぞれに一長一短がありますが、開発環境から本番環境までで任意に選択でき、SharePoint 2013 の検索機能ならハイブリット環境で利用できます。まさに、タイトルの通り「エブリウェア SharePoint」です。