The InterRadish Blog

Outbound ASNs in D365

configuration feature review Jan 16, 2025

Author: Asier Gonzalez

Back to the release learning center

Introduction

An Advance Shipping Notice (ASN) is an electronic document used in warehousing and supply chain management to provide detailed information about deliveries. It is sent to the supplier to the recipient before the shipment arrives, so the recipient knows exactly what was sent and contains details about the product description, quantities, inventory dimensions, carrier information, etc.

Depending on who sends the ASN, it can be inbound (when the vendor sends you what is being delivered) or outbound (when you send your customer/s what was shipped).

Some key benefits of using ASN for warehousing and supply chain:

  • Improved supply chain visibility and planning
  • High receiving efficiency
  • Better order accuracy
  • Reduced lead times and faster processing
  • Enhanced communication and collaboration between sender and recipient

In this post, I will describe how to use outbound ASN from a functional point of view to create the packing structure, the technical structure behind it, and extensibility options.

Configuring the outbound ASN

It is possible to use the “Send ASN” button on the All Loads, Load details, Outbound Load Planning Workbench, All shipments and Shipment details forms when the selected loads or shipments meet the following criteria:

  • Load status is Shipped
  • Load direction is Outbound
  • The loading strategy is set to "Full load shipping only"

Figure 1 - WHSLoadTable form

Figure 2 - WHSOutboundLoadPlanningWorkbench form

Figure 3 – WHSShipPlanningListPage

Once the “Send ASN” button is clicked, it will trigger the sendASN() method from WHSShipConfirmClass, which will be covered in detail in the next section.

The ASN is triggered only for the customers that have the “Generate ASN” parameter set to Yes.

Figure 4 - Customer configuration

The Send ASN button triggers the logic for the selected shipment or load and creates the packing structure for the enabled customers.

This logic only creates the ASN structure, it does not send anything on its own. To send the ASN to a 3rd party, it is possible to use a DMF export integration or similar.

The highlighted entities contain the data from the generated ASN and can be used to filter and export the required information.

Figure 5 - WHSOutboundLoadPackingStructure entities

The following example shows the packing structure data before and after using the Outbound ASN functionality and the exported data:

Figure 6 - Before clicking on "Send ASN"

Figure 7 - After clicking on "Send ASN"

Figure 8 - Export of WHSOutboundLoadPackingStructure entity

Figure 9 - Export of WHSOutboundLoadPackingStructureLineV3 entity

The following example shows how an ASN should look, so data transformation will be needed in the middleware to generate the appropriate XML schema.

Figure 10 - XML sample of an ASN message

Technical structure

Send ASN button is available on WHSOutboundLoadPlanningWorkbench, WHSLoadTable and WHSShipPlanningListPage forms, only enabled when the selected load/s or shipment/s meet the validation and isSendASNEnabledForLoad() method returns true.

The "Send ASN" button triggers the public method sendASN() from WhsShipConfirm class. This method validates if the criteria above are met; otherwise, it sends a warning message and returns without running any further logic.

If a TMS route is assigned to the load, all loads for that route must be confirmed; otherwise, it sends a warning message and returns without running any further logic. If all the loads in the route are confirmed, the system loops through all the loads for the same route code and triggers the generateAndSendASN() method.

The generateAndSendASN() method validates whether the GenerateASN parameter is enabled for the customer account found on the shipment. If the validation is successful, the private method WHSShipmentASNCreator() is called to create an instance of the WHSShipmentASNCreator class and calls the generateASN() method, which creates the UOM structure and ASN items.

Note: generateASN() does not create a nested structure where multiple cases are put on the pallet; the individual items will always be directly on the pallet.

Extensibility options

  • The WHSShipConfirmationActionLoad class has the method createUOMStructure(), which calls the mustCreateSalesOrderLoadASN() that can be used as an extension point. This last method is set to false by default.
  • Two extension points should be used to create the outbound ASN structure during shipment confirmation:
    • Extend the shouldCreateUOMStructureDuringShipConfirm() and mustCreateSalesOrderLoadASN() methods from the WHSShipConfirmationActionLoad class to enable the creation of ASNs during shipment confirmation.

Ideas for additional features

  • Develop a batch job to create the ASN structures with a set recurrence. Right now the process is very manual, so added automation here would be a great benefit.
  • Extend the methods above to enable the ASN creation during shipment confirmation. Again, this is a great option for an automation scenario to reduce the manual actions needed to create the ASNs.
  • Extend the generateASN() method to enhance the functionality and allow multi-level packing structure.

Conclusion

The outbound ASN functionality in D365 is not well known and not as utilized as it could be. The structure is there to create some very useful data and enable powerful trading scenarios between organizations. Knowing the technical structure will allow you to utilize this functionality to its full potential, and in any other instances, reach out to us for ideas and help!