Mark Hammer's blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

フローで項目値を空文字に更新しようとしたけど更新されなかった話

これは以前の投稿の続編です。
フローの要件等は↓を読んでいただいた前提で進みますのでご了承ください。 sfblog.markhammer.net

はじめに

以前、行動の被招集者のうち、ユーザ一覧をテキスト項目に投入するフローを作成したのですが、実際は投入先のテキスト項目は100文字制限がありました。
そのため、被招集者が20人程度になるとエラーを返すようになります。

f:id:mark-hammer:20200906004234p:plain

そこで、作成したテキストが100文字を超える場合は100文字に切り捨てるよう、以下のように変更しました。

  • 変更前
    • 「同行者」項目に作成したテキスト変数をそのまま割り当てる
  • 変更後
    • LEFT(<作成したテキスト変数>, 100) で100文字に切り捨てたテキストを「同行者」項目に割り当てる

その後動作確認をすると、確かに100文字切り捨ては正しく動作したのですが…、
空文字更新しようとしても前のデータが残ってしまう動作になってしまいました。

f:id:mark-hammer:20200906010047p:plain

デバッグログで動作を確認する

なぜこうなってしまったのか、デバッグログで更新中の動作を確認すると…。

  • 変更前(LEFT関数未使用)
    • FLOW_VALUE_ASSIGNMENT|xxx|$Record|{Id=00U2w000006slhNEAQ,(中略), doukousya__c=, ...(後略)
  • 変更後(LEFT関数使用)
    • FLOW_VALUE_ASSIGNMENT|xxx|$Record|{Id=00U2w000006slhNEAQ,(中略), doukousya__c=null, ...(後略)

つまり、

  • 変数に空文字を代入すると、レコード項目も空文字で更新される
  • 変数にnullを代入すると、レコード項目は更新されない

という動作だったのです。

どうすればよかったのか

そもそも100文字以下の場合はLEFT関数を使用する必要はなかったのですから、「同行者」項目に割り当てる内容を IF(LEN(<作成したテキスト変数>) > 100, LEFT(<作成したテキスト変数>, 100), <作成したテキスト変数>) の数式にすればよかったのです。*1

IF関数を用いた数式に変更した後は、無事空文字更新も行われるようになりました。

おわりに

今回の話は、

  • LEFT関数で空文字の変数を設定すると、nullが返却される
  • nullをフローの割り当てでレコード項目に割り当てると、項目値は変更されない

ということが原因でした。
nullと空文字の違いは初めて知りましたが、今後このようなフローを作るときは気にしないといけませんね。

*1:最初はこちらにすべきか少し悩んだのですが「100文字以下でも動作変わらないからまとめてLEFT関数でいいだろ」と思ったのです