その他のFormula

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

このセクションでは、複数のデータ型で動作するFormulaについて説明します。

WorkatoのFormulaは、許可リストに登録されたRubyメソッドです。 これらのFormulaの構文と機能は、通常変更されていません。 Formulaがnull(Rubyではnilと表されます)に対して動作する場合、present?presenceblank?を除き、ほとんどの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に更新します。

入力フィールドのNull Formula


clear

ターゲットアプリのフィールドの値をnull/nilにクリアします。 フィールドをFormulaモードに切り替えることを忘れないでください。

入力フィールドのClear Formulaターゲットアプリのフィールドをクリアする場合は、nullではなくclear Formulaを使用します


skip

このフィールドについて宛先アプリに何も渡しません。 フィールドに既存の値がある場合、その値は変更されません。

この例では、更新されたSalesforceレコードを使用してMarketoのリードを更新しようとします。 SalesforceのCompanyが存在するかどうかを確認します。 存在する場合、SalesforceのCompanyをMarketoに出力します。 それ以外の場合、Marketoレコードは変更されません。

入力フィールドのskip Formulaskip 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を構成するには、次の構文を使用します。

text
lookup('Lookup table name', 'Match column': 'Match value')['Return column']

このFormulaは、指定されたルックアップ テーブル内でMatch columnMatch 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を構成するには、次の構文を使用します。

text
data_table_lookup('Project name', 'Table name', 'Column name': 'Value to search on')['Return column']

このFormulaは、指定されたData tables内でColumn nameValue 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サンプル"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を構成するには、次の構文を使用します。

text
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ハッシュは次を受け入れます。

名前タイプ説明
modestring
必須
クエリが一致を想定するレコード数、および0件、1件、または複数のレコードが一致した場合にFormulaが返す内容を制御します。 詳細な内訳については、Modeを参照してください。
wherehash
optional
フィルタ条件。 Query recordsエンドポイントのwhereと同じ演算子および構造を使用します。
  • 等しい($eq
  • 等しくない($ne
  • より大きい($gt
  • 以上($gte
  • より小さい($lt
  • 以下($lte
  • 値のリストに含まれる($in
  • 次で始まる($starts_with
$andを使用して条件を組み合わせることができます。 Date列またはDateTime列をフィルタするには、プレーンな文字列ではなく、'2026-07-01'.to_dateなどの実際のDate値またはDateTime値が必要です。
selectarray
optional
各レコードのfieldsハッシュに含める列のリスト。 省略した場合、すべての列を返します。
hash
optional
結果の並べ替え順序を設定します。 Query recordsエンドポイントのorderフィールドと同じ{by: <field>, direction: 'asc'|'desc'}構造を使用します。ここで、direction'asc'(昇順)または'desc'(降順)です。
limitinteger
conditional
mode'all'の場合は必須です。 mode'some'の場合は任意です(デフォルトは50)。 one_*モードでは使用されません。 許可される最大値は50です。
timezone_offset_secsinteger
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_firstorderで設定された並べ替え順序における、最初に一致したレコード。一致するレコードがない場合はエラーをスローします。
one_first_optionalorderで設定された並べ替え順序における、最初に一致したレコード、またはnil一致するレコードがない場合はnilを返します。
すべて一致するすべてのレコードを、recordsキーの下の配列として返します。 limitが必要です。一致するレコード数がlimitで許可される数を超える場合はエラーをスローします。
some一致するレコードを最大limit件(デフォルトは50)、recordsキーの下の配列として返します。limitを超えるレコードは無視します。 一致数に基づいてエラーをスローすることはありません。

次の例では、Company nameRegionRevenueStatus列を持つCustomers Data tablesを使用します。

会社名地域RevenueStatus
Acme CorpWest120000アクティブ
Acme ConsultingEast95000アクティブ
Acme IndustriesWest60000アクティブ
Acme LLCCentral45000非アクティブ
Globex IncEast200000アクティブ
InitechWest30000非アクティブ
Umbrella CorpCentral80000アクティブ
Stark IndustriesEast150000アクティブ
後続のアクションで使用するレコードのIDを見つける

クエリ:

text
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"を返します。

フォールバックを使用して関連値を検索する

クエリ:

text
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"を返します。

演算子でフィルタし、結果を集計する

クエリ:

text
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を返します。

一致するすべてのレコードからフィールドを収集する

クエリ:

text
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"]を返します。

最上位にランクされた一致レコードを取得する

クエリ:

text
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_idcreated_atupdated_at、およびfieldsキーを持つハッシュです。 one_uniqueone_unique_optionalone_first、およびone_first_optionalは、この形状の単一レコード、またはnilを返します。 例:

text
data_table_query('Sales', 'Customers', {where: {'Company name': 'Globex Inc'}, mode: 'one_unique'})

このクエリは次のレコードを返します。

json
{
  "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"
  }
}

allsomeは、recordsキーを持つハッシュを返します。このキーの値は、この形状のレコードの配列です。 例:

text
data_table_query('Sales', 'Customers', {where: {'Company name': {'$starts_with': 'Acme'}}, mode: 'all', limit: 50})

このクエリは4社に一致します。 次に最初の2件を示します。

json
{
  "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"
      }
    }
  ]
}

最終更新日: