ソースメッセージ属性へのアクセス

インバウンドまたはアウトバウンドメッセージフローの変換マップまたはリファレンスマップを作成する場合、それらのマップ内でソースメッセージ属性にアクセスできます。その後、属性を変換済みメッセージペイロード内の項目にマップしたり、属性値をマッピングロジック内で使用して動的条件を実行したりできます。

一般的なユースケース

ソースメッセージ属性へのアクセスは多くのユースケースで役立ちます。たとえば、動的メッセージルーティングの決定を実行したり、特定の機能を実行したり、メッセージフローの実行のデータ変換内で項目をマップしたりするのに役立ちます。

一般的なユースケースのいくつかを次に挙げます。

  • エンドツーエンドのトランスミッショントレースを実現する

    トランスミッション ID は変換された JSON または XML 出力ファイルに渡されるため、変換マップ内でトランスミッション ID にアクセスすることで、エンドツーエンドのトランスミッショントレースが可能になります。

  • 属性をマップしてバックエンドに渡す

    たとえば、バックエンドでソースファイル名または特定の HTTP ヘッダーを表示する必要がある場合、ファイル名または HTTP ヘッダーにアクセスして、値を変換済みメッセージペイロード項目にマップできます。

  • 変換内のファイル名の一部またはパターンのいずれかに基づいてマッピングロジックを適用する

    たとえば、substring 操作を使用してファイル名のプレフィックスにアクセスし、そのプレフィックスに基づいて動的マッピングロジックを作成できます。

  • 属性をマップして検索で使用できるようにする

    たとえば、メッセージ種別のリファレンスマップ内でカスタムメッセージ属性としてソースファイル名または特定の HTTP ヘッダー値にアクセスし、それらの値をアクティビティ画面で容易に検索することができます。

詳細は、「​ユースケース実装例​」を参照してください。

アクセスできるソース属性は、​b2bMessageContext​ という定義済み変数内で使用できます。この変数のコンテンツは、ソースエンドポイントのプロトコルによって異なります。

AS2 ソースエンドポイント

AS2 を介して受信するメッセージの ​b2bMessageContext​ 変数には、次の項目が含まれます。

  • sourceProtocol

  • transmissionId

  • sourceEndpointAttributes:

    • as2MessageId

    • as2From

    • as2To

    • fileName

    • subject

    • fileSize

  • customProtocolHeaders

    セキュリティ上の理由で、プレフィックス ​x-apm-​ を持つヘッダーのみは ​b2bMessageContext​ 変数内で使用できます。

次に例を示します。

{
  "b2bMessageContext": {
    "sourceProtocol": "AS2",
    "transmissionId": "06bc20c8-475e-4a6f-b010-9b7933b2bfac",
    "sourceEndpointAttributes": {
        "as2MessageId": "<2023-04-12T19:37:42.273-46b95696-83f4-4e65-9222-61c40a854200@partnera_mythical-as2>",
        "as2From": "partnera",
        "as2To": "mythical-as2",
        "fileName": "EDI_850_20230401_1245678.edi",
        "subject": "EDI Message via Mule Generic Service",
        "fileSize": 3887
    },
    "customProtocolHeaders": {
      "x-apm-order-type": "drop-ship",
      "x-apm-tracking-id": "9d26d4ce-59ea-4448-8b51-ccc975d4efec"
    },
    "messageId": "9bf446f8-4a02-475f-afa3-c8772a340154"
  }
}

FTP および SFTP ソースエンドポイント

FTP または SFTP を介して受信するメッセージの ​b2bMessageContext​ 変数には、次の項目が含まれます。

  • sourceProtocol

  • transmissionId

  • sourceEndpointAttributes:

    • fileName

    • filePath

    • fileSize

    • fileTimeStamp

    • partnerReferenceId

      この属性は、パートナーリファレンス ID が設定されている [Receive from Partner (パートナーから受信)] エンドポイントでのみ使用できます。

  • messageId

次に例を示します。

{
  "b2bMessageContext": {
    "sourceProtocol": "SFTP",
    "transmissionId": "3ef5654a-5cda-41b1-8909-59a28c8b1537",
    "sourceEndpointAttributes": {
      "fileName": "RandomMessageType_PO_20230331_1559_003.xml",
      "filePath": "/partners/pacific-corp/in-orders",
      "fileSize": 4889,
      "fileTimeStamp": "2023-04-05T15:16:29",
      "partnerReferenceId": "PACIFICCORP"
    },
    "messageId": "cdaf6c12-bb3b-4978-9ac6-e8ace053f7c5"
  }
}

HTTP および HTTPS ソースエンドポイント

HTTP または HTTPS を介して受信するメッセージの ​b2bMessageContext​ 変数には、次の項目が含まれます。

  • sourceProtocol

  • transmissionId

  • sourceEndpointAttributes:

    • path

    • fileSize

  • customProtocolHeaders

    セキュリティ上の理由で、プレフィックス ​x-apm-​ を持つヘッダーのみは ​b2bMessageContext​ 変数内で使用できます。

  • messageId

次に例を示します。

{
  "b2bMessageContext": {
    "sourceProtocol": "HTTPS",
    "transmissionId": "a7a800ad-4117-40c1-98a0-79892c982fd4",
    "sourceEndpointAttributes": {
    "path": "/",
    "fileSize": 866
    },
    "customProtocolHeaders": {
      "x-apm-order-number": "ORD12345-A",
      "x-apm-order-type": "drop-ship"
    },
    "messageId": "cdaf6c12-bb3b-4978-9ac6-e8ace053f7c5"
  }
}

ユースケース実装例

次の例は、ソースメッセージ属性に関するいくつかの一般的なユースケースの実装方法を示しています。

この例は、メッセージフローの変換マップ内で変換済みデータペイロードの ​messageId​ 属性と ​fileName​ 属性をマップする方法を示しています。

messageId: vars.b2bMessageContext.messageId
fileName: vars.b2bMessageContext.sourceEndpointAttributes.fileName

この例は、メッセージフローの変換マップ内でファイル名のプレフィックスメッセージに基づいてマッピングロジックを適用する方法を示しています。

POPurpose:
substringBefore(vars.b2bMessageContext.sourceEndpointAttributes.fileName, "_") default "PO-CREATE",

この例は、ソースファイル名に対して ​substringBefore​ 操作を実行し、​_​ より前の値を取得してパートナーリファレンス識別子として使用する方法を示しています。

%dw 2.0
output application/json
import * from dw::core::Strings
ns ns0 http://xmlns.mulesoft.com/enterpriseobjects/b2b/
---
{
	partnerReferenceId: substringBefore(vars.b2bMessageContext.sourceEndpointAttributes.fileName, "_") default "UNKNOWN" ,
	hostReferenceId: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#Seller,
	businessDocumentKey: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#PurchaseOrderNumber,
	customAttributes: [
		{
			alias: "purchaseOrderNumber",
			values: [payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#PurchaseOrderNumber]
		},
		{
			alias: "buyerEmail",
			values: [payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#BuyerEmailID]
		}	]
}

この例では次の方法を示します。

  • FTP または SFTP の [Receive from Partners (パートナーから受信)] エンドポイント設定に関連付けられたパートナー識別子をパートナーリファレンス識別子として使用してメッセージをルーティングします。

  • ソースファイル名をカスタムメッセージ属性としてマップします。

%dw 2.0
output application/json
ns ns0 http://xmlns.mulesoft.com/enterpriseobjects/b2b/
---
{
	partnerReferenceId: vars.b2bMessageContext.sourceEndpointAttributes.partnerReferenceId,
	hostReferenceId: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#Seller,
	businessDocumentKey: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#PurchaseOrderNumber,
	customAttributes: [
		{
			alias: "purchaseOrderNumber",
			values: [payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#PurchaseOrderNumber]
		},
		{
			alias: "buyerEmail",
			values: [payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#BuyerEmailID]
		},
		{
			alias: "sourceFileName",
			values: [vars.b2bMessageContext.sourceEndpointAttributes.fileName default “UNKNOWN]
		}
	]
}

この例は、受信した HTTP メッセージのカスタムヘッダーをカスタムメッセージ属性としてマップする方法を示しています。

%dw 2.0
output application/json
ns ns0 http://xmlns.mulesoft.com/enterpriseobjects/b2b/
---
{
	partnerReferenceId: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#Seller,
	hostReferenceId: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#Buyer,
	businessDocumentKey: payload.ns0#B2BMessage.ns0#Data.ns0#PurchaseOrder.ns0#PurchaseOrderNumber,
	customAttributes: [
		{
			alias: "purchaseOrderNumber",
			values: payload.ns0#B2BMessage.ns0#Data.*ns0#PurchaseOrder map ( purchaseOrder , indexOfPurchaseOrder )
						-> purchaseOrder.ns0#PurchaseOrderNumber default "UNKNOWN"
		},
		{
			alias: "supplierName",
			values: [vars.b2bMessageContext.customProtocolHeaders.'x-apm-supplierName' default "UNKNOWN"]
		}
	]
}