要件
- Sharepointリストでデータを管理したい
- 一般ユーザーはAppsで提供したアプリ経由でのみ登録や更新をさせたい(リスト直操作を認めない)
- 管理者はフルコントロールを有し、アイテムの操作を行う
解決案概要
- Sharepoint リストのアイテムごとの権限で「作成/編集のアクセス権」を「なし」にする
- Appsから実行者が呼び出せるAutomate(親フロー)と、管理者権限で更新操作を行うAutomate(子フロー)を用意し、二段階でフローを実行する
Sharepointリスト定義
ポイント
Sharepointリスト設定 > 詳細設定 > アイテムごとの権限 項目で、「作成/編集のアクセス権」を「なし」にする
手順
管理者ユーザー「Sharepointリスト設定 > このリストに対する権限 > フルコントロール」に登録する
一般ユーザーは「Sharepointリスト設定 > このリストに対する権限 > 閲覧者」に登録する
管理者から見ると、「新規」ボタンが表示されている
一般ユーザーから見ると「新規」ボタンが表示されていない
Automate
ポイント
- 子の実行ユーザーを管理者(フルコントロールユーザー)に限定する
- データの受け渡しはJSONで行う
手順
ソリューションの作成
Automateから別のAutomateを呼び出すには、ソリューションに含まれている必要がある
(普通のAutomateではアクションの選択肢に出てこない)
Automateの左メニューから、「ソリューション」を選択する
新しいソリューションを作成する
親フローの作成(途中まで)
ソリューションの中に入り、Appsから呼び出される用のAutomate(以下、親フロー)を作成する
※既存Automateをソリューションの中に含めることも可能
ソリューション内のAutomateは子フローを呼び出すことが可能になっている
親フローは子フローが出来てないと呼出も保存も出来ないので、一旦放置
子フローの作成
先に、ソリューション内に管理者権限で更新操作を行う用のAutomate(以下、子フロー)を作成する
データのやり取りは、Apps⇔Automate間も、Automate同士間も、JSON形式にしておくと楽。(いわゆる密結合)
例えば引数がひとつ増えた場合に、引数をバラバラに定義しておく(疎結合)と、呼び出し箇所の再定義が必要になるので何かと面倒。
Sharepointリストのユーザー欄はカスタム値でメールアドレスをそのまま指定する
子フローの詳細画面から、実行ユーザーを定義する
プルダウンで、実行ユーザーを選択する
(ここに出てくるユーザーは作成者か共同作成者の模様)
ダイアログは「OK」
実行ユーザーを変更すると「保存」ボタンが有効になるので、保存する。
親フローの作成(再開)
親フローは子フローを呼び出すのみ
子フローのテスト
まずは、子フローが正常に動くことを確認する
親フローのテスト
同じデータを親から流して正常に動くことを確認する
Apps
ポイント
- Formは使わない(Appsを開いている実行ユーザーは更新権限がないため、Appsから直接リストは更新できない)
- AutomateへのデータはJSON形式で渡す
手順
ソリューションからアプリを作成する(レイアウトはお好みで)
登録ボタンの「OnSelect」時Action
UpdateContext({data: JSON({Title: TextInput1.Text, Comment: TextInput2.Text, Worker: User().Email}, JSONFormat.IndentFour)});
SampleParentFlow01.Run(data);
Refresh(SampleList);
これで、Appsからは一般ユーザーでも更新が出来、Sharepointリスト直操作は管理者しか行えないソリューションが作成できました。
以上