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などの関数に使用する通貨、数値、日付の書式設定を上書きします。

このセクションには、次の入力フィールドが含まれます。
  • 通貨コード:ISO 4217通貨コードを入力します。デフォルトはUSDです。
  • 通貨記号:$、€、¥などの通貨記号を入力します。デフォルトは$です。
  • 小数点区切り文字:小数点記号文字を入力します。デフォルトは.です。
  • 桁区切り文字:千単位のグループ化文字を入力します。デフォルトは,です。
  • リスト区切り文字:リストを文字列に結合するときに使用する区切り文字を入力します。デフォルトは, です。
  • 日付形式:PlainDateのstrftime形式を入力します。デフォルトは%Y-%m-%dです。
  • 日時形式:DateTimeのstrftime形式を入力します。デフォルトは%Y-%m-%dT%H:%M:%SZです。
  • プレーン日時形式:PlainDateTimeのstrftime形式を入力します。デフォルトは%Y-%m-%dT%H:%M:%Sです。
  • プレーン時刻形式:PlainTimeのstrftime形式を入力します。デフォルトは%H:%M:%S%.fです。
フラグ任意です。このセクションのフィールドを使用して、このステップのエンジン動作を上書きします。

このセクションには、次の入力フィールドが含まれます。
  • 混合精度:DecimalとFloatの混合算術を処理する方法を選択します。 allowはサイレントに許可し、warnは診断を出力し、denyはE103を発生させます。デフォルトはallowです。
  • 標準ライブラリのシャドーイング:letまたはfunが標準ライブラリ名をシャドーイングする場合の処理方法を選択します。 allowはサイレントに許可し、warnは診断を出力し、denyはE009を発生させます。デフォルトはwarnです。
  • nullとの連結:nullとの連結でエラーを発生させるかどうかを選択します。これがtrueの場合、x ++ nullとconcat(x, null)はxを返し、falseの場合はE205を発生させます。デフォルトはfalseです。
  • 数値をboolに強制変換:条件内で数値をBooleanの代わりに使用できるかどうかを選択します。これがtrueの場合、条件は0をfalseとして、0以外の数値をtrueとして扱います。これがfalseの場合、条件はBooleanまたはnullのみを受け入れます。デフォルトはtrueです。
  • 集計内のnull:集計関数がnull要素をスキップするかどうかを選択します。これがtrueの場合、集計関数はnull要素をスキップし、falseの場合はE202を発生させます。 E202は、親フィールドがnullの場合に発生するコードと同じです。デフォルトはfalseです。
  • スキーマガード内のすべてのアサーション失敗を報告:スキーマ検証ですべての失敗したアサーションを報告するかどうかを選択します。これがtrueの場合、スキーマ検証はすべてのアサーションを実行してすべての失敗を報告し、falseの場合は最初の失敗で停止します。デフォルトはfalseです。
  • Decimalスケール依存eq:末尾のゼロがDecimalの等価性に影響するかどうかを選択します。これがtrueの場合、Decimal('1.0')とDecimal('1.00')は等しくありません。末尾のゼロが精度をエンコードするためです。 falseの場合、等価性は値ベースです。デフォルトはfalseです。
  • 数値リテラルをdecimalとして扱う:エンジンが数値リテラルとJSON数値を型付けする方法を選択します。これがtrueの場合、正確な算術のためにすべての浮動小数点リテラルとJSON数値がDecimalになり、falseの場合はFloat(IEEE 754)になります。デフォルトはfalseです。

2つのデフォルトはすでに強制変換を許可

数値をboolに強制変換のデフォルトはtrueで、混合精度のデフォルトはallowです。どちらも、WELの他の場所では厳格な強制変換を許可します。条件内で数値をBooleanの代わりに使用でき、DecimalをFloatとサイレントに混在させることができます。このステップでWELの通常の厳格な動作を適用するには、数値をboolに強制変換をfalseに、混合精度をdenyに設定します。

式が入力を認識する方法 ​

アンダースコア(_)は、式の入力値を含む変数です。入力フィールドの各トップレベルフィールドは、_上のトップレベルキーになります。詳細については、入力変数を参照してください。

次のFormulaは、入力フィールドname(文字列)、quantity(整数)、items(オブジェクトのリスト)を使用します。

text
_.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)を発生させます。修正方法は、明示的な型コンストラクターを使用することです。

一般的なケースは、++を使用して数値を文字列に混在させる場合です。

text
// Error E101: ++ requires both sides to be String
"Age: " ++ _.age

// Fix: Convert the integer first
"Age: " ++ String(_.age) ++ " years"

文字列補間は、設定可能な強制変換フラグを除き、変換が自動的に行われる唯一の場所です。 WELは、"..."および"""..."""内で補間された式をStringに強制変換します。

text
"Order ${_.order_id} has ${length(_.items)} items"

WELは簡潔さを確実性と引き換えにします

暗黙的な変換は、統合スクリプトで見つけにくいバグの一般的な原因です。スクリプトは、値を誤った型にサイレントに強制変換しているにもかかわらず、動作したように見えることがあります。 WELは境界で多少の冗長性を受け入れることで、信頼性の高い出力を実現します。

出力 ​

WELのFormulaは、letバインディングとguard句のチェーンから構築されている場合でも、常に単一の値に評価されます。最後のdoが生成するものが、アクション出力になります。 WELにはreturnステートメントも暗黙的なラッピングもありません。

このアクションは、宣言された出力スキーマに従って、式の出力値をデータピルとして返します。宣言する形状によって、式が返す必要がある形状が決まります。

出力スキーマで宣言するもの式が返す必要があるもの
totalやcurrencyなどの複数の名前付きフィールドtotalとcurrencyをキーとするMap
オブジェクトのリストそれぞれがオブジェクトのフィールドと一致するMapのList
単一のスカラーフィールド単一のスカラー値

一般的な整形パターンは、結果を導出してから、キーが出力スキーマと一致するマップリテラルを返すことです。

text
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を取り除きます。

text
{
  id: _.id,
  note: if blank?(_.note) then Skip() else _.note
}

任意のAPIリクエストパラメーターを省略する場合など、フィールドが実際に存在しない場合に使用します。

最終更新日: