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.