- 8 minutes to read

Order Ready Stylesheet

This page provides the XSLT Stylesheet O2C - View Order Ready for the XML Order Ready messages (Step 5) in the Order-to-Cash demo.

Packing Slip PKG-2025-10005 for order ORD-10005 rendered by the O2C - View Order Ready Stylesheet, with the Stockholm ship-to address, carrier Nordic Freight, the tracking number, one packed item with its serial number, and the status COMPLETED (7.12)
The XML Order Ready message rendered as a packing slip: warehouse and zone, ship-to, shipment with carrier and tracking number, and the packed items with serial numbers.

Give the warehouse and support the packing slip. With Nodinite Stylesheets, anyone who traces an order sees where it was packed, how it ships, and the tracking number, without reading XML. On this page, you will:

  • ✅ Transform the XML Order Ready message into a packing slip with XSLT
  • ✅ Show the ship-to address and the shipment next to each other
  • ✅ Open the packing slip from Log Views and from BPM Log Search New 7.11

Understanding the Order Ready Stylesheet

A Stylesheet is tied to a Message Type. The business Log Event of Step 5, Order Completed for Transport, carries the Message Type O2C.Order.Ready/1.0, so Nodinite offers O2C - View Order Ready for it. XSLT reads the XML body directly; the namespace http://schemas.Contoso.example/O2C/1.0 is bound to the prefix o in the template, as in the Order Entry Stylesheet.

graph LR A["fa:fa-inbox Order Ready
Log Event (XML)"] --> B{"fa:fa-tags Message Type
O2C.Order.Ready/1.0"} B --> C["fa:fa-file-code O2C - View Order Ready
(XSLT)"] C --> D["fa:fa-file-alt Packing slip"] D --> E1["fa:fa-search Log Views"] D --> E2["fa:fa-sitemap BPM Log Search"] style A fill:#2678BD style B fill:#9E59BB style C fill:#3F827B style D fill:#93d16d style E1 fill:#2678BD style E2 fill:#2678BD

The Order Ready Log Event (blue) is matched to its Message Type (purple); the XSLT Stylesheet (teal) renders the packing slip (green), which users open from a Log View or from BPM Log Search (blue).

Where Users Open the Packing Slip

Where How
Log Views Search the Log View, open Action on the Order Completed for Transport event, and choose View message formatted as 'O2C - View Order Ready'.
BPM Log Search New 7.11 Click Log Search on the Order-to-Cash BPM, search for the order number, and open Action on the Ready for Transport event in the BPM Viewer.

The dialog is titled View message body formatted as 'O2C - View Order Ready' and has the buttons Open in New Window, Print, and Close. The forwarding event of the step, Packing Request Received, logs O2C.Forwarding/1.0, so this Stylesheet isn't offered there.

Stylesheet Settings

Setting Value Why
Name O2C - View Order Ready The name users pick in the Action menu
Type XSLT The Order Ready body is XML
Render as HTML Checked The template outputs an HTML page
Message Body is Json Not shown The checkbox only appears for Liquid; XSLT always reads the body as XML
Message Types O2C.Order.Ready/1.0 Only the Step 5 business event gets the Stylesheet

Input XML

The Order Ready body of order 1 as logged by the demo data script, the same message as on the Step 5 page. Warehouse, carrier, and address follow the customer (the six demo customers).

<?xml version="1.0" encoding="utf-8"?>
<OrderPacking xmlns="http://schemas.Contoso.example/O2C/1.0">
  <PackingHeader>
    <PackingId>PKG-2025-10001</PackingId>
    <OrderId>ORD-10001</OrderId>
    <PackingDate>2025-10-16T16:45:30Z</PackingDate>
    <PackingStatus>COMPLETED</PackingStatus>
    <Warehouse>WH-01</Warehouse>
    <Zone>ZONE-A</Zone>
  </PackingHeader>
  <Customer>
    <CustomerId>CUST-001</CustomerId>
    <CustomerName>Contoso Corporation</CustomerName>
    <ShippingAddress>100 Commerce Drive, Suite 100, Springfield, IL 62701</ShippingAddress>
  </Customer>
  <PackedItems>
    <PackedItem>
      <LineId>1</LineId>
      <SKU>SKU-DEMO-001</SKU>
      <Description>Demo Widget</Description>
      <OrderedQuantity>1</OrderedQuantity>
      <PackedQuantity>1</PackedQuantity>
      <SerialNumber>SN-DW-202510001</SerialNumber>
      <Condition>NEW</Condition>
    </PackedItem>
  </PackedItems>
  <ShipmentInfo>
    <TrackingNumber>TRK-20251016-10001</TrackingNumber>
    <Carrier>Standard Courier</Carrier>
    <ShippingMethod>GROUND</ShippingMethod>
    <EstimatedDeliveryDate>2025-10-21</EstimatedDeliveryDate>
    <ShipmentWeight>5.0</ShipmentWeight>
    <WeightUnit>LBS</WeightUnit>
  </ShipmentInfo>
  <OrderTotal>99.95</OrderTotal>
  <Currency>USD</Currency>
</OrderPacking>

XML to Packing Slip Mapping

XML element (prefix o) Shown in the packing slip as
o:PackingHeader/o:PackingId The title
o:PackingHeader/o:OrderId, o:Warehouse, o:Zone Order …, packed in under the title
o:Customer/o:CustomerName, o:Customer/o:ShippingAddress Ship to
o:ShipmentInfo/o:Carrier, o:ShippingMethod, o:TrackingNumber, o:EstimatedDeliveryDate Shipment
o:PackedItems/o:PackedItem Packed Items table: Line, SKU, Description, Ordered, Packed, Serial Number, Condition
o:PackingHeader/o:PackingStatus Status, as a badge

XML values show exactly as the message holds them. The packing date, the weight, and the order total are not displayed.

XSLT Template

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:o="http://schemas.Contoso.example/O2C/1.0" exclude-result-prefixes="o">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/o:OrderPacking">
    <html>
      <head>
        <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
      </head>
      <body>
        <div class="container mt-4">
          <h1 class="mb-0">Packing Slip <xsl:value-of select="o:PackingHeader/o:PackingId"/></h1>
          <span class="text-muted">Order <xsl:value-of select="o:PackingHeader/o:OrderId"/>, packed in <xsl:value-of select="o:PackingHeader/o:Warehouse"/> / <xsl:value-of select="o:PackingHeader/o:Zone"/></span>
          <div class="row mt-3">
            <div class="col">
              <h6 class="text-muted mb-1">Ship to</h6>
              <strong><xsl:value-of select="o:Customer/o:CustomerName"/></strong><br/>
              <xsl:value-of select="o:Customer/o:ShippingAddress"/>
            </div>
            <div class="col">
              <h6 class="text-muted mb-1">Shipment</h6>
              <xsl:value-of select="o:ShipmentInfo/o:Carrier"/>, <xsl:value-of select="o:ShipmentInfo/o:ShippingMethod"/><br/>
              Tracking <strong><xsl:value-of select="o:ShipmentInfo/o:TrackingNumber"/></strong><br/>
              Estimated delivery <xsl:value-of select="o:ShipmentInfo/o:EstimatedDeliveryDate"/>
            </div>
          </div>
          <h5 class="mt-4">Packed Items</h5>
          <table class="table table-sm">
            <thead>
              <tr><th>Line</th><th>SKU</th><th>Description</th><th class="text-center">Ordered</th><th class="text-center">Packed</th><th>Serial Number</th><th>Condition</th></tr>
            </thead>
            <tbody>
              <xsl:for-each select="o:PackedItems/o:PackedItem">
                <tr>
                  <td><xsl:value-of select="o:LineId"/></td>
                  <td><xsl:value-of select="o:SKU"/></td>
                  <td><xsl:value-of select="o:Description"/></td>
                  <td class="text-center"><xsl:value-of select="o:OrderedQuantity"/></td>
                  <td class="text-center"><xsl:value-of select="o:PackedQuantity"/></td>
                  <td><xsl:value-of select="o:SerialNumber"/></td>
                  <td><xsl:value-of select="o:Condition"/></td>
                </tr>
              </xsl:for-each>
            </tbody>
          </table>
          <p>Status: <span class="badge badge-success"><xsl:value-of select="o:PackingHeader/o:PackingStatus"/></span></p>
          <div class="mt-5 pt-3 border-top text-center text-muted"><small>Rendered by a Nodinite Stylesheet (XSLT) from the Order Ready message</small></div>
        </div>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Next Steps