---
schema_version: "1"
id: d59a311975a0b23f793d374b4597047f47fd1a183af79c218bb2125098d2d33a
title: Accessing Source Message Attributes
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/partner-manager/latest/access-source-message-attributes.md
canonical_url: https://docs.mulesoft.com/partner-manager/latest/access-source-message-attributes
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 8173f9a864cafb61dcb108532d9e733d3c9b9bd72ffcf93492f93591c932c8a5
description: MuleSoft Documentation Site
release: 2.x
latest: true
---
---
product: Partner Manager
version: 2.x
is-latest-version: true
---

# Accessing Source Message Attributes

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

When you create translation or reference maps for inbound or outbound message flows, you can access
source message attributes in those maps. You can then map the attributes to fields in the translated
message payload or use the attribute values in your mapping logic to perform dynamic condition
execution.

## Common Use Cases

Accessing source message attributes helps in many use cases, such as with performing dynamic message
routing decisions, performing specific functions, and mapping fields within the data transformation
in the message flow execution.

Some common use cases include:

- Achieving end-to-end transmission tracing

  Accessing transmission IDs in the translation maps enables end-to-end transmission tracing because
  these IDs are passed to the translated JSON or XML output file.

- Mapping attributes to pass them to the backend

  For example, if the backend must see the source filename or a specific HTTP header, you can access
  the filename or HTTP header and map the values to the translated message payload fields.

- Applying mapping logic based either on a filename part or pattern within the transformation

  For example, you can access a filename prefix through substring operations and then build dynamic
  mapping logic based on this prefix.

- Mapping attributes to make them available in the search

  For example, you can access the source filename or a specific HTTP header value as a custom
  message attribute in the message type’s reference map to easily search for these values in the
  Activity screens.

For more information, see [Use Case Implementation Examples](#implementation-examples).

The source attributes that you can access are available within a predefined variable named
`b2bMessageContext`. The content of this variable differs depending on the source endpoint’s
protocol.

## AS2 Source Endpoint

Messages received via AS2 contain the following fields in the `b2bMessageContext` variable:

- sourceProtocol

- transmissionId

- sourceEndpointAttributes:

  - as2MessageId

  - as2From

  - as2To

  - fileName

  - subject

  - fileSize

- customProtocolHeaders

  For security reasons, only the headers with the prefix `x-apm-` are available in the
  `b2bMessageContext` variable.

For example:

```json
{
  "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 and SFTP Source Endpoint

Messages received via FTP or SFTP contain the following fields in the `b2bMessageContext` variable:

- sourceProtocol

- transmissionId

- sourceEndpointAttributes:

  - fileName

  - filePath

  - fileSize

  - fileTimeStamp

  - partnerReferenceId

    This attribute is available only for Receive from Partner endpoints that have the partner
    reference ID configured.

- messageId

For example:

```json
{
  "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 and HTTPS Source Endpoint

Messages received via HTTP or HTTPS contain the following fields in the `b2bMessageContext`
variable:

- sourceProtocol

- transmissionId

- sourceEndpointAttributes:

  - path

  - fileSize

- customProtocolHeaders

  For security reasons, only the headers with the prefix `x-apm-` are available in the
  `b2bMessageContext` variable.

- messageId

For example:

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

## Use Case Implementation Examples

The following examples show how to implement some common use cases for source message attributes.

This example shows how to map the `messageId` and `fileName` attributes in the translated data
payload within a message flow’s translation map:

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

This example shows how to apply mapping logic based on the filename prefix message in the message
flow’s translation map:

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

This example shows how to perform a `substringBefore` operation on the source filename to get the
value before `_` and use it as the partner reference identifier:

%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\] } \] }

This example shows how to:

- Use the partner identifier associated with an FTP or SFTP Receive from Partners endpoint
  configuration as the partner reference identifier for routing the message.

- Map the source filename as a custom message attribute.

%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\] } \] }

This example shows how to map a custom header on the received HTTP message as a custom message
attribute:

%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"\] } \] }

## See Also

- [Translation Maps](https://docs.mulesoft.com/partner-manager/latest/partner-manager-maps)

- [Creating Inbound Message Flows](https://docs.mulesoft.com/partner-manager/latest/create-inbound-message-flow)

- [Creating Outbound Message Flows](https://docs.mulesoft.com/partner-manager/latest/create-outbound-message-flow)

- [Creating Reference Maps for Message Types](https://docs.mulesoft.com/partner-manager/latest/create-reference-map)

- [Tracking Transmissions](https://docs.mulesoft.com/partner-manager/latest/activity-tracking)
