前回に引き続きD365BC用のPower Automateコネクタに用意されたテンプレートを使って実際にクラウドフローを作って動かしてみます。今回は得意先マスタ用のテンプレートです。
テンプレート一覧から 得意先マスタ承認用のテンプレート(Request approval for Dynamics 365 Business Central customer)を選択。

使用するコネクタは前回と同じなのですべて接続確立済。

前回同様、保存ボタンを押して出たエラーをつぶしていきます。まずはCompany名のエラー。Environmentとセットで修正。(前回と同じ。)

続いて承認者の指定。とりあえず自分自身を承認者に指定。(前回と同じ)

一通りエラー解消。(前回と同じ)

保存できたので実験開始です。得意先マスタから承認を依頼します。Send Approval Requestボタンをクリック。

見た目は何も変わりませんが、 Send Approval Request ボタンが非活性になり、代わりに Cancel Approval Request ボタンが活性状態になりました。

Power Automateのクラウドフローの実行履歴を確認すると実行中が1件あります。

承認待ち状態です。

承認を実施。

するとクラウドフローが完了しました。

BCの得意先マスタに戻ってみると特に変化はありません。。

伝票だとこのようにステータスが保留になり、、

転記しようとするとエラーになります。

ですが、マスタはそのような項目がないため、代わりに何らかの項目を使用して未承認なりの制約を書ける必要があります。ここは、Blocked項目を使うのが王道です。この項目を使って「出荷(Ship)転記禁止」「請求(Invoice)転記禁止」「出荷も請求も(All)転記禁止」にできます。初期値をこれらの値にした上で、承認されたらブランクにして転記可能にする、という方法を取ります。

ただし、Power Automate側に設定の追加が必要です。テンプレートだと承認された場合の処理にBlocked項目の処理が盛り込まれていません。

単にメールを送っているだけです。Power Automateの履歴やメールで承認履歴を残した上で、手動で承認者がブロック解除するという方法もありますが、ここは自動でブロック解除したいところ。

自動で処理するためのアクションとして Update record(v3) を使用します。

Environment, Companyを指定し、API カテゴリにはworkflowEndpoint, テーブルにはworkflowCustomerを指定。

レコードを特定するIDには最初のトリガーで取得した Row IDを使用。

更新するのはBlockedの項目です。試しに Ship に変更してみます。

得意先マスタのBlockedをAllに設定し、承認依頼。

ワークフローが実行されます。

承認します。

BCのマスタのBlockedの値がShipに変更されました。成功です。

ですが、、最終的にはShipではなくブランクにしたい訳です。

ただ、クラウドフローでBlockedの値を「”」にすると、、

エラーになります。。

「Null」ならいけるかと思いきや、、

エラーになります。ここでひとしきり悩まされましたが、

エラーメッセージを改めて見ると、選択肢として許可されているのは半角スペース, Ship, Invoice, All と書いてありました。

クラウドフローの設定を半角スペースに変更して保存。

改めて承認依頼を実行すると、無事エラーが解消しました。

BCのマスタもBlockedの値がブランクになっています。成功です。

ちなみに、Update record(v3)でAPIカテゴリーをv2.0にする方法もあります。その場合、テーブル名はCustomerにします。

ちょっと面白いのは、Blockedの値の取り方です。エラーが起きるようにわざと 「Null」を指定します。

実行するエラーが起きました。

メッセージを見ると _x0020_ という値が選択肢に登場しています。

クラウドフローでBlockedの値に指定してみます。

すると問題なく通りましたw
文字コードはあまり詳しくないのですが、ざっと調べたところ _x0020_ は空白やスペースを表すコードのようです。 Unicode操作文字コード一覧(SORT EE) (hitachi.co.jp)

実運用ではもう少し手を加える必要があります。トリガー条件を見るとBlockedの値によらず起動する設定になっているので、

条件を指定する必要があるでしょう。Allの場合のみ実行されるようにしてみます。

試しにブランクの状態で承認依頼すると、

このようなエラーが発生して、クラウドフローが起動しません。(ちょっとメッセージがわかりにくい。。)

得意先を新規作成したときにどうやって初期値をAllにするか?という問題がありますが、それは別のクラウドフローを使って実現できます。(次回持越し)