PowerApps

【PowerApps×PowerAutomate】SharePointリスト登録時、ID列を自動採番する方法

ミムチ
ミムチ
Power AppsでSharePointリストにデータ登録する際、ID列を自動採番したいのですが、何かいい実装方法はありますかな?

パワ実
パワ実
ID列の自動採番方法はいくつか実装方法があるから、条件によって最も適切な方法をとる必要があるよ!

この記事では、Power AppsでSharePointリストにデータ登録する際、ID列を自動採番する3つの方法を紹介します。

それぞれの特徴を比較し、 状況に応じてどの実装方法を選べば良いかの判断方法も解説するので、是非参考にしてください!

この記事でわかること

  1. Power Appsでデータ登録時、ID列を自動採番する3つの方法
  2. 3つの方法の特徴と、条件に応じた実装方法の選び方
  3. 3つの方法それぞれの、具体的な実装方法

Youtube動画で見たい方は、こちらからどうぞ!

Power Apps登録時にID列を自動採番する方法​

Power AppsでSharePointリストに登録する際に、ID列を自動採番する方法はいくつかありますが、​今回は主な3つの実装方法を紹介します。​

SharePointリストのID列自動採番方法

  1. SharePointリストの既存のID列を使う方法
  2. Power Appsでの登録時に、ID列のデータをFirst関数で指定して登録する方法
  3. Power Appsでの登録時に、Poewr Automateを呼び出し、ID列を自動採番する方法

ミムチ
ミムチ
これら3つの内、どの実装方法が良いのですかな?

パワ実
パワ実
パワ実の経験をもとに、それぞれの特徴を比較して、どのような場合にどの方法を選べば良いのか表にまとめてみました!

それぞれの方法について、実装難易度、複数人同時登録、データ移行の3つの項目で評価しました。

①SharePointリストのID列を使う

SharePointリストの既存のID列を使う方法は、実装難易度が一番低く最も簡単です。​

登録時にDB側で自動で採番してくれるので、複数人が同時登録しても問題有りません。​

しかし、SharePointリストを移行したい場合に、このID列をID列に移行できないという大きな問題があります。​

そのためSharePointリストを移行する可能性がある場合は、別の方法を取る必要があります。​

SharePointリストの既存のID列を使う方法は最も簡単だが、別のSharePointリストの既存のID列に移行できない。

②First関数を使う​

次にPower Apps側で登録時に、ID列のデータをFirst関数等で指定する方法が候補にあがります​。

これは①よりはやや複雑になりますが、比較的簡単に実装できます。​

SharePointリストで新規に登録用のID列を作成するため、データ移行も問題有りません。​

しかし、複数人が同時に登録しようとしたとき、同じ番号のIDで登録を実行する可能性があり、​その際はアプリ側でエラーが表示されます。​

エラーが表示されても、もう一度登録すれば問題有りませんが、大人数で利用するアプリで、​複数人同時登録する可能性が高いアプリでは、別の手法を考えた方がよいです。​

Power Apps側で登録時にFirst関数を使いID列のデータを指定する方法は、比較的簡単に実装でき、データ移行も問題ないが、複数人同時に登録しようとしたときアプリ側でエラーが表示される。

③Power Automateで採番する​

複数人同時登録の可能性が高い場合、③のPower Automateを使った自動採番の手法が候補にあがります。​

Power Autoamteを使えば、複数人同時登録でもエラーは起きませんし、SharePointリストのデータ移行も問題有りません。​

だたしPower Autoamteフローの実装が必要になるため、3つの手法の中では一番複雑になります。 ​

Power AutomateでID列の自動採番をすれば、リストのデータ移行の問題もなく、複数人同時登録でもエラーは起きないが、実装は複雑になる。

一番簡単な手法順に、①、②、③と以下の手順で、実装方法を検討すると良いでしょう。

ID列自動採番の方法を考える手順

  1. SharePointリストを移行する可能性が絶対にない
    • はい ⇒ SharePointリストの既存のID列を使う
    • いいえ ⇒ 以下の方法を検討
  2. 複数人で同時登録することがほぼない
    • はい ⇒ Power AppsでFirst関数を使う
    • いいえ ⇒ Power Automateで自動採番する

パワ実
パワ実
ID列の自動採番方法については、色々な意見があると思うので、​これはあくまでパワ実の考える実装の選択方法になります。​

ID列自動採番の3つの実装方法

それでは今説明した3つの方法について、具体的な実装方法を解説していきます。

①SharePointリストのID列を使う​

最も簡単な方法は、SharePointリストの既存のID列を使う方法です。 

SharePointリストを作成時、デフォルトで作成されているID列は、1から順に、一意の数値が自動採番されます。 

1.リスト作成時は表示されていないため、任意の列を選択し、「列の設定」から「列の表示/非表示」を選択します。 

2.ID列にチェックを入れて、適用をクリックします。

3.これでデフォルトのID列を表示できましたので、後は何もする必要がなく、アプリからデータが登録されたら、ID列には自動採番された数値が登録されます。 

これが最も簡単な方法ですが、一点以下の問題があります。 

ID列はデータ登録時に、完全に自動で登録されるため、後から編集することができず、データの移行ができません。 

パワ実
パワ実
例えば現在使っているSharePointリストを、別のリストに移行しようとしたとき、このID列のデータを、移行先のデフォルトのID列に移行することはできないよ。

ミムチ
ミムチ
ID列をリレーションシップのキー列として使っていて、SharePointリスト移行の可能性がある場合は、この方法を避けた方がよいということですな…

②First関数を使う​

次に、Power Apps側で登録時に、ID列の値を指定する方法があります。 

1.SharePointリストで新規にID列を作成します。 

2.「種類は「数値型で作成し、「一意の値を適用を「はいにします。 

3.Power Apps側の編集フォームで、新規に作成したID列を追加し、Defaultプロパティで、IDの値を指定します。 

ミムチ
ミムチ
Max関数や、Last関数で、ID列の最大値+1を指定する方法はどうですかな?

パワ実
パワ実
一見それでよさそうなんだけど、Max関数と、Last関数だと今のところ「委任ができない」問題があるんだよ。

よく思いつく方法として、Max関数やLast関数がありますが、Max関数では以下のような委任の警告が出てしまいます。 

それならLast関数ではどうかと思い試してみます。

Last関数は委任の警告は出ていませんが、実際には委任ができていないようです。 

委任ができているかどうか簡単に確認するには、三点リーダー>「設定」>「データ行の制限」で、デフォルトの500から、小さい数値に変更して確認しましょう。

例えばデータ行の制限を5にして、動作確認してみます。 

このようにLast関数でも、適切にAutoID列の最大値を取得できていないことがわかります。

4.それではどうすればよいかというと、以下のようにFirst関数を使い、SharePointリストのID列で、降順にソートした最初の値を取得し、1を足せばOKです。 

If(Form名.Mode = FormMode.New,  
 First(Sort(リスト名, ID列名, SortOrder.Descending)).ID列名 +1,  Parent.Default
)

この関数は委任ができており適切に採番ができています。 

5.あとはID列のVisibleプロパティをFalseにしておけば、ユーザーからも見えず問題ありません。 

但しこの実装方法のデメリットとして、複数人が同時登録したとき、同じIDで登録しようとする可能性がある点です。 

SharePointリスト側で一意の値をオンにしているため、2人同時に同じIDで登録しようとした場合、片方の画面ではエラーが起こります。 

その際はもう一度登録しなおせばよいのですが、これが頻繁に起こると、ユーザーはストレスを感じると思います。 

ミムチ
ミムチ
利用者数が多いアプリで、同時登録する可能性が高い場合、この方法も微妙ですな…

③Power Automateで採番する​

そのため最後に、Power Automateを使ったID列の自動採番方法を紹介します。 

Power Automate を使えば同時に登録しても、エラーはおこりませんし、ID列も自分で作成したものなので、データ移行の問題もありません。 

全体の流れとしては、一度SubmitForm関数データを登録した後、Power AutomateでAutoIDを更新します。 

最初SubmitFormでデータ登録する際、作成したID列は空にするため、必須入力にはせず、任意入力としておきましょう。 

1.Power AppsからPower Automateフローを呼び出すには、画面左の「Power Automateを選択します。 

2.「フローの追加」から「フローを新規作成する」を選択しましょう。 

3.最初のトリガーはPower Appsになります。 

Power Apps側で、Power Automateを呼び出す関数式を書きますが、その際に、SharePointリストのIDを引数として渡します。

Power Appsから渡す引数を、Power Appsトリガーで設定します。

「入力の追加」>「数」をクリックします。 

そして引数名は「ListID」とします。

3.次に「SharePoint」コネクタの、「複数の項目の取得」アクションを追加します。 

これは、SharePointリストの項目を取得するアクションです。

4.対象のSharePointリストを選択し、詳細オプションで、並べ替え順をID列の降順にして、上から順に取得で1を指定すると、AutoIDが最大のレコードのみ取得できます。 

サイトアドレス:SharePointリストのサイトを選択

リスト名:SharePointリストを選択

並べ替え順:「ID列名 desc」と入力

上から順に取得:「1」と入力

特定のレコードのみを取得したい場合、フィルタークエリ、並べ替え順、上から順に取得等の設定をして、レコードの絞り込みができます。

5.次のアクションでは、「変数を初期化する」アクションを選択します。

6.ここで自動採番するID列の数値を、以下のように設定します。 

名前:任意の変数名を入力

種類:整数

値:式で、以下の値を設定
add(int(outputs(‘複数の項目の取得’)?[‘body/value’][0][‘ID列名’]),1)

outputs(‘複数の項目の取得’)?[‘body/value’]は、動的なコンテンツで、複数の項目の取得で取得したリストのValueを選択します。 

作成したIDは整数で設定したはずですが、ここではFloat形で取得されるため、一旦int関数で整数にする必要があるようです。

新規に登録する値は、これに1を足した値になるため、Add関数式を使います。 

Add関数は、第一引数で指定した値に、第二引数で指定した値を足したものを返してくれます。 

7.最後に「SharPoint」コネクタの「項目の更新」アクションを追加し、以下の設定をします。

サイトのアドレス:SharePointリストのサイトを選択

リスト名:SharePointリストを選択

ID:動的なコンテンツから「ListID」(Power Appsから受け取る引数)を選択

作成したID列:動的なコンテンツから「変数の初期化」で設定した変数を選択

ID列はSharePointリストのデフォルトのID列です。 

動的なコンテンツから「PowerAppsで確認」を選ぶと、Power AppsからPower Automateフローを呼び出す際に、関数式の引数で値を指定することができます。

8.これでPower Automateフローは完成したので、保存してPower Apps画面に戻ります。 

9.Power Apps編集画面で、登録アイコンの「OnSelectプロパティ」に「SubmitForm関数式」を記載します。

10.SubmitForm関数成功時に呼び出される、Formコントロールの「OnSuccess」プロパティで、Power Automateフローを呼び出す以下の関数式を設定します。 

If(IsBlank(Form名.LastSubmit.ID列名) = true,
 フロー名.Run(Form名.LastSubmit.ID),
 true
);

Power Automateを呼び出す関数式は、フロー名.Run(引数)です。

「Form名.LastSubmit.ID」は、Power Automateに渡す引数(ListID)になります。

フォーム名.LastSubmitで、直前に登録したレコードを取得できます。

自動採番するのは、AutoIDが登録されていないときのみなので、If関数と、IsBlank関数を使い、上記のような条件分けをします。

※AutoID列が既に登録されている場合は、Trueと書けばなにも実行されません。

11.動作確認してみます。

データを登録すると、Power Automateが実行され、ID列が自動採番されますが、Power Automateフローの実行に多少時間がかかるので、データをリフレッシュしないと反映されません。 

12.自動でリフレッシュしたい場合は、Timerコントロール等を使い、データソースのRefresh関数を入れるとよいと思います。 

このような感じで、3つの方法で、ID列の自動採番を実装できました! 

最後に

本日はPower AppsでSharePointリストに登録時、SharePointリストのID列を自動採番する方法を3つ紹介しました。​

SharePointリストのID列自動採番方法

  1. SharePointリストの既存のID列を使う方法
  2. Power Appsでの登録時に、ID列のデータをFirst関数で指定して登録する方法
  3. Power Appsでの登録時に、Poewr Automateを呼び出し、ID列を自動採番する方法

それぞれの実装方法の特徴を踏まえ、状況に応じて一番最適な実装方法を選択しましょう。​

パワ実
パワ実
Power Appsでデータ登録する際のID列自動採番方法については、様々な意見があると思います。

この方法が正解!というものはないため、今回私が紹介した内容についても、​1つの考え方として参考にしていただければと思います。​​

ABOUT ME
パワ実
DX推進担当(IT部門) 2021年からPower Platform(Power BI、Power Apps、Power Automate)を勉強中。 Power Platformを使っていく中で、知りえた情報を発信している。 Youtube、Twitterでの情報発信もしています!

Power Platformのご依頼・ご相談について

Power Platformについてのご相談、お仕事のご依頼については、
こちらのお問い合わせページをご確認ください。