Workato Expression Languageコネクター - データ変換アクション
データ変換(コード)アクションは、レシピ内でWEL式を実行し、下流のレシピステップ用にデータを再形成します。 Workato Expression Languageコネクターは、この1つのレシピステップのみを提供します。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
入力
| 入力フィールド | 説明 |
|---|---|
| 名前 | WEL式の人が読み取れるラベルを入力します。このラベルはレシピエディターにのみ表示されます。 |
| 入力項目 | 式が使用するデータのスキーマを定義します。フィールドを手動で追加するか、JSONサンプルを使用して自動的に生成します。 |
| 出力スキーマ | 式が生成するデータのスキーマを定義します。フィールドを手動で追加するか、JSONサンプルを使用して自動的に生成します。このスキーマは、下流のステップに表示されるデータピルを決定します。 |
| WELスニペットソース | このアクションで式を直接記述するには手動で定義を選択し、Workatoプロジェクトで管理されているスニペットファイルを参照するにはリソースを使用を選択します。 |
| コード | 入力データを使用して実行するWEL式を入力します。 |
| ロケール | 任意です。エンジンエラーメッセージに使用するロケール(コントロールプレーンロケール)を選択します。デフォルトはENです。 |
| データプレーンロケール | 任意です。このセクションのフィールドを使用して、to_local_string、to_local_currency、format_dateなどの関数に使用する通貨、数値、日付の書式設定を上書きします。このセクションには、次の入力フィールドが含まれます。
|
| フラグ | 任意です。このセクションのフィールドを使用して、このステップのエンジン動作を上書きします。 このセクションには、次の入力フィールドが含まれます。
|
2つのデフォルトはすでに強制変換を許可
数値をboolに強制変換のデフォルトはtrueで、混合精度のデフォルトはallowです。どちらも、WELの他の場所では厳格な強制変換を許可します。条件内で数値をBooleanの代わりに使用でき、DecimalをFloatとサイレントに混在させることができます。このステップでWELの通常の厳格な動作を適用するには、数値をboolに強制変換をfalseに、混合精度をdenyに設定します。
式が入力を認識する方法
アンダースコア(_)は、式の入力値を含む変数です。入力フィールドの各トップレベルフィールドは、_上のトップレベルキーになります。詳細については、入力変数を参照してください。
次のFormulaは、入力フィールドname(文字列)、quantity(整数)、items(オブジェクトのリスト)を使用します。
_.name // The value mapped into the name input field
_.quantity * 2 // Double the value of quantity. Arithmetic works directly on integers.
_.items // The whole listサンプルJSONからスキーマを設定する
どちらのスキーマデザイナーも、貼り付けたサンプルJSONドキュメントからスキーマを推測できます。通常、これが設定する最も速い方法です。代表的なサンプルを貼り付け、デザイナーにフィールドリストを作成させてから、推測で把握できない内容を調整します。
推測は、ネスト、オブジェクトのリスト、フィールド名などの構造を正しく取得します。また、文字列、数値、ブール値を正しく区別しますが、宣言されたスキーマが制御するすべてを表現できるわけではありません。
スキーマ推測で誤りやすい内容
- 数値精度:サンプル
19.99は浮動小数点数として推測され、Decimalにはなりません。金額やその他の精度が重要なフィールドでは、型を手動でDecimalに設定します。式が受け取るのは宣言された型であり、DecimalとFloatは算術演算で混在できません(E103)。 - 日付と日時:JSONには時間型がないため、サンプル
"2024-01-15"はプレーン文字列として推測されます。フィールドがWELの日付またはタイムスタンプとして式に届く必要がある場合は、デザイナーでその型を設定します。それ以外の場合、式は文字列を自分で解析する必要があります。 - 任意フィールド:デザイナーは、サンプルに存在するすべてのフィールドを通常のフィールドとして推測します。任意フィールドは自分でマークします。マッピングされていない任意の入力フィールドは、
nullとして式に届きます。式が必須の出力フィールドを生成できない場合、E220が発生します。 - 空の値とnull値:デザイナーは、空のリスト(
[])から項目型を推測したり、nullからフィールド型を推測したりできません。少なくとも1つの値が設定された要素と、全体に実際の値を含むサンプルを使用します。
同じサンプルドキュメントを使用して、式をローカルでテストできます。詳細については、クイックスタートを参照してください。
型は暗黙的に変換されません
WELは型間を暗黙的に変換しません。演算子と関数はオペランドの型をチェックし、一致しない場合はエラー(通常はE100、E101、またはE102)を発生させます。修正方法は、明示的な型コンストラクターを使用することです。
一般的なケースは、++を使用して数値を文字列に混在させる場合です。
// Error E101: ++ requires both sides to be String
"Age: " ++ _.age
// Fix: Convert the integer first
"Age: " ++ String(_.age) ++ " years"文字列補間は、設定可能な強制変換フラグを除き、変換が自動的に行われる唯一の場所です。 WELは、"..."および"""..."""内で補間された式をStringに強制変換します。
"Order ${_.order_id} has ${length(_.items)} items"WELは簡潔さを確実性と引き換えにします
暗黙的な変換は、統合スクリプトで見つけにくいバグの一般的な原因です。スクリプトは、値を誤った型にサイレントに強制変換しているにもかかわらず、動作したように見えることがあります。 WELは境界で多少の冗長性を受け入れることで、信頼性の高い出力を実現します。
出力
WELのFormulaは、letバインディングとguard句のチェーンから構築されている場合でも、常に単一の値に評価されます。最後のdoが生成するものが、アクション出力になります。 WELにはreturnステートメントも暗黙的なラッピングもありません。
このアクションは、宣言された出力スキーマに従って、式の出力値をデータピルとして返します。宣言する形状によって、式が返す必要がある形状が決まります。
| 出力スキーマで宣言するもの | 式が返す必要があるもの |
|---|---|
totalやcurrencyなどの複数の名前付きフィールド | totalとcurrencyをキーとするMap |
| オブジェクトのリスト | それぞれがオブジェクトのフィールドと一致するMapのList |
| 単一のスカラーフィールド | 単一のスカラー値 |
一般的な整形パターンは、結果を導出してから、キーが出力スキーマと一致するマップリテラルを返すことです。
let items = _.order.items
>> filter_by(i ~> i.qty * i.unit_price > 50) do
{
order_id: _.order.id,
line_count: length(items),
total: items >> map_by(i ~> i.qty * i.unit_price) >> sum,
currency: _.order.currency
}出力スキーマでorder_id、line_count、total、currencyを宣言している場合、4つすべてが下流のステップでデータピルになります。
一致ルール
Workatoは、式の結果を出力スキーマに一致させるときに、次のルールを適用します。
- フィールド名は完全に一致する必要があります:スキーマフィールド
lineCountは、式キーline_countと同じデータピルではありません。 Workatoは、結果には存在するがスキーマには存在しないキーをデータピルとして公開しません。それらは生のアクション出力には引き続き表示されますが、下流のステップから参照することはできません。スキーマで宣言されているが結果に存在しないキーは、nullデータピルとして表示されます。 - 型はスキーマと一致する必要があります:結果の型が宣言された型と異なる場合、Workatoは文字列フィールドに対する
IntegerからStringへの変換など、標準の強制変換を試みます。型に互換性のない形状(スキーマがリストを想定している場所のマップ、またはその逆)は、ランタイムエラーを生成します。可能な限り、結果の形状をスキーマと同一に保ちます。 - スキーマは下流のデータピルの信頼できる情報源であり、WELが生成するものの信頼できる情報源ではありません:WELは式を評価し、値を返します。結果をスキーマに一致させる責任はユーザーにあります。
Skipでフィールドを省略する
Skipを使用して、任意フィールドをnullとして出力するのではなく、出力から完全に省略します。 WELは結果を返す前に、結果からSkipを取り除きます。
{
id: _.id,
note: if blank?(_.note) then Skip() else _.note
}任意のAPIリクエストパラメーターを省略する場合など、フィールドが実際に存在しない場合に使用します。
関連情報
- Workato Expression Language:このアクションが実行する言語です。
- クイックスタート:さまざまなWELワークフローを示す例です。
- データ型:16個のWELデータ型と、それぞれを使用するタイミング。
- エラーコード:
E100、E103、E202、E205、E009、E220などのジョブ失敗をトラブルシューティングします。
最終更新日: