Windows 8 store apps と SharePoint 2013 の連携アプリケーション開発


こんにちは。

SharePoint 2013 の登場によって、SharePoint と接続するアプリケーションの実現範囲は大きく広がりました。そこで今回は、 こうした SharePoint と接続する Windows 8 store application を構築する際に陥りそうなポイントやノウハウを簡単にまとめてみたいと思います。

ここでは Search を例に紹介しますが、SharePoint 2013 からは、アイデア次第で、SharePoint が持っている機能を活用したさまざまなアプリケーションが構築可能です。

 

On-Premise の場合の認証 (Authentication)

例えば、SharePoint の WCM を使った Internet Site のような一般消費者向けの匿名アクセス (Anonymous) のサイトでは問題となりませんが、企業内やクラウド (Office 365) で管理している企業資産 (ドキュメントなど) と連携する、いわゆる業務アプリケーションを構築する場合には、認証に注意が必要です。

まず、オンプレミス環境 (企業内) に SharePoint Server 2013 をインストールした場合について、既定では Windows 統合認証が使用されますが、この場合には、Windows 8 store application 側で設定が必要です。
Package.appxmanifest を開き、下図の通り、[Enterprise Authentication]、[Private Networks] の Capabilities を有効にしておきます。(この設定をしないと、Wi-Fi や LAN 経由で SharePoint Server に接続した際に、AggregateException の例外が発生します。)

あとは、UseDefaultCredentials を使用して SharePoint Server に接続するだけです。(SharePoint へのアクセス方法についてのノウハウは後述します。下記は、C# のサンプルです。)

. . .
using System.Net.Http;
. . .

private void Button_Click_1(object sender, RoutedEventArgs e)
{
  HttpClientHandler handler = new HttpClientHandler();
  handler.UseDefaultCredentials = true;
  HttpClient cl = new HttpClient(handler);
  cl.DefaultRequestHeaders.Add("Accept", "application/json; odata=verbose");
  Task<HttpResponseMessage> res = cl.GetAsync("http://sharepoint01/sites/test/. . .");
  . . .
}

 

Office 365 の場合の認証 (Authentication)

2014/05 追記 : Office 365 の場合の認証については、現在 Preview 版がリリースされている Office 365 API が使用できます。「Office 365 API 入門」を参照してください。

Office 365 上のチームサイトの場合には、Azure Active Directory によるクレーム ベース認証をパスする必要があります。

この場合、自力で認証の流れを処理 (プログラミング) することになりますが、以前、Apps Team Blog でも紹介していた Omar さんのブログ (MSDN Blog) に、このサンプル コードが掲載されていますので、是非 参考にしてください。そして、素敵なことに、サンプル コードのダウンロードも可能です !

[Omar Venado’s Blog] Windows 8 Store Apps + new Office 365 Enterprise Preview (SharePoint Online)

http://blogs.msdn.com/b/omarv/archive/2012/10/25/windows-8-store-apps-office-365-enterprise-preview-sharepoint-online.aspx

 

そして、SharePoint 2013 へのアクセス !

さあ、認証がパスすれば、あとは SharePoint 2013 に接続してプログラミングするだけです。

アクセス方法として、CSOM (Client Side Object Model) の一部の API を呼び出すことも可能ですが、Windows 8 store apps では .NET のすべての API がサポートされているわけではないので、REST を使ったほうが無難でしょう。

特に、SharePoint 2013 から提供されている新しい REST API (/_api/ で始まる REST API) では、「SharePoint Add-ins の動作と概要」でも解説したように、リスト アイテムの取得・更新などの基本的な操作はもちろん、ワークフローの開始、さらには SharePoint 2013 の新機能である Social API の呼び出しなど、Object Model を通して実行可能なすべての操作を REST API で実行できます。(なぜなら、Client Object Model 自体が、最終的に、この REST API を呼び出しているからです。)

例えば、下図のように、SharePoint 2013 の Search エンジンと Managed Navigation を使って 商品検索サイトを構築したと仮定します。(このサイトの構築方法については、「SharePoint 2013 Search : Cross-Site Collection Publishing と Managed Metadata Navigation を使った Search Site の作成」に記載しました。)

これと同じことを Windows 8 store apps からアクセスして処理したい場合、まず、Navigation のカテゴリー (上記の「Hard Disk」、「Memory」) は、下記の通り REST で取得します。

Get http://kkdeveva11/sites/pubsite4/_api/navigation/menustate?mapprovidername='GlobalNavigationSwitchableProvider'
Accept: application/json;odata=verbose
{
  "d":
  {
    "MenuState":
    {
      "__metadata":{"type":"SP.MenuState"},
      "FriendlyUrlPrefix":"/sites/pubsite4/",
      "Nodes":
      {
        "results":
        [
          {
            "__metadata":{"type":"SP.MenuNode"},
            "CustomProperties":null,
            "FriendlyUrlSegment":"hard-disk",
            "IsHidden":false,
            "Key":"018f6777-5f6a-45d9-9153-15bc351e8c06",
            "Nodes":{"results":[]},
            "NodeType":1,
            "SimpleUrl":"",
            "Title":"Hard Disk"
          },
          {
            "__metadata":{"type":"SP.MenuNode"},
            "CustomProperties":null,
            "FriendlyUrlSegment":"memory",
            "IsHidden":false,
            "Key":"4e248650-8a05-408f-a02f-afec39f19e4e",
            "Nodes":{"results":[]},
            "NodeType":1,
            "SimpleUrl":"",
            "Title":"Memory"
          }
        ]
      },
      "SimpleUrl":null,
      "SPSitePrefix":"/sites/pubsite4/",
      "SPWebPrefix":"/sites/pubsite4/",
      "StartingNodeKey":"d006d992-f1f3-406f-b0b3-a87160831f33",
      "StartingNodeTitle":"Search Site Test",
      "Version":"2012-11-30T14:38:29.1342958Z"
    }
  }
}

さらに、「Hard Disk」のカテゴリーの商品一覧を取得するには、上記の太字の Key を使用して、下記の通りアクセスします。

Get http://kkdeveva11/sites/pubsite4/_api/search/query?querytext='owstaxidProductCatalogItemCategory:018f6777-5f6a-45d9-9153-15bc351e8c06'&selectproperties='Path,Title'
Accept: application/json;odata=verbose

補足 : 上記で、owstaxidProductCatalogItemCategory には、owstaxid + <managed metadata フィールドの内部名> を指定します。フィールドの内部名は、Site Setting で Site Column の URL を確認するなどして取得してください。

{
 "d":
 {
  "query":
  {
   "__metadata": {"type": "Microsoft.Office.Server.Search.REST.SearchResult"},
   "ElapsedTime": 15068,
   "PrimaryQueryResult":
   {
    "__metadata": {"type": "Microsoft.Office.Server.Search.REST.QueryResult"},
    "CustomResults": null,
    "QueryId": "313e2970-481e-47f3-b01c-5b2258b234f3",
    "QueryRuleId": "00000000-0000-0000-0000-000000000000",
    "RefinementResults": null,
    "RelevantResults":
    {
     "__metadata": {"type": "Microsoft.Office.Server.Search.REST.RelevantResults"},
     "GroupTemplateId": null,
     "ItemTemplateId": null,
     "Properties":
     {
      "results":
      [
       {
        "__metadata": {"type": "SP.KeyValue"},
        "Key": "GenerationId",
        "Value": "9223372036854775806",
        "ValueType": "Edm.Int64"
       },
       {
        "__metadata": {"type": "SP.KeyValue"},
        "Key": "ExecutionTimeMs",
        "Value": "47",
        "ValueType": "Edm.Int32"
       },

       skip (many metadata) ...

      ]
     },
     "ResultTitle": null,
     "ResultTitleUrl": null,
     "RowCount": 2,
     "Table":
     {
      "__metadata": {"type": "SP.SimpleDataTable"},
      "Rows":
      {
       "results":
       [
        {
         "__metadata": {"type": "SP.SimpleDataRow"},
         "Cells":
         {
          "results":
          [
           {
            "__metadata": {"type": "SP.KeyValue"},
            "Key": "Path",
            "Value": "http://kkdeveva11/sites/pubsite4/hard-disk/1",
            "ValueType": "Edm.String"
           },
           {
            "__metadata": {"type": "SP.KeyValue"},
            "Key": "Title",
            "Value": "Matsuffalo",
            "ValueType": "Edm.String"
           },

           skip (many metadata) ...

          ]
         }
        },

        {
         "__metadata": {"type": "SP.SimpleDataRow"},
         "Cells":
         {
          "results":
          [
           {
            "__metadata": {"type": "SP.KeyValue"},
            "Key": "Path",
            "Value": "http://kkdeveva11/sites/pubsite4/hard-disk/2",
            "ValueType": "Edm.String"
           },
           {
            "__metadata": {"type": "SP.KeyValue"},
            "Key": "Title",
            "Value": "Matsudata",
            "ValueType": "Edm.String"
           },

           skip (many metadata) ...

          ]
         }
        }
       ]
      }
     },
     "TotalRows": 2,
     "TotalRowsIncludingDuplicates": 2
    },
    "SpecialTermResults": null
   },
   "Properties":
   {
    "results":
    [
     {
      "__metadata": {"type": "SP.KeyValue"},
      "Key": "RowLimit",
      "Value": "10",
      "ValueType": "Edm.Int32"
     },
     {
      "__metadata": {"type": "SP.KeyValue"},
      "Key": "SourceId",
      "Value": "8413cd39-2156-4e00-b54d-11efd9abdb89",
      "ValueType": "Edm.Guid"
     },

     skip (many metadata) ...

    ]
   },
   "SecondaryQueryResults": null,
   "SpellingSuggestion": "",
   "TriggeredRules": {"results": [ ]}
  }
 }
}

 

このように、SharePoint 2013 からの新機能を活用すると、SharePoint の画面でおこなっていることとほぼ同じ機能が Windows 8 store apps でも実現できることがお分かりいただけるでしょう。

業務アプリケーションであればオンプレミスの SharePoint Server や Office 365 と連携したり、上記の商品検索のような Internet Front のアプリケーションの場合は、Windows Azure 上に SharePoint をインストールして連携させるなど、さまざまな構成が考えられます。

ドキュメント管理 (バージョン管理等)、検索、コンテンツ管理 (コンプライアンス管理など)、ソーシャルなど、SharePoint が持つ機能を活用して、サーバーの能力を生かした Windows 8 store application の構築が可能です。

 

 

Comments (0)

Skip to main content