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 など) に置きましょう。そうするだけで、機械学習によって、今、あなたが見るべきドキュメントが、あなたの元に届きます!

広告