その他のFormula
このセクションでは、複数のデータ型で動作するFormulaについて説明します。
WorkatoのFormulaは、許可リストに登録されたRubyメソッドです。 これらのFormulaの構文と機能は、通常変更されていません。 Formulaがnull(Rubyではnilと表されます)に対して動作する場合、present?、presence、blank?を除き、ほとんどのFormulaはエラーを返し、ジョブを停止します。
RubyメソッドがWorkatoドキュメントに見つからない場合、そのメソッドは許可リストに含まれておらず、サポートされません。 許可リストへの新しいFormulaの追加をリクエストするには、Customer Success Managerにお問い合わせください。
角かっこを使用してネストされた値にアクセスする
角かっこ([])を使用すると、Workatoでハッシュ内の値にアクセスできます。 ネストされたハッシュでは、data["a"]["b"]["c"]のようにルックアップを連結できます。 ただし、チェーンのいずれかの部分が存在しない場合(たとえば、"b"がない場合)、このメソッドはNoMethodErrorを発生させます。
エラーなしでネストされた値に安全にアクセスするには、代わりに安全ナビゲーション演算子(&.)を使用します。 たとえば、data["a"]&.[]("b")&.[]("c")です。 チェーンのいずれかの部分がnilの場合、これはnilを返します。
null
null/nil値を返します。
Formulaを使用してフィールドをクリアする
入力フィールドにnullを渡しても、フィールド値はnullに更新されません。 フィールドをFormulaモードに切り替え、clear Formulaを使用してフィールド値をnullに更新します。

clear
ターゲットアプリのフィールドの値をnull/nilにクリアします。 フィールドをFormulaモードに切り替えることを忘れないでください。
ターゲットアプリのフィールドをクリアする場合は、nullではなくclear Formulaを使用します
skip
このフィールドについて宛先アプリに何も渡しません。 フィールドに既存の値がある場合、その値は変更されません。
例
この例では、更新されたSalesforceレコードを使用してMarketoのリードを更新しようとします。 SalesforceのCompanyが存在するかどうかを確認します。 存在する場合、SalesforceのCompanyをMarketoに出力します。 それ以外の場合、Marketoレコードは変更されません。
skip Formulaのユースケース例
更新データピルが空の場合、このフィールドをスキップする
更新アクションで既存の値を変更しないようにするには、skip Formulaを使用します。
uuid
UUIDを生成します。
例
| 例 | 結果 |
|---|---|
| uuid | "c52d735a-aee4-4d44-ba1e-bcfa3734f553" |
encrypt
AES-256-CBCアルゴリズムを使用し、シークレットキーで入力文字列を暗号化します。 暗号化された出力文字列はRNCryptor V3形式でパックされ、base64でエンコードされます。
Environment propertiesを使用して暗号化キーを保存する
暗号化キーをレシピにハードコードしないでください。 代わりに、Environment properties(名前にkeyまたはpasswordを含む)を使用して暗号化キーを保存します。
例
encrypt([ssn], [encryption_key])
decrypt
AES-256-CBCアルゴリズムを使用し、シークレットキーで暗号化された入力文字列を復号します。 暗号化された入力文字列はRNCryptor V3形式でパックされ、base64でエンコードされている必要があります。
Ruby decryptメソッドは、デフォルトで文字列ではなくバイト配列を返します。 Formulaに.as_string()または.as_utf8関数を追加することで、decryptメソッドの出力を文字列に変換できます。
レシピで暗号化キーをハードコードしない
暗号化キーをレシピにハードコードしないでください。 暗号化キーを保存するには、Environment properties(名前にkeyまたはpasswordを含む)を使用します。
例
decrypt([encrypted_ssn], [encryption_key])
encode_sha256
SHA256アルゴリズムを使用して文字列またはバイナリ配列をエンコードします
例
"hello".encode_sha256
encode_hex
バイナリ文字列をその16進表現に変換します
例
| 例 | 結果 |
|---|---|
"0101010101011010".encode_hex | "30313031303130313031303131303130" |
decode_hex
16進数をバイナリ文字列にデコードします
例
| 例 | 結果 |
|---|---|
"30313031303130313031303131303130".decode_hex | "0101010101011010" |
decode_url
文字列をURLデコードします。 このFormulaはURLデコードにCGI.unescapeを使用します。
例
| 例 | 結果 |
|---|---|
'https%3A%2F%2Fworkato.com%2Ffoo%3Fbar%3Dat%23anchor'.decode_url | "https://workato.com/foo?bar=at#anchor" |
'%27Stop%21%27+said+Fred"'.decode_url | "'Stop!' said Fred" |
encode_base64
Base64アルゴリズムを使用してエンコードします
例
| 例 | 結果 |
|---|---|
"Hello World!".encode_base64 | "aGVsbG8gd29ybGQh" |
decode_base64
Base64アルゴリズムを使用してデコードします
例
| 例 | 結果 |
|---|---|
"aGVsbG8gd29ybGQh".decode_base64.as_utf8 | "Hello World!" |
encode_url
文字列をURLエンコードします
例
| 例 | 結果 |
|---|---|
"Hello World".encode_url | "Hello%20World" |
encode_urlsafe_base64
Base64アルゴリズムのurlsafe変更を使用してエンコードします
例
| 例 | 結果 |
|---|---|
"Hello World".encode_urlsafe_base64 | "SGVsbG8gV29ybGQ=" |
decode_urlsafe_base64
Base64アルゴリズムのurlsafe変更を使用してデコードします
例
| 例 | 結果 |
|---|---|
"SGVsbG8gV29ybGQ".decode_urlsafe_base64 | "Hello World" |
as_string
指定されたエンコーディングでバイトシーケンスを文字列としてデコードします
例
| 例 | 結果 |
|---|---|
"SGVsbG8gV29ybGQ=".decode_base64.as_string('utf-8') | "Hello World" |
as_utf8
バイトシーケンスをUTF-8文字列としてデコードします
例
| 例 | 結果 |
|---|---|
"SGVsbG8gV29ybGQ=".decode_base64.as_utf8 | "Hello World" |
to_hex
バイナリ文字列をその16進表現に変換します
例
| 例 | 結果 |
|---|---|
"SGVsbG8gV29ybGQ=".decode_base64.to_hex | "48656c6c6f20576f726c64" |
SHA1
SHA1暗号化アルゴリズムを使用して、指定された文字列を暗号化します。 詳細については、Ruby SHA1ドキュメントを参照してください。
例
| 例 | 結果 |
|---|---|
"abcdef".sha1.encode_base64 | "H4rBDyPFtbwRZ72oS4M+XAV6d9I=" |
HMAC Formula
さまざまな署名アルゴリズムでHMAC署名を作成します
例
| 署名アルゴリズム | 例 |
|---|---|
| SHA-256 | "username:password:nonce".hmac_sha256("key") |
| SHA-1 | "username:password:nonce".hmac_sha1("key") |
| SHA-512 | "username:password:nonce".hmac_sha512("key") |
| MD5 | "username:password:nonce".hmac_md5("key") |
md5_hexdigest
文字列を受け入れ、MD5 Message-Digest Algorithmを使用してメッセージダイジェストを作成します
例
| 例 | 結果 |
|---|---|
"hello".md5_hexdigest | "5d41402abc4b2a76b9719d911017c592" |
jwt_decode
次のいずれかのアルゴリズム(RS256、RS384、RS512、HS256、HS384、HS512、ES256、ES384、またはES512)を使用してJSON web token(JWT)をデコードします。
例
| 例 | 結果 |
|---|---|
workato.jwt_decode( "eyJhbGciO...", "PEM key", 'RS256') | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS256"}}" |
workato.jwt_decode( "eyJhbGciO...", "PEM key", 'RS512') | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"RS512"}}" |
workato.jwt_decode( "eyJhbGciO...", "my$ecretK3y", 'HS256') | "{"payload" => {"sub"=>"123", "name"=>"John", ...}, "header" => {"typ"=>"JWT", "alg"=>"HS256"}}" |
jwt_encode
次のいずれかのアルゴリズム(RS256、RS384、RS512、HS256、HS384、HS512、ES256、ES384、またはES512)を使用してJSON web token(JWT)を作成します。 次の例のkidなど、その他の名前付きパラメータをヘッダーに追加します。
例
| 例 | 結果 |
|---|---|
workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS256') | "eyJhbGciO..." |
workato.jwt_encode({ name: "John Doe" }, "PEM key", 'RS512', kid: "24668") | "eyJ0eXAiO..." |
workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256', kid: "24668") | "eyJ0eXAiO..." |
workato.jwt_encode({ name: "John Doe" }, "my$ecretK3y", 'HS256') | "eyJ0eXAiO..." |
workato.jwt_encode({ name: "John Doe" }, "ECDSA Key", 'ES256') | "eyJhbGciOiJ..." |
parse_yaml
YAML文字列を解析します。 true、false、nil、数値、文字列、配列、ハッシュをサポートします
例
| 例 | 結果 |
|---|---|
workato.parse_yaml("---\nfoo: bar") | "{ "foo" => "bar" }" |
workato.parse_yaml("---\n- 1\n- 2\n- 3\n") | "[1, 2, 3]" |
render_yaml
オブジェクトをYAML文字列にレンダリングします。
例
| 例 | 結果 |
|---|---|
workato.render_yaml({ "foo" => "bar" }) | "---\nfoo: bar\n" |
workato.render_yaml([1,2,3]) | "---\n- 1\n- 2\n- 3\n" |
lookup
このFormulaを使用すると、キーを使用してWorkatoルックアップ テーブルから値をルックアップできます。 lookup Formulaではデータ型と大文字小文字が区別されます。
lookup Formulaでデータピルを使用する場合は、データを正しい形式に変換することをお勧めします。 たとえば、整数と文字列の両方を含む列を比較する予定がある場合は、.to_s Formulaを使用して整数型のデータピルを文字列に変換します。
構文
Formulaを構成するには、次の構文を使用します。
lookup('Lookup table name', 'Match column': 'Match value')['Return column']このFormulaは、指定されたルックアップ テーブル内でMatch columnがMatch valueと一致する行を検索します。 その後、その行の指定されたReturn columnから値を返します。
Formulaには次のパラメーターが含まれます。
Lookup table name: クエリするルックアップ テーブル。Match column: ルックアップキーとして使用される列。Match value: キー列内の行を識別する値。Return column: 結果を提供する列。
例
たとえば、名前がDepartment CodeでIDが6の次のルックアップ テーブルを使用します。
部門コードのサンプルルックアップ テーブル
| 例 | 結果 |
|---|---|
lookup('Department Lookup table', 'Department Code': 'ACC')['Department'] | "Accounting" |
lookup('Department Lookup table', 'Department Code': 'SLS')['Department'] | "Sales" |
lookup('Department Lookup table', 'Department': 'Marketing')['Department Code'] | "MKT" |
lookup('Department Lookup table', 'Department': 'marketing')['Department Code'] | nil 照合では大文字小文字が区別されるため、値"marketing"が見つかりません |
lookup('Department Lookup table', 'Department': 'Marketing')['Department code'] | nil 照合では大文字小文字が区別されるため、列"Department code"が見つかりません |
lookup('6', 'Department code': 'ACC')['Department'] | "Accounting" 注: ルックアップ テーブルIDは引用符 ""で囲むことを忘れないでください。 |
Lookup IDの使用
ルックアップ テーブル名とルックアップ テーブルIDは互換的に使用できます。 ルックアップ テーブルIDはURLで確認できます。
例:
https://app.workato.com/lookup_tables/<lookup_table_id>lookup_table
このFormulaを使用すると、静的ルックアップ テーブルを作成し、キーと値を定義できます。 大文字小文字とデータ型が区別されます。
例
| 例 | 結果 |
|---|---|
{"key1" => "value1", "key2" => "value2", "key3" => "value3"}["key2"] | "value2" |
{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["Low"] | "normal" |
{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["low"] | nil |
{"High" => "urgent", "Medium" => "mid", "Low" => "normal"}["normal"] | nil |
{1 => "1", 2 => "2", 3 => "3"}[2] | "2" |
{1 => "1", 2 => "2", 3 => "3"}[2.0] | nil |
{1 => "1", 2 => "2", 3 => "3"}["2"] | nil |
data_table_lookup
このFormulaを使用すると、キーを使用してData tablesから値をルックアップできます。 lookup Formulaでは大文字小文字とデータ型が区別されます。
lookup Formulaでデータピルを使用する場合は、データを正しい形式に変換することをお勧めします。 たとえば、文字列型の列を比較する予定がある場合は、.to_s Formulaを使用して整数型のデータピルを文字列に変換します。
プロジェクト名、テーブル名、ルックアップキー、およびルックアップ条件は、適切な大文字小文字を含め、Data tablesに保存されているとおりに正確に記述してください。
構文
Formulaを構成するには、次の構文を使用します。
data_table_lookup('Project name', 'Table name', 'Column name': 'Value to search on')['Return column']このFormulaは、指定されたData tables内でColumn nameがValue to search onと一致する行を検索します。 その後、その行の指定されたReturn columnから値を返します。
Formulaには次のパラメーターが含まれます。
Project name: Data tablesを保持するプロジェクト。 この値には、プロジェクト内のフォルダ名を/で区切って含めることもできます(例:'Project name/Folder name')。Table name: クエリする特定のData tables。Column name: 一致を見つけるために使用される列。Value to search on: キー列内の行を識別する値。Return column: 結果を提供する列。
例
たとえば、Weddingプロジェクト内にある名前がWedding Guestsの次のデータテーブルを使用します。
サンプル"Wedding Guests" Data table
| 例 | 結果 |
|---|---|
data_table_lookup('Wedding', 'Wedding Guests', 'Transport': 'Yes')['Seat No.'] | "10" |
data_table_lookup('Wedding', 'Wedding Guests', 'Lunch': 'No')['First Name'] | "A little" |
data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'Angela')['Table No.'] | 1 |
data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'angela')['Table No.'] | nil 照合では大文字小文字が区別されるため、値"angela"が見つかりません |
data_table_lookup('Wedding', 'Wedding Guests', 'First Name': 'Angela')['Table no.'] | nil 照合では大文字小文字が区別されるため、列"Table no."が見つかりません |
data_table_lookup('Wedding', 'Wedding Guests', 'first name': 'Angela')['Table No.'] | nil 照合では大文字小文字が区別されるため、列"first name"が見つかりません |
data_table_query
このFormulaでは、柔軟なフィルタ条件を使用してdata tablesからレコードをクエリできます。 等価性に一致して単一行のフィールド値のみを返すdata_table_lookupとは異なり、data_table_queryでは次のこともできます。
- 1回の呼び出しで、一致する複数のレコードを返す。
- 各レコードのID(後続のアクションでそのレコードの更新、削除、または関連付けに使用可能)、作成時刻、最終更新時刻を含める。
- 等価性に加えて、より大きい、より小さい、または指定可能な値のリストなどの演算子を使用してフィルタする。
大規模なクエリまたはページネーション
ページネーションが必要なクエリ、またはdata_table_queryで許可される数より多くのレコードを処理する必要があるクエリには、Search recordsアクションを使用します。
クエリでは大文字と小文字、およびデータ型が区別されます。 プロジェクト名、テーブル名、列名、およびフィルタ値が、大文字と小文字の区別を含め、Data tablesに保存されているとおりに正確に記述されていることを確認してください。
構文
Formulaを構成するには、次の構文を使用します。
data_table_query('Project name', 'Table name', {query options})Formulaには次のパラメーターが含まれます。
Project name: Data tablesを保持するプロジェクト。 この値には、プロジェクト内のフォルダ名を/で区切って含めることもできます(例:'Project name/Folder name')。Table name: クエリする特定のData tables。query options:何を返すか、および結果のフィルタ、並べ替え、制限の方法を定義するハッシュ。 クエリオプションを参照してください。
クエリオプション
query optionsハッシュは次を受け入れます。
| 名前 | タイプ | 説明 |
|---|---|---|
mode | string 必須 | クエリが一致を想定するレコード数、および0件、1件、または複数のレコードが一致した場合にFormulaが返す内容を制御します。 詳細な内訳については、Modeを参照してください。 |
where | hash optional | フィルタ条件。 Query recordsエンドポイントのwhere句と同じ演算子および構造を使用します。
$andを使用して条件を組み合わせることができます。 Date列またはDateTime列をフィルタするには、プレーンな文字列ではなく、'2026-07-01'.to_dateなどの実際のDate値またはDateTime値が必要です。 |
select | array optional | 各レコードのfieldsハッシュに含める列のリスト。 省略した場合、すべての列を返します。 |
順 | hash optional | 結果の並べ替え順序を設定します。 Query recordsエンドポイントのorderフィールドと同じ{by: <field>, direction: 'asc'|'desc'}構造を使用します。ここで、directionは'asc'(昇順)または'desc'(降順)です。 |
limit | integer conditional | modeが'all'の場合は必須です。 modeが'some'の場合は任意です(デフォルトは50)。 one_*モードでは使用されません。 許可される最大値は50です。 |
timezone_offset_secs | integer conditional | whereでdatetime列をdate値と比較するときに使用される、秒単位のタイムゾーンオフセット。 その比較では必須です。 それ以外の場合は任意です。 たとえば、DateTime列を'2026-01-01'.to_dateと比較すると、timezone_offset_secsがない場合はエラーがスローされます。 timezone_offset_secs: 0を追加すると解決します。 |
列は名前で参照できます。また、whereおよびorderで組み込みフィールド$record_id、$created_at、$updated_atを使用できます。 これらの組み込みフィールドは常に結果に含まれるため、selectにはリストできません。 列名自体が$で始まる場合は、それを参照するために追加の$を付けます(たとえば、$ spentという名前の列は$$ spentとして参照されます)。
クエリオプションキー、演算子、およびフィールド名は、それぞれシンボルまたは文字列のいずれかを受け入れます。 たとえば、where: {...}と'where' => {...}は同じように動作します。
Link to a table列とFile列は、フィルタリングおよび値の読み取りの両方で、少し異なる動作をします。
- Link to a table列でフィルタするには、リンク先レコードのIDを使用します。
- File列でフィルタするには、ファイル名を使用します。
- 返されたLink to a table列には、リンクされたレコードの
record_idとそのdisplay_nameの両方が含まれます。 - 返されたFile列には、ファイルの
filenameが含まれます。 - multivalue column(複数の値を保持できる列)は、単一の値ではなく値のリストを返します。
Mode
modeは、クエリが一致を想定するレコード数、および0件、1件、または複数のレコードが一致した場合にFormulaが返す内容を制御します。
| モード | 戻り値 | 0件または複数のレコードが一致する場合 |
|---|---|---|
one_unique | 単一のレコード。 | 一致するレコードがない場合はエラーをスローし、複数のレコードが一致する場合もエラーをスローします。 |
one_unique_optional | 単一のレコード、またはnil。 | 一致するレコードがない場合はnilを返します。 複数のレコードが一致する場合はエラーをスローします。 |
one_first | orderで設定された並べ替え順序における、最初に一致したレコード。 | 一致するレコードがない場合はエラーをスローします。 |
one_first_optional | orderで設定された並べ替え順序における、最初に一致したレコード、またはnil。 | 一致するレコードがない場合はnilを返します。 |
すべて | 一致するすべてのレコードを、recordsキーの下の配列として返します。 limitが必要です。 | 一致するレコード数がlimitで許可される数を超える場合はエラーをスローします。 |
some | 一致するレコードを最大limit件(デフォルトは50)、recordsキーの下の配列として返します。 | limitを超えるレコードは無視します。 一致数に基づいてエラーをスローすることはありません。 |
例
次の例では、Company name、Region、Revenue、Status列を持つCustomers Data tablesを使用します。
| 会社名 | 地域 | Revenue | Status |
|---|---|---|---|
| Acme Corp | West | 120000 | アクティブ |
| Acme Consulting | East | 95000 | アクティブ |
| Acme Industries | West | 60000 | アクティブ |
| Acme LLC | Central | 45000 | 非アクティブ |
| Globex Inc | East | 200000 | アクティブ |
| Initech | West | 30000 | 非アクティブ |
| Umbrella Corp | Central | 80000 | アクティブ |
| Stark Industries | East | 150000 | アクティブ |
後続のアクションで使用するレコードのIDを見つける
クエリ:
data_table_query('Sales', 'Customers', {where: {'Company name': 'Globex Inc'}, mode: 'one_unique'})['record_id']仕組み:
mode: 'one_unique'を使用して一致が厳密に1件であることを要求し、その後、結果からrecord_idを読み取ります。
結果:
「Globex Inc」という名前の唯一の会社のIDである"9309e4c0-2548-4508-b938-c781e77a7dda"を返します。
フォールバックを使用して関連値を検索する
クエリ:
data_table_query('Sales', 'Customers', {where: {'Company name': 'Nonexistent Co'}, mode: 'one_unique_optional'})&.[]('fields')&.[]('Region') || 'Unknown region'仕組み:
mode: 'one_unique_optional'を使用することで、会社が見つからない場合にエラーではなくnilを返し、その後||でデフォルトにフォールバックします。
結果:
テーブル内に「Nonexistent Co」という名前の会社が存在しないため、"Unknown region"を返します。
演算子でフィルタし、結果を集計する
クエリ:
data_table_query('Sales', 'Customers', {where: {'Company name': {'$starts_with': 'Acme'}}, mode: 'all', limit: 50, select: ['Revenue']})['records'].pluck('fields').pluck('Revenue').sum仕組み:
whereで$starts_with演算子をmode: 'all'とともに使用して、すべての一致を配列として取得し、その後それら全体の1つのフィールドを合計します。
結果:
名前が「Acme」で始まる4社の合計収益である320000を返します。
一致するすべてのレコードからフィールドを収集する
クエリ:
data_table_query('Sales', 'Customers', {where: {'Region': 'West'}, mode: 'all', limit: 50})['records'].pluck('fields').pluck('Company name')仕組み:
whereでプレーンな等価フィルタをmode: 'all'とともに使用して、すべての一致を収集し、その後各レコードから単一のフィールドを取り出します。
結果:
Westリージョンの3社である["Acme Corp", "Acme Industries", "Initech"]を返します。
最上位にランクされた一致レコードを取得する
クエリ:
data_table_query('Sales', 'Customers', {order: {by: 'Revenue', direction: 'desc'}, mode: 'one_first_optional'})&.[]('fields')仕組み:
orderを使用してRevenueで降順に並べ替え、その後mode: 'one_first_optional'で最上位の結果のみを返します。
結果:
最も収益が高い会社であるGlobex Incのフィールドを返します。テーブルにレコードがない場合はnilを返します。
戻り値
レコードは、record_id、created_at、updated_at、およびfieldsキーを持つハッシュです。 one_unique、one_unique_optional、one_first、およびone_first_optionalは、この形状の単一レコード、またはnilを返します。 例:
data_table_query('Sales', 'Customers', {where: {'Company name': 'Globex Inc'}, mode: 'one_unique'})このクエリは次のレコードを返します。
{
"record_id": "9309e4c0-2548-4508-b938-c781e77a7dda",
"created_at": "2026-07-28T15:00:00.000+00:00",
"updated_at": "2026-07-28T15:00:00.000+00:00",
"fields": {
"Company name": "Globex Inc",
"Region": "East",
"Revenue": 200000,
"Status": "Active"
}
}allとsomeは、recordsキーを持つハッシュを返します。このキーの値は、この形状のレコードの配列です。 例:
data_table_query('Sales', 'Customers', {where: {'Company name': {'$starts_with': 'Acme'}}, mode: 'all', limit: 50})このクエリは4社に一致します。 次に最初の2件を示します。
{
"records": [
{
"record_id": "...",
"created_at": "...",
"updated_at": "...",
"fields": {
"Company name": "Acme Corp",
"Region": "West",
"Revenue": 120000,
"Status": "Active"
}
},
{
"record_id": "...",
"created_at": "...",
"updated_at": "...",
"fields": {
"Company name": "Acme Consulting",
"Region": "East",
"Revenue": 95000,
"Status": "Active"
}
}
]
}最終更新日: