PunchOut OCI Integration

DJUST supports PunchOut workflows using the OCI protocol, in addition to the existing cXML support. This allows B2B buyers using SAP or other OCI-compatible eProcurement systems to connect seamlessly to a DJUST store, browse products, and return their selection as a structured cart.


🔐 Step 1 – PunchOut Session Initialization

The first step in an OCI PunchOut flow is to allow the buyer to “punch out” from their eProcurement system into the supplier’s storefront on DJUST.

The process follows this sequence:

sequenceDiagram
    participant EProc as 🛒 Buyer (eProcurement)
    participant PunchOut as 🧩 PunchOut Module (Djust)
    participant Backend as 🛠️ Djust Backend
    participant Frontend as 👤 Supplier Catalog (Storefront)

    %% Etapes principales du parcours PunchOut OCI

    EProc->>PunchOut: POST/GET PunchOut Request (OCI)<br>(username, password, operation=create, returnURL, EDI...)
    PunchOut->>Backend: Verifies OCI credentials
    Backend-->>PunchOut: OK / Token / Session
    PunchOut->>Frontend: Redirection to the supplier's catalog (with session)
    Frontend->>Backend: Get customer user information (auth via session)
    Backend-->>Frontend: Customer user data, personnalized prices, etc.
    Frontend-->>Frontend: PunchOut catalog displayed

To establish this connection, the eProcurement solution must perform an authentication call to the following endpoints:

ADM-PUNCHOUT-100 - POST /punchout/oci/setup/{tenantConfigurationKey}

Or

ADM-PUNCHOUT-501 - GET /punchout/oci/setup/{tenantConfigurationKey}

The tenantConfigurationKey is a secure value provided by DJUST and managed by your Customer Success Manager.

  • ✅ On success, the user is redirected to the appropriate DJUST storefront.
  • ❌ On failure, the user is redirected to an error page.

🛒 Step 2 – Cart Generation & Return to ERP

Once the user has landed on the DJUST catalog, browsed products, and added items to their cart, the session must return to the eProcurement system with the structured cart data.

This step is illustrated below:

sequenceDiagram
    participant EProc as 🛒 Buyer (eProcurement)
    participant PunchOut as 🧩 PunchOut Module (Djust)
    participant Backend as 🛠️ Djust Backend
    participant Frontend as 👤 Supplier Catalog (Storefront)

    %% The user browses the site
    Note right of Frontend: The user selects products

    Frontend->>Backend: Add products to cart
    Backend-->>Frontend: Cart updated

    %% End of flow – return to eProc
    Frontend->>PunchOut: Generate OCI form<br>with formatted cart
    PunchOut->>EProc: POST OCI return (HOOK_URL)<br>with encoded cart

    Note right of EProc: The cart is integrated into the purchase order

To retrieve the cart in OCI format, the frontend must call the following route:

ADM-PUNCHOUT-500 - GET /punchout/oci/{tenantConfigurationKey}/commercial-orders/{commercialOrderId}

This route returns the cart contents as a key-value JSON object conforming to the OCI standard:

{
  "NEW_ITEM-DESCRIPTION[0]": "Pen",
  "NEW_ITEM-PRICE[0]": "2.50",
  "NEW_ITEM-QUANTITY[0]": "10",
  "NEW_ITEM-UNIT[0]": "EA",
  "NEW_ITEM-CURRENCY[0]": "EUR",
  "NEW_ITEM-DESCRIPTION[1]": "Highlighter Set",
  "NEW_ITEM-PRICE[1]": "12.00",
  "NEW_ITEM-QUANTITY[1]": "2",
  "NEW_ITEM-UNIT[1]": "BX",
  "NEW_ITEM-CURRENCY[1]": "EUR"
}

These fields must then be used by the frontend to generate a form POST directed to the buyer’s eProcurement platform (usually via the HOOK_URL parameter passed at PunchOut session start).


🧩 Notes

  • This integration supports SAP OCI standard fields, and can be extended to include customer-specific mappings if needed.

    • Standard supported fields are:
    FieldRequiredDescription
    NEW_ITEM-DESCRIPTION[n]✅ YesProduct description
    NEW_ITEM-QUANTITY[n]✅ YesQuantity ordered
    NEW_ITEM-UNIT[n]✅ YesUnit of measure (e.g., EA, PCE)
    NEW_ITEM-PRICE[n]✅ YesUnit price
    NEW_ITEM-CURRENCY[n]✅ YesCurrency (e.g., EUR, USD)
    NEW_ITEM-VENDORMAT[n]✅ YesSupplier item ID (SKU, internal code)
    NEW_ITEM-MATGROUP[n]❌ OptionalMaterial group or internal classification
    NEW_ITEM-LEADTIME[n]❌ OptionalDelivery lead time (in days)
    NEW_ITEM-MANUFACTCODE[n]❌ OptionalManufacturer code
    NEW_ITEM-MANUFACTNAME[n]❌ OptionalManufacturer name
    NEW_ITEM-MANUFACTMAT[n]❌ OptionalManufacturer part number
    NEW_ITEM-EXT_PRODUCT_ID[n]❌ OptionalExternal product ID (for catalogs)
    NEW_ITEM-LONGTEXT[n]❌ OptionalLong description or free text
    NEW_ITEM-IMAGE_URL[n]❌ OptionalProduct image URL
    NEW_ITEM-URL[n]❌ OptionalProduct page URL
    NEW_ITEM-CONTRACT[n]❌ OptionalReferenced contract ID
    NEW_ITEM-CONTRACT_ITEM[n]❌ OptionalContract line number
  • Redirection URLs and form behavior should be handled securely on the frontend, respecting the ERP’s expectations.

  • Error handling follows Djust PunchOut error management for OCI-compliant fallbacks.