リストフォームに採番機能を実装する(PowerApps編)

前回に引き続きPowerAppsネタです。

このたびもSharePointあるある要望、カスタムのIDをアイテムに振りたい!というので採番機能を実装してみます。
採番のやり方はいろいろあると思いますが、今回は最後に登録されたアイテムのIDをインクリメントする方法をとりました。

あらかじめ、SharePointリストにはcustomIDという1行テキスト列を作成しておきます。
PowerAppsでフォームを開き、customIDのデータカードで、詳細設定のロックを解除します。
ユーザーが任意の値を入れられないよう、DisplayModeプロパティをDisplayMode.Viewに設定します。

次に、Defaultと、フォームの編集中にほかのユーザーが新しくアイテムを作ったケースに備え、Updateにもに以下の式を設定します。

If(SharePointForm1.Mode=New, 
Concatenate("Custom-",Text(First(SortByColumns(customList, "ID", Descending)).ID + 1, "000")),
ThisItem.customID)

これで、新規フォームを開くとcustomIDに以下のように最後のIDをインクリメントした値が表示されます。

※Text関数で、3桁になるよう0埋め表示にしています。

なお、最後に登録されたアイテムのIDの取り方ですが、First関数でなくLast関数やMax関数、あるいはIDを使わずCountRows関数などでもいいんではないか、という意見があると思います。
しかし、PowerAppsには委任問題というものがありまして・・・
かいつまんでいうと、委任とは関数による計算を直接データソース側でできるということと解釈してます。
では、委任されていない関数を使った場合どうなるかというと、最初の500件のデータだけローカルにダウンロードして、計算対象とするということのようです。
SharePointをデータソースとする場合、委任できる関数はSort、Filter、Search関連の関数だけなので、LastやMaxを使うと最初の500件しか使われないので正しくIDが取れないのですね。
そのため、IDの降順でソートして、最初にきたアイテムのIDを参照するようにしています。
委任については、以下Microsoftのドキュメントも参考にしてください。(何をいってるかよくわからん部分もありますが)
委任について

まあ、PowerAppsの機能は日々進化しているようなので、何か月かしたら委任できる関数も増えているかもしれないですけどね。
ともあれ、通常のSharePointリストフォームだと、最後に登録されたアイテムのIDを参照するのは骨が折れますが、PowerAppsだと関数一発でとれるのでちょっと感動しました!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください