Published at: 2025-10-30

Outbound Order


I. Business Use Case Examples

As a critical component of inventory management, businesses need to specify the source Warehouse when handling outbound operations such as sales, loans, or scrap disposal. When creating an Outbound Order, you must first select the Warehouse and then choose the Products to be shipped from its Inventory list. Set the quantity for each Product and generate the Outbound Order. Similar to Inbound Orders, outbound operations can be configured to require strict approval before execution. Outbound Order management helps administrators track sales and shipping activities.

II. Creating an Outbound Order

picture coming soon:

  • Navigate to the CRM, click Outbound Order, and access the Outbound Order list page.
  • Click New in the upper-right corner to create an Outbound Order with preset or custom Record Types.

picture coming soon:

  • When creating an Outbound Order, fill in the source Warehouse (i.e., outbound Warehouse) and outbound type.
  • Products for the Outbound Order can be added from Inventory, batch Inventory, or serial numbers.
    • From Inventory: A filtered list of Inventory items (with available stock > 0) from the selected Warehouse will appear. After selection, enter the outbound quantity. For Products with batch or serial number tracking, specify the batch or serial number.
    • From Batch Inventory: A filtered list of batch Inventory items (with available stock > 0) will appear. Upon selection, the system auto-populates the Outbound Order with the batch, Product, and stock details. Only the quantity needs to be entered.
    • From Serial Numbers: A filtered list of serial numbers (excluding “Occupied” or “Used” statuses) will appear. Selected serial numbers and their corresponding Products are auto-added to the Outbound Order, with a fixed quantity of 1.
  • Upon submission, the system validates Warehouse stock levels. Insufficient stock will prevent approval.
  • After confirmation, the system deducts the actual Inventory from the outbound Warehouse.

III. System-Automated Outbound Order Creation

Outbound Orders serve as both business documents and system-level records. Any business document that reduces Inventory will automatically generate an Outbound Order, including but not limited to:

  • Transfer Order: Upon confirmation, the system generates an Outbound Order with the “Transfer Outbound” Record Type.
  • Inventory Check Sheet: When an Inventory Loss occurs, clicking “Generate Loss Outbound Order” creates an Outbound Order with the “Loss Outbound” Record Type.
  • Shipping Order: Upon confirmation, the system generates an Outbound Order with the “Sales Outbound” Record Type.
  • Spare Parts Consumption: For parts sourced from the spare parts library, confirmation triggers an Outbound Order with the “Spare Parts” Record Type.
  • Custom Objects: To reduce Inventory, manually or programmatically create an Outbound Order and associate it with the custom object.

IV. Inventory Validation Function Configuration Guide

Configure a custom function as a pre-approval condition to prevent invalidating outbound-related documents due to insufficient stock.

Applicable Documents: Transfer Order, Outbound Order, Purchase Return Order.

1) Access the Custom Function Management Page

picture coming soon:

2) Click “New Function” and Enter Configuration Details

picture coming soon:

picture coming soon:

  • Function Name and API Name: Customizable.
  • Namespace: Select “Validation Functions.”
  • Return Type: Choose “ValidateResult.”
  • Bound Object: Select “Transfer Order” (also applicable to Outbound Order and Purchase Return Order).

Proceed to the next step, paste the following code into the function input field, and click Save to complete the setup.

Map requestParam = [ "dataId":context.data._id, "apiName":context.data.object_describe_api_name ]; Fx.log.info("requsetParam=" + requestParam) def ret = Fx.proxy.callAPI("stock.flowCompletedCheckStock", null, requestParam) Fx.log.info("ret=" + ret) HttpResult data = ret.data as HttpResult if(null == data) { return "Network timeout. Please try again later." } def Map result = data.content as Map Fx.log.info("result=" + result) String msg = "Validation successful"; Boolean isSuccess = true; if(result == null || !result['result']['isSuccess']) { msg = result['result']['message'] isSuccess = false } def validateResult = ValidateResult.build{ success = isSuccess errorMessage = msg } return validateResult

3) Configure the Custom Function as a Pre-Approval Condition

picture coming soon:

picture coming soon:

Under Pre-Conditions, select “Based on Custom Function” and choose the configured function.

Submit Feedback