これは以前の投稿の続編です。
フローの要件等は↓を読んでいただいた前提で進みますのでご了承ください。
sfblog.markhammer.net
はじめに
以前、行動の被招集者のうち、ユーザ一覧をテキスト項目に投入するフローを作成したのですが、実際は投入先のテキスト項目は100文字制限がありました。
そのため、被招集者が20人程度になるとエラーを返すようになります。
そこで、作成したテキストが100文字を超える場合は100文字に切り捨てるよう、以下のように変更しました。
- 変更前
- 「同行者」項目に作成したテキスト変数をそのまま割り当てる
- 変更後
LEFT(<作成したテキスト変数>, 100)
で100文字に切り捨てたテキストを「同行者」項目に割り当てる
その後動作確認をすると、確かに100文字切り捨ては正しく動作したのですが…、
空文字更新しようとしても前のデータが残ってしまう動作になってしまいました。
デバッグログで動作を確認する
なぜこうなってしまったのか、デバッグログで更新中の動作を確認すると…。
- 変更前(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関数でいいだろ」と思ったのです