統合をトリガーするカスタム・ヘッダー・フィルタの定義
イベントでカスタム・ヘッダーを定義し、それらのイベントを選択し、公開統合の作成時にリクエスト・ペイロード要素をカスタム・ヘッダーにマップしてから、サブスクライブ統合の作成時にそれらのヘッダーにフィルタを定義できます。 定義されたフィルタ条件が実行時に満たされると、サブスクライブ統合がトリガーされます。 フィルタ条件が満たされない場合、統合はトリガーされません。
機能
- イベントの作成時にカスタム・ヘッダーを定義します。
- カスタム・ヘッダー値は、公開イベント処理のマッピングで定義します。 ペイロード・データからカスタム・ヘッダーへのマッピングを定義して、ペイロード・データをフィルタリングに参加できるようにします。
- サブスクライブ統合の作成時に、カスタム・ヘッダーにフィルタを定義します。 サブスクライバは、ペイロード内のフィールドに基づいてイベントをフィルタできます(これらのフィールドがカスタム・ヘッダーにマップされている場合)。 定義したフィルタ条件が実行時に満たされると、サブスクライブ統合がトリガーされます。
- フィルタは次の2つの方法で定義します:
-
JQ式(「コード」タブを使用):
たとえば:
"filter-def": ".customheader1==\"someValue\""
JQは軽量で柔軟なコマンドラインJSONプロセッサで、主にJSONデータの抽出および操作に使用されます。 JQは入力を受け取り、出力を生成します。 「jq 1.7マニュアル」と「フィルタを作成するためのJQ式の構文」を参照してください。
-
式ビルダー(「デザイナ」タブを使用):
このオプションを使用すると、ソース・ツリーから要素または関数をドラッグし、デザイナでさらに定義して式を作成できます。 たとえば:

-
制限事項
- イベントごとに10個のカスタム・ヘッダーを定義できます。
- コード・エディタでフィルタを定義する場合は、すべての関数を小文字で入力します。
- JQ式フィルタのみがサポートされています。
- 次のJQ関数コールがサポートされています:
anyallascii_downcaseascii_upcasetonumbertostringminmaxcontainsstartswithendswithltrimstrrtrimstrlengthnowsplitfromdateiso8601floorceil
- 次のJQキーワード/フィルタ式はサポートされていません:
- '
.' (セキュリティ上の理由から、単一のドットだけはサポートされません。) whileforrepeatinput/inputs/stderrdebuginput_filenameinput_line_numberrecurseforeachuntil
- '
-
次の日時JQフィルタがサポートされています:
JQは、JSONストリーミング・パイプライン内のISO-8601タイムスタンプを簡単に解析、比較および書式設定できるようにする一連の日付ヘルパーを提供します。 最も頻繁に使用されるヘルパーは次のとおりです。fromdateiso8601: ISO-8601文字列Unix-epoch秒を解析します。now: 評価時の現在のエポック秒数を表示します。split: 純粋な文字列操作を使用してカレンダ・ピースを抽出します。- ISO-8601スタンプ:
Tで分割してクロックを削除し、-で分割してY-M-D要素にアクセスします。
- ISO-8601スタンプ:
ユース・ケース 例 日付が過去か先日付かを決定します。
# Is the schedule date still ahead? .data.scheduleDate | fromdateiso8601 > now # Has the schedule date already passed? .data.scheduleDate | fromdateiso8601 < now相対的な経過時間(時間/日/週前)を確認します。
秒/定数:- 1時間= 3600
- 1日= 86,400
- 1週間= 604,800
# ⥠1 hour ago (now - (.data.eventTime | fromdateiso8601)) >= 1 * 3600 # < 1 hour ago (now - (.data.eventTime | fromdateiso8601)) < 1 * 3600 # ⥠3 days ago (now - (.data.eventTime | fromdateiso8601)) >= 3 * 86400 # ⥠2 weeks ago (now - (.data.eventTime | fromdateiso8601)) >= 2 * 604800静的日付と比較します。
$staticDate = "2024-01-01T00:00:00Z"; # Is the event ⥠10 days before the anchor? ( ($staticDate | fromdateiso8601) - (.data.eventTime | fromdateiso8601) ) >= 10*86400 # Is the event ⥠10 days after the anchor? ( (.data.eventTime | fromdateiso8601) - ($staticDate | fromdateiso8601) ) >= 10*86400特定の日付でフィルタします。
日付(文字列"05"を返す)(.data.eventTime | split("T")[0] | split("-")[2]) == "05"Month-of-year (文字列"11"を返します)("2021-11-05T03:56:24Z" | split("T")[0] | split("-")[1]) == "11" Birthday check (string comparison, no date helpers) $mmdd ⢠constant holding todayâs month-day in âMM-DDâ form.例: 単純な文字列比較を使用して誕生日を確認します。 保存された誕生日と今日の日付の両方をMM-DDフラグメントに変換し、比較します。(.data.birthDate | split("T")[0] | split("-") | .[1] + "-" + .[2]) == $mmdd年齢(生年月日)でフィルタします。
専用の日付関数を使用しない正確なカレンダ年齢計算。 アンカー日付(today)と生年月日を数値配列に分割し、年を減算してから、現在の年の誕生日がまだ発生していない場合はさらに減算します。 完了した年数を返します。(ageYears(.data.birthDate; "2025-10-30") >= 18) // Exact calendar age Helper converts two âYYYY-MM-DDâ strings (DOB and anchor date) to numbers and applies the human calendar rule. def ageYears($dob; $today): ($today | split("-") | map(tonumber)) as $t # [$CY,$CM,$CD] | ($dob | split("T")[0] | split("-") | map(tonumber)) as $b # [$BY,$BM,$BD] | ($t[0] - $b[0]) - ((($t[1] < $b[1]) or ($t[1] == $b[1] and $t[2] < $b[2])) | if . then 1 else 0 end);タイムゾーンの処理
タイム・ゾーンが渡されない場合、
fromdateiso8601はデフォルトでローカル時間になるため、クライアントはUTC/GMTタイム・ゾーンのタイム・ゾーンを渡す必要があります。 ローカル時間に関する潜在的な問題を強調し、標準化されたUTC/GMTタイム・ゾーンをサーバーによって渡すのではなく、クライアントごとに渡すことを強調します。 クライアントは、別のタイム・ゾーンで処理する場合、日時をUTCタイム・ゾーンに変換する必要があります。 - フィルタ定義の一部としてJQベースのラムダ関数定義とその実行はサポートされていません。
ユースケースの概要
この項では、カスタム・ヘッダーを含むイベントの作成、イベントの選択、パブリッシュ統合でのカスタム・ヘッダーのマッピング、および複数のサブスクライブ統合でのヘッダーへの様々なJSONベースのフィルタ条件の追加について説明します。 このユースケースでは、次のようになります。
- イベントMLFilterEventは、次のイベントおよびカスタム・ヘッダー・コンテンツを使用して作成されます:
イベント構造 カスタム・ヘッダー { "patientIdentifier" : "12345679", "illness" : "1", "name": "min", "age":30, "weight":100 }ptname ptage ptweight - 統合MLFilterPubの公開は、イベントMLFilterEventを公開するように設計されています。 この統合は、次の接続とアクションで構成されます:
- 「RESTアダプタ」トリガーは、次のJSON形式のリクエスト・ペイロードで構成されます:
{ "patientIdentifier" : "12345679", "illness" : "1", "name" : "min", "age" : 30, "weight" : 100 } - マッパーは、ソース・リクエスト・ペイロードの患者詳細要素をターゲット患者詳細要素、ターゲット標準ヘッダー要素およびターゲット・カスタム・ヘッダー要素にマップするように構成されます。
- ログ・アクションは、標準およびカスタムのヘッダー詳細をアクティビティ・ストリームに記録するように構成されます。
- 「RESTアダプタ」トリガーは、次のJSON形式のリクエスト・ペイロードで構成されます:
- 次のサブスクライブ統合は、MLFilterEventイベントをサブスクライブするように設計されています:
- 統合MLFilterSubNoFilterのサブスクライブは、フィルタを追加するwithoutを設計します。
- サブスクライブ統合MLFilterNameSubは、次のカスタム・ヘッダー・フィルタ条件が満たされた場合にのみトリガーされるように設計されています。
{ "type": "jq_filter", "filter-def": ".ptname==\"John\"" } - サブスクライブ統合MLFilterAgeSubは、次のカスタム・ヘッダー・フィルタ条件が満たされた場合にのみトリガーされるように設計されています。
{ "type": "jq_filter", "filter-def": ".ptage|length!=0 and tonumber >= 18" }
- 3つのサブスクリプション統合がアクティブ化されます: MLFilterSubNoFilter、MLFilterNameSub、およびMLFilterAgeSubです。
- 統合MLFilterPubの公開がアクティブ化されると、リクエスト・ペイロード本文の値が指定され、統合が実行されると、次のようになります:
- 統合MLFilterSubNoFilterをサブスクライブすると、常にトリガーされ、イベントが使用されます。 このサブスクライブ統合ではカスタム・ヘッダー・フィルタが定義されていないため、トリガーされる制限はありません。
- 統合MLFilterNameSubのサブスクライブは、リクエスト・ペイロード本文で
"name": "John"が設定されている場合にのみトリガーされます。{ "patientIdentifier" : "123456790", "illness" : "1", "name": "John", "age":30, "weight":100 } - 統合MLFilterAgeSubのサブスクライブは、
ageが18以上である場合にのみトリガーされます。 この例では、リクエスト・ペイロード本文に"age": "30"が設定されています。{ "patientIdentifier" : "123456790", "illness" : "1", "name": "John", "age":30, "weight":100 }
ユース・ケースを設計して実行します。
プロジェクトのカスタム・ヘッダーを含むイベントの作成
- ナビゲーション・ペインで、「プロジェクト」をクリックします。
- プロジェクトの作成
- 「イベント」セクションまでスクロールします。
- イベントが現在存在しない場合は「追加」を、イベントがすでに存在する場合は+をクリックします。
- 名前(この例ではMLFilterEventという名前)と説明を入力し、「続行」をクリックします。
- イベント構造を定義し、「続行」をクリックします。 このイベントでは、次のJSON形式のイベントが定義されます:
{ "patientIdentifier" : "12345679", "illness" : "1", "name": "min", "age":10, "weight":100 } - +をクリックして、イベントにカスタム・ヘッダーを追加します。
- 「編集」
をクリックして、アイコンを「チェックマーク」
に変更します。 このアクションにより、行を編集できます。
- 名前とオプションの説明を入力し、完了したら「チェックマーク」
をクリックします。 次のカスタム・ヘッダーの命名規則に注意してください:
- 小文字(a-z)と数字(0-9)を使用できます。
- 20文字を超えることはできません。
- 別のカスタム・ヘッダーと重複することはできません。
- 予約済クラウド・イベント属性(データなど)にしないでください。 予約名を使用する場合は、検証に合格しません。
この例では、次のカスタム・ヘッダーが追加されています。

プロジェクトでイベントを公開するための統合の作成
- プロジェクトの詳細ページに戻ります。
- 「統合」セクションに移動し、統合を追加します。
- アプリケーション統合を選択します。
- トリガー接続を追加します。 この例では、次のJSON形式のリクエスト・ペイロードが含まれるように「RESTアダプタ」接続が定義されています:
{ "patientIdentifier" : "12345679", "illness" : "1", "name" : "min", "age" : 30, "weight" : 100 } - 「RESTアダプタ」の下にある+をクリックし、「イベントの公開」アクションを統合にドラッグします。
- カスタム・ヘッダー( MLFilterEvent)を定義したイベントを選択し、「終了」をクリックします。

- 「イベントの公開」アクションのマッパーを開き、マッピングを定義します:
- 「リクエスト・ラッパー」ソース要素を「リクエスト・ラッパー」ターゲット要素にマップします。 次に例を示します。
- 「患者識別子」から「患者識別子」
- 「疾病」から「疾病」
- 「名前」から「名前」
- 「期間」から「期間」
- 「重み」から「重み」
- ターゲットの「イベント・ヘッダー」セクションを展開して、「標準イベント・ヘッダー」および「カスタム・イベント・ヘッダー」を表示します。
- ターゲット「標準イベント・ヘッダー」を展開し、ソース「患者識別子」をターゲット「件名」にマップします。
- ターゲット「カスタム・イベント・ヘッダー」を展開し、次のリクエスト・ペイロード要素を、作成したターゲット・カスタム・ヘッダーにマップします:
- 「名前」からptname
- 「期間」からptage
- 「重み」からptweight
完了すると、マッピングは次のようになります:

- 「リクエスト・ラッパー」ソース要素を「リクエスト・ラッパー」ターゲット要素にマップします。 次に例を示します。
- マッパーを検証し、統合キャンバスに戻ります。
- 標準ヘッダーとカスタム・ヘッダーをログに記録するログ・アクションを追加します。

- ログ・アクションを保存します。
完成した統合は次のようになります。

イベントをサブスクライブする統合を作成し、フィルタがどのように機能するかをデモンストレーションします。
プロジェクト内のイベントをサブスクライブするフィルタなしの統合の作成
- イベント統合を作成します(この例では、MLFilterSubNoFilterという名前)。
- MLFilterEventイベントを選択し、「選択」をクリックします。

- 「終了」をクリックします。
- 標準およびカスタムのヘッダー詳細をログに記録するログ・アクションを追加します。

完成した統合は次のようになります。

- 統合をアクティブ化します。
イベントをサブスクライブするための名前フィルタを使用した統合の作成
- イベント統合を作成します(この例では、MLFilterNameSubという名前)。
- MLFilterEventイベントを選択し、「選択」をクリックします。

- 「フィルタの追加」をクリックします。

- コード・エディタでフィルタ条件を手動で入力します。 サポートされているフィルタ・タイプは
jq_filterのみです。 この例では、ptname(患者名)がJohnに設定されています。 実行時にこのフィルタ条件が満たされると、この統合がトリガーされます。{ "type": "jq_filter", "filter-def": ".ptname==\"John\"" }
- 「検証」をクリックし、「終了」をクリックします。
- メッセージを含むログ・アクションを追加します。

完成した統合は次のようになります。

- 統合をアクティブ化します。
イベントをサブスクライブする年齢フィルタとの統合の作成
- イベント統合を作成します(この例では、MLFilterAgeSubという名前)。
- MLFilterEventイベントを選択し、「選択」をクリックします。

- 「フィルタの追加」をクリックします。

- コード・エディタでフィルタを手動で入力します。 この例では、
ptage(患者経過時間)が18以上に設定されています。 実行時にこのフィルタ条件が満たされると、この統合がトリガーされます。{ "type": "jq_filter", "filter-def": ".ptage|length!=0 and tonumber >= 18" }
- 「検証」をクリックし、「終了」をクリックします。
- 経過時間詳細を記録するログ・アクションを追加します。

完成した統合は次のようになります。

- 統合をアクティブ化します。
統合の公開の実行および作成されたインスタンスの追跡
- 公開統合をアクティブ化します。
- マウスのポインタをパブリッシュ統合の上に置き、
をクリックして「実行」を選択します。
「本文」の下に、リクエスト・ペイロードが表示されます。
nameをJohnに変更し、ageを10に変更して、「実行」をクリックします。{ "patientIdentifier": "12345679", "name": "John", "weight": 100, "age": 10, "illness": "1" }- 公開統合インスタンスのアクティビティ・ストリームのキー・マイルストンを展開して詳細を表示します。

- プロジェクトの詳細ページに戻ります。
- 「見る」をクリックし、次に「インスタンス」をクリックします。
次の統合インスタンスが表示されます。
- MLFilterSubNoFilter: フィルタなしのサブスクライブ統合。 フィルタが設定されていないため、この統合がトリガーされます。
- MLFilterNameSub:
nameのフィルタとのサブスクライブ統合がJohnに設定されています。 フィルタ条件が満たされたため、この統合がトリガーされました。 - MLFilterPub: イベントの公開統合。

フィルタリング条件が満たされなかったため、サブスクライブ統合MLFilterAgeSubはトリガーされませんでした。
- アクティビティ・ストリームを開き、MLFilterSubNoFilterのキー・マイルストンを展開します。

- アクティビティ・ストリームを開き、MLFilterNameSubのキー・マイルストンを展開します。

統合のパブリッシュを再度実行し、作成したインスタンスを追跡
- プロジェクトの詳細ページに戻ります。
- マウスのポインタをパブリッシュ統合の上に置き、
をクリックして「実行」を選択します。
「本文」の下に、リクエスト・ペイロードが表示されます:
nameをJohnに設定したままにし、ageを30に変更し、オプションでpatientIdentifierを別の値に変更してから、「実行」をクリックします。{ "patientIdentifier": "123456890", "name": "John", "weight": 100, "age": 30, "illness": "1" }- 公開統合インスタンスのアクティビティ・ストリームのキー・マイルストンを展開して詳細を表示します。

- プロジェクトの詳細ページに戻ります。
- 「見る」をクリックし、次に「インスタンス」をクリックします。
次の統合インスタンスが表示されます。
- MLFilterSubNoFilter: フィルタなしのサブスクライブ統合。 フィルタが設定されていないため、この統合がトリガーされます。
- MLFilterAgeSub:
ageのフィルタとのサブスクライブ統合が30に設定されています。 フィルタ条件が満たされたため、この統合がトリガーされました。 - MLFilterNameSub:
nameのフィルタとのサブスクライブ統合がJohnに設定されています。 フィルタ条件が満たされたため、この統合が再度トリガーされました。 - MLFilterPub: イベントの公開統合。

- アクティビティ・ストリームを開き、各インスタンスのキー・マイルストンを展開します。 この例では、MLFilterAgeSubが展開されます。
