DXを目指すローコード入門

PowerPlatformやローコードツールの知識をアウトプットする備忘録です。

【PowerAutomate】FormatNumberで空白がある場合のエラー回避方法

はじめに

PowerAutomate上で数値を指定した書式の文字列に変換する場合、FormatNumber関数を使用して型を整えることができます。

3桁ごとにカンマ区切り formatNumber(12345678,'#,#','ja-jp')
formatNumber(12345678,'N0','ja-jp')
12,345,678
円表示 formatNumber(12345678, 'C2', 'ja-jp') ¥12,345,678.00
10桁固定 formatNumber(12345678,'D10','ja-jp') 0012345678

ただしFormatNumber関数を使用する際、数値がない(空白を含む)データを扱う場合に注意が必要で、空白があるとFormatNumber関数は数値として解釈できず、フローにエラーが発生します。

今回は空白があってもフローにエラーを出さず、値があれば正しくフォーマットする式を解説します。

 

手順

  1. エラーがでる挙動の確認

    リストとフローを用意してどのようなエラーがでるか再現してみます。
    今回はSharepointリストの「項目が作成されたとき」をトリガーにして、数値列(Number1とNumber2の二つ)の内容をメールに差し込む形にしたいと思います。

  2. エラーが出る式の設定

    3桁区切りの型に変換するようFormatNumber関数を指定して保存します。

    挙動のテストとして、SharepointリストのNumber1列に「12345678」、Number2列に「987654321」と入力した場合、メールでは以下のようにフォーマットされた数値が表示されました。

    次はNumber1列に「1234578」、Number2列は何も入力しない場合の挙動を確認します。

    フローがエラーとなりました。エラー内容は以下の通りです。

    Unable to process template language expressions in action '共有メールボックスからメールを送信する_(V2)' inputs at line '0' and column '0': 'The template language function 'formatNumber' expects its first parameter to be an integer or a decimal number. The provided value is of type 'Null'. Please see https://aka.ms/logicexpressions#FormatNumber for usage details.'.

    つまりは「指定されたフィールドの型が 'Null' になっています」とのことです。

  3. FormatNumber式を修正

    FormatNumber式をそれぞれ以下の式に修正します。

    if(equals(triggerBody()?['Number●'], null), null, formatNumber(triggerBody()?['Number2'], 'N0', 'ja-jp'))


    「Number1(もしくはNumber2)」が空白でない場合、3 桁ごとにカンマで区切った形式でフォーマットし、値が空白であればnull を返します。

  4. 動作の確認

    これでフローの設定は完了です!空白のデータでもフローエラーで止まることなく実行することができました。

まとめ

空白があってもエラーを回避しつつ、データがある場合には正しくフォーマットすることができました。フローが正しく動作するか確認するときは、空白データでも正しく動くかなど様々なパターンで確認しましょう!