🎃

Dataverse (for Teams 含む) オートナンバー列を Power Automate でリセットする

に公開

Power Automate で Dataverse のオートナンバー列をリセットするフローの作成方法を記載します
スケジュール起動で1日1回実行してあげることで、yyyyMMdd00001、yyyyMMdd00002... みたいな採番を行うことが可能です
Dataverse ならもちろんのこと、Dataverse for Teams でも可能です

事前準備

オートナンバー列の定義

Dataverse (for Teams) のテーブルを作成し、オートナンバー列を以下のように定義(桁数は任意)しておきます

作成手順

ここからオートナンバーの数え始めの基準値(シード値)を更新するスケジュール済みのフローを作成します

1. 日本時間の0時に実行するスケジュール済みのフローを作成

まず、今回はオートナンバーに日付を取り入れるため、毎日リセットできるように1日1回0時に実行するトリガーを設定します

2. (任意)確実に日付を跨いで実行させるため遅延アクションを配置

次に、一部の環境で、たまに11時59分59秒にフローが開始されて正常にリセットできなかったことがあったので、遅延アクションで5秒待機を設定します

3. オートナンバーをリセットするアクションを配置

最後に、オートナンバーをリセットするため Dataverse コネクタから Perform an unbound action (バインドしていないアクションを実行する) を設置します
このアクションは、Dataverse に用意されている Action を実行するためのもので、オートナンバーのリセット以外にも、取引先企業の重複をマージする、レコードの一括削除を実行するなど普段画面から行っている操作の裏側にある機能を呼び出すことができるものです
今回は、以下のようなパラメータを設定することで、オートナンバーのリセットを行います

項目 説明
Action Name SetAutoNumberSeed 実行したいアクションの名前を入力
item/EntityName test_sample_table オートナンバー列を持つテーブルの名前を入力
item/AttributeName test_name オートナンバー列の名前を入力
item/Value {以下の数式} リセット後の基準値を入力

数式は、yyyyMMdd 形式の採番となるよう、日本時間の現在日時を取得したものと、基準値(0001)を組み合わせたものにしています

concat(formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'), 'yyyyMMdd'), '0001')

動作確認

フローの実行前のデータ

実行前の6/11に作ったデータ

フロー実行後のデータ

実行後の6/13に作ったデータ

無事リセットできました
よく要望にはあがるけど、実装するのはちょっと面倒な日次でリセットさせる採番機能について困っている方はぜひ使ってみてください

参考

Dataverse Action SetAutoNumberSeed
https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/reference/setautonumberseed?view=dataverse-latest

Dataverse Action
https://learn.microsoft.com/en-us/power-apps/developer/data-platform/webapi/reference/actions?view=dataverse-latest

その他

注意点

  • オートナンバー列には、日付を出力する仕組み(DATETIMEUTC)がありますがこれはあくまで UTC 基準で日付を出力しますので、日本の利用者を前提とした場合を想定してフロー中で日本日付を取得しています
  • Dataverse for Teams でテーブルのプライマリ列をオートナンバー列の設定に変更するには、Dataverse for Teams の画面からテーブルの定義を変更するのではなく、Power Apps のソリューション画面から列の定義を変更する必要があります 普通にできましたので間違いでした

Discussion