Formulaに条件を追加
予期しないシナリオに対して耐性のあるレシピを作成することも重要です。 たとえば、トリガーデータに欠損値が含まれていたり、別のデータ型のデータが含まれていたりする場合があります。
条件付きロジックを使用して、こうした状況に備えたレシピを作成できます。
条件
Rubyの三項構文(if-elseステートメントの一般的なショートカット)を使用して、条件付きでFormulaを実行できます。 三項構文は次の形式です:
condition ? expression1 : expression2動作
condition
trueまたはfalseに評価されるboolean式。
expression1
conditionがtrueの場合、この式を返します。
expression2
conditionがfalseの場合、この式を返します。
例: 名または氏名の使用
次の例では、氏名Step 1または名Step 1を条件付きでメッセージ入力フィールドに渡します。
氏名Step 1が存在するかどうかを確認します。 存在する場合は氏名Step 1を出力し、存在しない場合は名Step 1を出力します。
三項Formulaの動作の詳細な説明は次のとおりです:
- 氏名Step 1
.present?は、氏名Step 1データピルに値があるかどうかを確認します。 値がある場合は、trueに評価されます。 値がない場合は、falseに評価されます。 - Formula内の2つ目の
?は、評価する条件と返す式を分離します。 注: 1つ目の?は.present?Formulaの一部であり、2つ目の?はスペース文字で区切られており、三項構文の一部です。 - ジョブの実行時に氏名Step 1データピルに値がある場合、氏名Step 1の値がメッセージ入力にマッピングされます。
- ジョブの実行時に氏名Step 1データピルに値がない場合、名Step 1の値がメッセージ入力にマッピングされます。 もちろん、この名Step 1データピルにも値がない場合、メッセージが必須入力フィールドであれば、ジョブはこのステップで失敗します。
Rubyの三項構文の詳細については、こちらの記事を確認してください。
例: 空の場合にフィールドをスキップ
レコードを更新する場合、更新されたフィールドのみを変更しながら既存のデータを保持する必要があります。 この状況では、skip Formulaを使用して、このフィールドを変更しないようWorkatoアクションに指示できます。
この例では、更新されたSalesforceレコードを使用してMarketoのリードを更新しようとします。 Salesforceの会社Step 1が存在するかどうかを確認します。 存在する場合は、Salesforceの会社Step 1をMarketoに出力します。 それ以外の場合、Marketoレコードは変更されません。
会社Step 1が存在するかどうかを確認します。 存在する場合は会社Step 1を出力し、それ以外の場合はこのフィールドを変更しません
値を渡さないようにする方法
skip Formulaは、入力フィールドにデータが渡されないようにします。
安全ナビゲーション演算子
入力がnilまたは未定義でないかどうかを確認します。 trueの場合、入力データに対して指定した操作を実行します。 それ以外の場合は、nil値を返します。
構文
入力&.操作- 入力 - 入力データピル。 任意のデータ型を使用できます。
- 操作 - 入力が
nilでない場合、このFormulaが入力データに適用されます。 このFormulaは入力データ型と互換性がある必要があります。
仕組み
安全ナビゲーション演算子(&.)は、入力データがnilまたは未定義でないかどうかを確認します。 入力データが存在する場合、操作引数で指定された操作を実行します。 それ以外の場合は、nilを返します。 この演算子を使用すると、nil値を処理するための式をより簡潔に記述できます。
例: 日付を安全に変換
値がnilになる可能性があるデータピルを操作する場合は、安全ナビゲーション演算子を使用できます。
たとえば、作成日Step 1データピルにto_date Formulaを直接適用すると、データピルの値がnilの場合にNoMethodErrorが発生します。 安全ナビゲーション演算子を使用すると、複雑な三項式を使わずにこれらのケースを処理できます。
# Instead of: created_date.present? ? created_date.to_date(format:"MM/DD/YYYY") : nil
created_date&.to_date(format:"MM/DD/YYYY")安全ナビゲーション演算子の使用
例: 安全なハッシュ取得
顧客レコードとオプションの住所情報のようなネストされたハッシュ構造がある場合にも、安全ナビゲーション演算子を使用できます。
安全ナビゲーションあり:
# This returns nil instead of an error if any key is missing
customer["address"]&.[]("billing")&.[]("zip_code")安全ナビゲーションなし:
# This could fail if "address" or "billing" doesn't exist
customer["address"]["billing"]["zip_code"]安全ナビゲーション演算子は、いずれかのキーが欠落している場合にnilを返すことでエラーを防ぎます。 このアプローチにより、NoMethodError例外を気にせずにネストされたハッシュ値を取得できます。
Last updated: