コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power Automateでファイルの要求リンクを作成する


スポンサードリンク

はじめに

OneDrive や SharePoint にはファイルの要求機能という、フォルダの共有リンクを作成するのではなく対象者にファイルをアップロードしてもらうためのファイル要求リンクを作成することができます。

support.microsoft.com

こちらの機能を有効にするにはこちらをご覧ください。

learn.microsoft.com

この機能の利点は、共有されたユーザはフォルダに直接アクセスできるわけではないので、フォルダーの内容を表示したり、ファイルを編集、削除、またはダウンロードしたり、他のユーザがファイルをアップロードしたかを確認することもできません。

これのリンクをPower Automateを用いて作成したかったのですが、標準アクションではできなかったので「SharePoint に HTTP 要求を送信します」アクションで実現してみました。

この記事ではそのやり方をまとめています。

やり方

今回はOneDriveにあるフォルダに対してファイルの要求リンクを作成していますが、どのサイトを対象にするか?が変わってくるだけですのでSharePointでもできると思います。

フォルダのIDを取得する

ファイルの要求リンクを作成したいフォルダのIDを取得します。

これは「パスによるフォルダー メタデータの取得」アクションで取得できますね。

取得したいフォルダが存在するサイトのアドレスとフォルダーのパスを選択 or 入力するだけですので割愛。

SharePoint REST APIによりファイルの要求リンクを取得する

ファイルの要求リンクは \ShareLink により取得することが可能です。
このリクエストは共有リンクを作成する際に利用するものですね。

このリクエストを送信する際にどのような種別のリンクを作成するか指定することで、作成するリンクの種別を切り替えることができます。

そのプロパティは linkKind ですね。

どのような値を設定すればどのような種別になるのかについては、以下ドキュメントをご確認ください。

linkKind Value
AnonymousEdit 5
AnonymousView 4
Direct 1
Flexible 6
OrganizationEdit 3
OrganizationView 2
Uninitialized 0

learn.microsoft.com

ファイルの要求リンクを作成する際は "6" ですね。

さて、これらを踏まえて実際設定すべきアクションをみていきましょう。

ボディには作成アクションの「ボディ」で作成したものを設定しています。

Body

{
  "request": {
    "createLink": true,
    "settings": {
      "allowAnonymousAccess": true,
      "linkKind": 6,
      "expiration": null,
      "restrictShareMembership": false,
      "updatePassword": false,
      "password": "",
      "description": "テスト",
      "role": 8,
      "applicationLink": false,
      "limitUseToApplication": false
    }
  }
}

ファイルの要求リンク作成時はパスワードは設定できないので、これらの中で設定変更する箇所といえば "description"ですね。

上記のJSONでは"テスト"が設定されていますが、この設定によって以下のように表示されます。

ここに表示される文言を変更したい場合は "description"の値を変更してください。

続いてREST APIを送信している箇所(HTTP要求)の設定値ですが以下のようにしています。

サイトのアドレス

[フォルダがあるサイトのアドレス]

方法

POST

URI

_api/web/lists/GetByTitle('Documents')/items('@{outputs('パスによるフォルダー_メタデータの取得')?['body/ItemId']}')/ShareLink

ヘッダー

{
    "Accept": "application/json;odata=verbose"
}

ボディ

@{outputs('Body')}

URIGetByTitle('Documents') が環境によって異なってくることあるかな?ということぐらいですかね。

以上でファイルの要求リンクを取得することができます!

余談ですがリンクだけ取得したい場合は以下で取得できます。

@{body('SharePoint_に_HTTP_要求を送信します')?['d']?['ShareLink']?['sharingLinkInfo']?['Url']}

結構階層深いですね。

おわりに

ファイルの要求リンクを作成するアクションも早く標準アクションとして追加して欲しいですねー


スポンサードリンク