はじめに
メンバー間のコミュニケーションを活発化させるために、毎週席替えを実施することになりました。
自動でやってくれたら楽だなー、という気持ちよりはただただPower Automateを触りたかったので、席替えするやつ作ってみました。
要件
席替え用のフローを作るにあたって、チーム内で下記のような要件が挙がりました。
- 他PJと接する席は自社の社員(以後グループA)が座ること
- 席替えついでにレトロスペクティブのファシリテーターも決めること
- ファシリテーターはSM以外が行うこと
上記の要件を満たせるように適当に作っていきます。
完成イメージ
フロー全体
各ステップ詳細
1. グループA
idは下記のように設定しており、100~199の乱数を生成しています。
idに乱数を入れることでメンバの順番を入れ替え、席順とファシリテーターをランダムにしています。
string(rand(100, 199))
2. プロパーソート後
sort(outputs('グループA'),'id')
「1. グループA」で作成したオブジェクト配列をidでソートしています。
乱数が入っているidを昇順にソートすることでメンバの順番をランダムに入れ替えています。
3. 残りメンバ
variables('groupA')[2].name
グループAの2名とグループA以外のチームメンバをオブジェクト配列に入れています。
グループAの2名を入れているのは、要件「他PJと接する席は自社の社員(以後グループA)が座ること」を満たすためです。
他PJと接する席は2席であるため、余った2名は残りメンバと同じ扱いで再度順番を入れ替えています。
変数「グループA(groupA)」はソート済みであり偏りが発生してしまうため、グループAから取得したメンバのidも再生成するようにしています。
4. 残りメンバソート後
sort(outputs('残りメンバ'),'id')
「2. プロパーソート後」と同様に「3. 残りメンバ」をソートしています。
5. メンバー全体
ファシリテーターの要件を満たすために配列にSM(佐藤)以外を入れています。
オブジェクト配列に役職用のプロパティ値を入れてもいいかなと思いましたが、Power Automateでそこの識別処理を実装するのが(検討時点で)面倒だったのでやめました。
6. ファシリ
variables('member')[rand(0,int(length(variables('member'))))]
ファシリを決めてるだけです。
もっときれいに書けないのかなーとは思っていますが、これで動くしメンバーが変わってもこの部分の修正は必要ないので放置しています。
7. Htmlからテキスト
投稿時の体裁を整えています。
テーブル形式で出力したかったのでHtml直書きです。
色分けも同じく直書きです。
この部分はもっときれいに実装したい気持ちがありますが、考えるのが面倒で放置しています。
実装が簡単でもっと良い方法があれば教えてください(他力本願寺)
8. チャットまたはチャネルでメッセージを投稿する
Teamsのチャネルに投稿しているだけです。
メンションの必要はないため、ただただ投げてるだけですね。
終わりに
普通にプログラムを組んだ方が楽な気がしましたが、やったことないことをやるのは楽しかったで良しとしましょう。
フロー作成中に操作性があまり良くないと感じましたが、これは慣れの問題なんですかね?
フローを作成してから記事を書くまでにUIにアプデが入っていて、そこで操作性が改善されたみたいなので、今後更に良くなればいいなー・・・