Microsoft Flow から SharePoint REST サービス呼び出し

------------------------------- 2018/05/09 更新 -------------------------------

新しく SharePoint 専用の HTTP アクション(SharePoint - Send an HTTP request to SharePoint)の提供が開始されました。

このアクションでは Flow に埋め込まれた接続情報をもとに直接 SharePoint REST サービスを呼び出すことが可能になりますので、このアクションを利用することで本記事に記載した SharePoint アプリの登録やアクセストークンの取得といった手順は一切不要となります。

Title : SharePoint Business Apps Spring 2018 Update
URL : https://techcommunity.microsoft.com/t5/SharePoint-Blog/SharePoint-Business-Apps-Spring-2018-Update/ba-p/189261

-------------------------------------------------------------------------------------

コラボレーション担当の瀧口です。

Microsoft Flow はコードを必要とせずにさまざまなサービスを連携させることができるツールで、ユーザー レベルで非常に簡単にアプリケーション間での自動化がおこなえるようになっています。SharePoint とも連携機能を強化してきており、従来 SharePoint Designer や PowerShell などで実装が必要だったカスタマイズ・自動化への対応もかなりカバーするようになってきました。

現在、Flow で提供されている SharePoint 用のアクションについては以下のようなものがあります。

SharePoint - エンティティ値の取得
SharePoint - コンテンツの承認状態を設定します
SharePoint - パスによるファイル コンテンツの取得
SharePoint - パスによるファイル メタデータの取得
SharePoint - ファイル コンテンツの取得
SharePoint - ファイル メタデータの取得
SharePoint - ファイルのコピー
SharePoint - ファイルのプロパティの更新
SharePoint - ファイルのプロパティの取得
SharePoint - ファイルの更新
SharePoint - ファイルの作成
SharePoint - ファイルの削除
SharePoint - ファイルの取得 (プロパティのみ)
SharePoint - フォルダーの一覧
SharePoint - フォルダの展開
SharePoint - リストの取得
SharePoint - ルート フォルダーのリスト
SharePoint - 項目の更新
SharePoint - 項目の作成
SharePoint - 項目の削除
SharePoint - 項目の取得
SharePoint - 人を解決する
SharePoint - 添付ファイルのコンテンツの取得
SharePoint - 添付ファイルの Add
SharePoint - 添付ファイルの削除
SharePoint - 添付ファイルの取得
SharePoint - 複数の項目の取得

 

エンドユーザーの方であればこれだけあれば十分だと思われるかもしれませんが、実際に SharePoint  に対するフローを作り出すと SharePoint 用のアクションでは設定項目がない箇所を変更したかったり、現時点ではアクションとして提供がされていないサイトやリストの作成や設定変更なども一連のフローの中で処理したいケースも出てきます。

SharePoint ではコンテンツやサイトに対して作成、読み取り、更新、削除をリモートから実行するための API として「SharePoint REST サービス」が提供されており、Flow の SharePoint 用のアクションでは対応していないような操作もカバーしていますので、今回は SharePoint REST サービスを Flow から直接呼び出す方法をご案内したいと思います。

SharePoint REST サービスの概要、操作可能なデータとその方法などは以下をご参照いただければと思います。

Title : SharePoint REST サービスの概要
URL : /ja-jp/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service

 

Flow からの SharePoint REST 呼び出しでは、SharePoint 上にカスタムアプリを展開するための仕組みである「SharePoint アドイン」で利用されるアクセス トークンを使ってSharePoint 上のデータにアクセスを行います。

Title : SharePoint アドイン
URL : /ja-jp/sharepoint/dev/sp-add-ins/sharepoint-add-ins

 

手順 1:SharePoint アプリの作成

※この手順の実施にはサイト コレクションの管理者権限が必要となります。

 

以下の URL にブラウザからアクセスし、アプリ登録のフォームを開きます。

https://<テナントID>.sharepoint.com/<サイトパス>/_layouts/15/appregnew.aspx

  • クライアントIDとクライアントシークレットは「生成」ボタンを押して作成ください。
  • 今回は管理者側でアドインを有効化 (承認) することを想定していますので、タイトル/アプリドメイン/リダイレクト先の URL については適当な値でも構いません。
  • すべての項目を入力の後、「作成」をクリックします。

 

作成されると以下のような画面が表示されます。

以降の処理で使用しますのでクライアント ID とクライアント シークレットはメモ帳などに転記しておいてください。

 

手順 2:SharePoint アプリへの権限の付与

※この手順の実施にはサイト コレクションの管理者権限が必要となります。

 

以下の URL にブラウザからアクセスし、アプリ登録のフォームを開きます。

https://<テナントID>.sharepoint.com/<サイトパス>/_layouts/15/appinv.aspx

  • アプリ ID に手順 1 で取得したクライアント ID を入力し、「参照」ボタンをクリックします。
  • タイトル/アプリドメイン/リダイレクト先の URL は自動で補完されます。
  • 「権限の要求 XML」 にアプリに付与する権限定義を設定します。今回はサイト コレクションに対してフルコントロールの権限を付与します。
 <AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="https://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>

 

なお、アプリへの権限付与は以下のような値を指定することができますので、実際の利用時には必要最小限の権限を付与するようにしてください。

Scope:テナント (/tenant)、サイト コレクション (/sitecollection)、サイト (/sitecollection/web)、リスト (/sitecollection/web/list) などの対象範囲の指定

Right:読み取り(Read)、書き込み (Write)、管理 (Manage)、フルコントロール (FullControl) 権限の指定

Title : SharePoint でのアドインのアクセス許可
URL : /ja-jp/sharepoint/dev/sp-add-ins/add-in-permissions-in-sharepoint

 

  • すべての項目を入力の後、「作成」をクリックします。

 

以下のような画面が表示されますので、「信頼する」をクリックします。

 

ここまでが事前準備となります。これから Flow を作成していきます。

 

手順 3:アクセス トークンを取得するフローを作る

Flow にアクセスし、テンプレートは選ばず「一から作成」から開始をします。

最初にアクセス トークンを取得する処理を作成します。今回は手動でフローを実行しようと思いますので、以下のように作成します。

  • トリガー:モバイルの Flow ボタン
  • アクション:HTTP – HTTP

 

トリガーについては設定が不要で、HTTP の設定は以下のように行います。
このアクションで Azure AD へアクセストークン取得の HTTP リクエストを出し、レスポンスとしてトークンを取得します。

 

設定内容

方法 POST
URI https://accounts.accesscontrol.windows.net/<テナントGUID>/tokens/OAuth/2
ヘッダー Content-Type:application/x-www-form-urlencoded
本文
 grant_type=client_credentials&client_id=<クライアントID>@<テナントID>&client_secret=<クライアントシークレット>&resource=00000003-0000-0ff1-ce00-000000000000/<テナントID>.sharepoint.com@<テナントGUID>

 

※テナント ID は https://xxx.sharepoint.com の xxx の部分です
※テナントの GUID は Azure ポータルを開き、 Office 365 で使用している Active Directory のプロパティ「ディレクトリ ID」です。

 

ここで一度フローのテストを行っておきます。

 

正常にフローが終了すると以下のような画面になります。

 

HTTP のアクションを開くと実際のフローの実行結果を確認することができます。

以下のように「access_token」が正しく返ってきているかを確認ください。

 

手順 4:REST サービスを介してリスト アイテムを作成する

新しいステップから「データ操作 – JSON の解析」と「HTTP – HTTP」の 2 つのアクションを追加します。

 

JSON の解析では、手順 3 で取得した HTTP レスポンスからアクセス トークンを取り出します。

この処理により、以降のステップで「access_token」という名前の動的コンテンツとしてアクションから参照することができます。

 

設定内容

コンテンツ HTTP アクションで取得した動的なコンテンツの「本文」
スキーマ
 {
    "type": "object",
    "properties": {
        "token_type": {
            "type": "string"
        },
        "expires_in": {
            "type": "string"        },
        "not_before": {
            "type": "string"
        },
        "expires_on": {
            "type": "string"        },
        "resource": {
            "type": "string"
        },
        "access_token": {
            "type": "string"
        }
    }
}

 

最後の設定になります。SharePoint REST エンドポイントに対してリストアイテムを新規作成する処理を設定します。

(アイテムの作成自体は SharePoint 用のアクションの「項目の作成」で実現可能ですが、REST サービスの呼び出しを確認するために簡単な処理にしています。)

 

設定内容

方法 POST
URI https://<テナントID>.sharepoint.com/<サイトパス>/_api/web/lists/getbytitle('<リスト名>')/items"}]}
ヘッダー 文字列「Bearer 」と動的パラメータ「access_token」※ Bearer の後ろは半角スペースです。
本文
 {
    "Title": "Flow からのテスト投稿"
}

 

以上でフローの編集は終了です。以下のようなタイトルだけのシンプルなリスト「FlowTest」に対してテストをします。

フローが無事完了するとアイテムが新規作成されていることが確認できます。

 

「SharePoint - 項目の作成」アクションなどを利用する場合は、 Flow に埋めこまれた「接続」で SharePoint へのアクセスを行いますので、アイテムの登録者は 通常は Flow の所有者 (作成者) となります。もしトリガーで「SharePoint - 選択したアイテムの場合」を利用する場合に限っては、埋めこまれた接続か Flow を実行したユーザーかを選ぶことができ、実行したユーザーをアイテムの登録者や更新者に反映させることができます。

今回のように SharePoint アプリ専用のアクセス トークンしてアイテムの作成や更新を行った場合、必ず登録者や更新者は「SharePoint アプリ」となります。

 

「選択したアイテムの場合」を使ってリストやライブラリで選択したアイテムに対して Flow を起動させる場合、他のユーザーにも実行を許可したい場合は「実行専用アクセス許可」を付与する必要があります。方法については以下に詳しい説明がございますので設定を行う際はご参照いただければと思います。

Title : Introducing Flow Launch Panel in SharePoint Lists and Libraries
URL : https://flow.microsoft.com/ja-jp/blog/introducing-flow-launch-panel-in-sharepoint-lists-and-libraries/

 

最後に、登録したアプリのクライアント シークレットは 1 年間有効で、有効期限が切れるまえにクライアント シークレットを付け替える必要がありますので、運用後に突然処理が止まってしまわないようご注意いただければと思います。(クライアント シークレットの有効期限は最大 3 年まで延長可能)

Title : SharePoint アドインで期限が切れたクライアント シークレットを置換する方法
URL : https://msdn.microsoft.com/ja-jp/library/office/dn726681.aspx