会社で発信レポートを作成する際にレポート番号というものを振っています。今回はSharePoint上でレポート番号を自動採番する方法について調べた結果です。
要件
レポート番号はうちの会社での呼び名ですが、職制から出す正式な文書に振るユニークな番号です。うちの職場ではこんな感じ。
例えば「捜査二課-0855/2023」みたいな(部署名はテキトーです)。
- 番号と言いつつ単なる数字ではなく一定の書式があります。
- 正式な文書に振る番号という位置付けなので、重複は許されません。
- 割と頻繁に色んな人が採番するので、採番タイミングが重なることはザラです。
- うちの職場のレポート番号では、シリアルNoの部分は0パディングすることになっています。
最終的にたどり着いたやり方
試行錯誤は後述しますが、とりあえずこれならうまく行ったというやり方です。
用意するもの
SharePointリスト
- レポート番号(文字列)を入れる列は必須。ただし初期値は「取得中」固定。
- 他にはレポートの件名、発信者、発信部署など必要に応じて用意。
Power Automateフロー
- リストに「項目が作成されたとき」をトリガーにする。
- リストのID列(数値)を使ってレポート番号の文字列を作る
- 作ったレポート番号文字列を、レポート番号の列に書き込む。
- (オプション)書き込んだら、アイテムを作成した人にメールを送る。
SharePointリスト
列名 |
型 |
備考 |
レポート番号 |
文字列 |
初期値は「取得中」。入力必須に設定。 |
タイトル |
ー |
デフォルトで作成されている。レポートの件名。 |
発信部署名 |
選択肢 |
必要に応じて作成。 |
発信者 |
文字列 |
必要に応じて作成。 |
発信日 |
日付 |
必要に応じて作成。 |
ID |
ー |
デフォルトで作成されている。非表示に設定。 |
Created By |
ー |
デフォルトで作成されている。非表示に設定。 |
他にもデフォルトでいろいろ列は作成されていますが、使用するのはこんなもので。
Power Automateフロー
完成
この2つを作り込めれば採番機能が動作します。
最初にアイテムを作成した直後は番号のところに「取得中」が表示されますが、2〜3分後にPower Automateフローが動作して番号が取得されます。このフローでは最後に採番した番号をアイテム作成者に送付までします。
ダメだったパターン
最初思いついたのは次の2パターン。
- ID列に書式設定してレポート番号っぽく見せる。
- 集計列を使ってID列をレポート番号に加工して見せる。
ID列に書式設定(できません)
ID列では「この列を書式設定」のメニューは出ず、書式設定はできないみたい。
なのでこの手は使えませんでした。
集計列でIDを加工する方法(うまくいきません)
新しく列を作成して、型を「集計値」にする方法があります。この方法では、列の設定で数式に他の列のデータを参照して新たな値を作り出して表示することができます。
数式には次のように指定してみます。
="部署名-"&TEXT([ID],"0000")&"/2023"
各カッコ[ ]で列名を囲むと、その列のデータを取ってきてくれる機能です。
この数式の場合、「部署名-」という文字列と、ID値を4桁0パディングした文字列と、「/2023」という文字列を&
演算子で連結しています。
設定直後は、各行ともうまくレポート番号を作ってくれているようです。
ここで新規にアイテム登録してみると、
新しく作ったアイテムはシリアル番号「0000」として作成されてしまいました。
この辺、以前からこの問題があったようで他の方の記事でも同じような問題を指摘されてました。
どうもアイテムを登録するときに集計値の列で文字列を生成する時点ではID値が入っていないタイミング的な問題のようです。
sharepointmaniacs.com
jjs.hatenablog.jp
推測ですが、処理の順番としてはこんな感じ?
なので、アイテムが生成されたのをきっかけにして、Power Automateフロー側でID列の値をベースにレポート番号を作り出すのが現状の解決手段ということのようです。
最後に
とりあえず今の段階での実現方法について調べましたが、今後SharePoint側の動作が改善されるかもしれません。
参考にした記事
miseruit.com