TABLE OF CONTENTS
- Integration Approach
- Items Integration
- Order Management
- Purchase Orders
- Inventory Management and Adjustments
- Transfer Orders
- Return Authorizations
- Vendor Returns
- Inbound Shipments
- Work Orders
Netsuite is a complex ERP system that allows for a lot of customizations. These customizations allow a lot of flexibility in how WarehouseOS talks to and works with the data within Netsuite. The details below are a general guideline. If a specific use case is not listed below it does not mean it's not possible; it probably only means a request for that use case has not yet been made.
Integration Approach
Netsuite has standard API connections, but to streamline communication, WarehouseOS has a custom script that is installed in the Netsuite account. This script handles all of the logic both in and out of Netsuite. This script is used in conjunction with the Instalink.io platform for a streamlined and yet very flexible approach to a connection between the two systems. Integrations take these general approaches:
Scheduled Scripts for Outbound data
All data that is sent from Netsuite to WarehouseOS is handled with Scheduled Scripts in Netsuite. They can be set at a 15 minute interval. The scheduled script calls a function within the WarehouseOS custom file. This script typically looks at the result of a Saved Search and pushes the result of that search to an Instalink endpoint that will then perform data mapping and additional logic to push those orders to WarehouseOS.
Pushing the data to Instalink, instead of directly to WarehouseOS, offloads the bulk of the data transformation to another system to reduce the strain that scripts and general data movement has on a Netsuite account.Restlet for Inbound data
A single Restlet is setup and connected to a function within the WarehouseOS custom file. This Restlet provides a single point of entry and all communication between WarehosueOS and Netsuite is managed through this one call. These calls are not made directly from WarehouseOS, but Instalnk is used as a middle layer.
Using Instalink as a middle layer allows data to be prepped before being sent to Netsuite and offloads much of that strain to a middleware system. Using a Restlet with a script allows the functions to use SuiteScript language to perform details and sometimes customized actions within Netsuite.
A list of custom fields and files typically setup within Netsuite are provided within each section below.
Netsuite Object Details
Type | Name | Purpose |
SuiteScript File | netsuite-rs-[customer].js | Script file that contains all the code needed for the integration. |
Role | Instalink Auth Token | Setups all the permissions needed to create fulfillments, receipts, and other actions required by the automated integration. |
Integrations | Instalink Integration | 1st part of Authentication Token access. Provides tokens required to gain access through API calls. |
Access Token | Instalink Integration [User] Instalink Auth | 2nd part of Authentication Token access, user specific and tied to a specific role and integration. |
Restlet | Instalink Rest Action | Script file already referenced above. All inbound communication from the middleware layer into Netsuite is passed through this Restlet with a defined action. The action determines which functions in the script file are run to perform the several actions back into Netsuite |
Items Integration
A Saved Search is used to identify Items that need to be sent to WarehouseOS. After the Item Details are pushed to WarehouseOS, a Custom Field is checked indicating that the export has been made. Updates to the Items can clear this Custom Field to indicate the Item needs to be resent to the warehouse.
A Scheduled Script is run, typically every 2 hours, to check for new items and push to the warehouse. The timing of this search can be configured down to every 15 minutes.
Netsuite Object Details
Type | Name | Id | Purpose |
Custom Field | Exported to WOS | custitem_wos_exported | Gets checked by the integration after the Item has been pushed to WOS. |
Saved Search | Instalink Items to WOS | customsearch_instalink_items_to_wos | Search to find Items ready to push to WOS. |
Scheduled Script | Instalink Export Items to WOS | customdeploy_instalink_items_to_wos | Exports the contents of the saved search to a middleware endpoint which then gets pushed to WOS. |
CSV Import | WOS Mark Item Exported | custimportwositemmarkexported | Marks the Exported to WOS field. Call to Restlet creates the CSV file and pushes it through the Saved CSV Import. |
Order Management
A common approach to ERP integrations is to allow the ERP to automatically create a fulfillment and then push that fulfillment to a warehouse. This works well in 3PL or multi-warehouse scenarios so that each Order can be split into multiple ways and each fulfillment dictates where that Order is fulfilled.
WarehouseOS recommends against this approach and working directly against the Order. Fulfillments are created in a Pick, Pack, or Ship status. The creation of a Fulfillment indicates the Order is already Picked, even though it hasn't really been started. Instead of dictating ahead of time what the warehouse should fulfill, WarehouseOS looks at the Order directly. After the Order is picked, fulfillments against the Order are created against what was actually Picked. This allows short-picked Items to be reported back to the Order correctly and additional shipments to be used to resolve any Order issues.
Order Download
A Saved Search is used to identify Orders that are ready to be fulfilled by the warehouse. This Saved Search typically has these filters:
- Sales Order must be in a status that means payment was received and the Order is ready to be fulfilled.
- The Order must be fully allocated and not yet fulfilled.
- Non-Inventory Items are typically removed and not sent to the warehouse.
- Order's Ship Date is within 7 days or was left empty.
A Scheduled Script is run every 15 minutes to check for new Orders and push those to the warehouse.
Partial Orders
The Saved Search to export Orders can be adjusted to allow only some of the Order Lines to be sent to the warehouse. This Partial Order setup can be manual or automated. A manual approach includes a User checking a flag to indicate that an Order is allowed to ship in partial shipments. An automated approach will send all committed Lines to the warehouse as they are committed. Other flags on the Order can be used to extend this functionality; for example: allow partial Orders on Wholesale Orders, but not on Orders from an eCommerce site.
Partial Orders are sent to the warehouse one at a time. The Order in Netsuite is locked from exporting new lines until the current Order at the warehouse has been fulfilled. This helps to group lines that are being committed while the current Order is being fulfilled.
Cancelled Orders
Deleted Orders are removed from Netsuite and stored in an archive. An automated way to retrieve these have not yet been identified, but if an Order can be put into a "cancelled" state, a Saved Search an be created to identify these Orders. These can be pushed through an integration just like the Orders flow to attempt to claw these Orders back out of WarehouseOS.
Fulfillments
After an Order is picked in WarehouseOS, the picked details are pushed back to Netsuite to create a Fulfillment against the Order. This can happen at the time of Picking or Packing. WarehouseOS recommends performing this operation at Packing. If an integration between WarehouseOS and a Shipping system is setup, tracking details will be gathered and the fulfilment set to a Shipped status when it is created.
Fulfillments are created by picked line. This allows short-picked items to be reported back to Netsuite and remain open until they can be resolved.
Custom processes during this Fulfillment creation, such as auto-fulfilling non-inventory Order Lines or pushing Lot numbers back up to the fulfillment, are possible.
Netsuite Object Details
Type | Name | Id | Purpose |
Custom Field | WOS Export Date | custbody_wos_active_order | Shows the date this Order was sent and accepted by WOS. Populated by the integration. This field is cleared when a Fulfillment is created. |
Custom Field | Allow Partial Order | custbody_wos_allow_partial | Sales Orders only export if all lines are in stock and committed. Checking this field will ignore backordered lines and push only currently committed lines. Checked by User. |
Custom Field | Withold from WOS | custbody_wos_withold | If checked Order will not be pushed to WOS. Checked by User. |
Custom Field | WOS Line Number | custcol_wos_line | Creates static line value that will stay the same across all mutations. Used to match up lines when bringing data back from WOS. |
Saved Search | Instalink Sales Order to WOS | customsearch_instalink_so_to_wos | Search to find Sales Orders ready to push to WOS. |
Scheduled Script | Instalink Export SO to WOS | customdeploy_instalink_so_to_wos | Exports the contents of the Saved Search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_so | After save, runs through Lines on the Order and set a value in the WOS Line Number field. |
CSV Import | WOS Mark Exported | custimportwosmarkexported | Marks the Exported to WOS field. Call to Restlet creates the CSV file and pushes it through the Saved CSV Import. |
Restlet | Instalink Rest Action | customdeploy_instalink_rest_action | Accepts an API request from Instalink to create a Fulfillment against the Order. |
Purchase Orders
PO Download
Purchase Orders are sent to WarehouseOS so they can be received against. Because POs typically have a longer lead time, it is usually recommended to setup the Saved Search to only look for POs that have been shipped and are on their way.
PO Receipts
As items are received against a PO in WarehouseOS, these details will be pushed to Netsuite to create Receipts against the PO. Unlike Netsuite, WarehouseOS does not perform receipts against a "document", but instead receipts are performed and recorded line by line. This can sometimes cause timing issues. By default WarehouseOS will push receipt details within a 15-30 minute window as lines are received, creating multiple receipts against a PO. This provides a more real-time approach to when inventory was brought into the system and made available, but if multiple receipts against a PO causes issues there are other approaches to take.
PO Receipts in Netsuite are typically created against a PO Putaway record in WarehosueOS. This is a reflection of when Items in WOS were put on the shelf and created inventory, instead of when they were "received" at the warehouse.
PO Receipts can be pushed back to Netsuite in these ways
- Line-by-Line as PO Putaway is completed
This is the default approach mentioned above. Multiple receipts in Netsuite are created, but it provides a more real-time look at when inventory is getting to the warehouse. - Delayed PO Putway to consolidate records
This is the same as the previous approach, but the time frame is expanded to only push PO Putaway every 2 to 4 hours. This allows more PO Putaway records to be consolidated into fewer PO Receipts in Netsuite. - PO Close event in WarehouseOS
If a more controlled approach is needed, Closing the PO in WarehouseOS can trigger receipts to be pushed to Netsuite. This approach can be combined with the Delayed approach above to provide a way to trigger receipts when the standard timing would be too slow.
Netsuite Object Details
Type | Name | Id | Purpose |
Custom Field | Exported to WOS | custbody_wos_exported | Gets checked after the order has been pushed to WOS. Checked by the integration. |
Custom Field | Withold from WOS | custbody_wos_withold | If checked order will not be pushed to WOS. Checked by User. |
Custom Field | WOS Line Number | custcol_wos_line | Creates static line value that will stay the same across all mutations. Used to match up lines when bringing data back from WOS. |
Saved Search | Instalink PO to WOS | customsearch_instalink_po_to_wos | Search to find purchase orders ready to push to WOS. |
Scheduled Script | Instalink Export PO to WOS | customdeploy_instalink_po_to_wos | Exports the contents of the saved search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_po | After save, runs through Lines on the Order and set a value in the WOS Line Number field. |
Restlet | Instalink Rest Action | customdeploy_instalink_rest_action | PO Putaway records from WOS are pushed to Netsuite through this Rest Action. Functions within the Rest Action script match up the lines putaway against the lines on the Order and creates the Item Receipt record. |
Inventory Management and Adjustments
Netsuite has the ability to track inventory at the Bin level. That is one of the core functions within WarehouseOS. WarehouseOS recommends turning off Bin tracking on any Location that will be connected to WarehouseOS. It can be left on in other Netsuite Locations. This allows inventory to be managed in Netsuite at a global level (the warehouse has 100 of this item), and to be tracked in detail in WarehouseOS (there are 2 locations with 50 each). An integration to keep Netsuite Bin and WOS Location in sync would require many transactions and sync timing could become problematic.
Inventory Adjustments
Puts and Pulls performed in WarehouseOS can be pushed to Netsuite to create an Inventory Adjustment. Reason Codes used in WarehouseOS can be passed to Netsuite. If specific reasons for adjustments need to be tied to specific GL codes, this mapping can made available by maintaining a mapping of Reason Code to GL within Instalink. Updates to this mapping will need to be sent to the WarehouseOS team.
Cycle Counts performed within WarehouseOS, that result in adjustments to inventory, can be pushed to Netsuite. This creates an Inventory Adjustment just like a Put or Pull. The Reason Code is typically sent as "Cycle Count" and specific GL codes for this transaction are common.
Inventory Transfers
An Inventory Transfer mimics the WarehouseOS Move function to report the change in inventory in the related Locations within Netsuite. Moves that change Areas in WarehouseOS are pushed to Netsuite. Moves that are within the same Area in WarehouseOS are ignored in the integration layer.
Inventory Reconciliation
Inventory levels in Netsuite can be exported and compared to WarehouseOS in a custom Inventory Discrepancy Report. This can help identify issues where transactions weren't synced or differences in the systems occur.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Restlet | Instalink Rest Action | customdeploy_instalink_rest_action | Inventory Adjustments and Transfers are pushed through the standard Restlet. Custom functions within the script file perform the function to create these records in Netsuite. |
Saved Search | Instalink Inventory to WOS | customsearch_instalink_inventory_to_wos | Search to find current inventory levels so they can be pushed to WOS. |
Transfer Orders
Transfer Orders in Netsuite behave like both an outbound Sales Order and an inbound Purchase Order. With an integration to WarehouseOS, the different stages of a Transfer Order are matched to the Orders and POs within WarehouseOS.
Outbound TO
Transfer Orders must first be fulfilled. New Transfer Orders are sent to WarehouseOS to be Picked and Shipped. A Saved Search similar to the Sales Order search identifies TOs ready to be sent. The From Location on the TO identifies if this TO must be sent from the site using WarehouseOS.
Inbound TO
After a Transfer Order has been Fulfilled, it is ready to be received into the destination. The Item Fulfillment against a TO is brought into WarehouseOS as a PO to be received against. When the TO is received, it follows the same process as a Purchase Order to create a receipt against the TO in Netsuite. The To Location on the TO identifies if this TO must be sent to the site using WarehouseOS.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Saved Search | Instalink Outbound TO to WOS | customsearch_instalink_outboundto_to_wos | Search to find transfer orders ready to push to WOS. |
Scheduled Script | Instalink Export Outbound TO to WOS | customdeploy_instalink_outboundto_to_wos | Exports the contents of the saved search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_to | After save, runs through Lines on the Order and set a value in the WOS Line Number field. |
Saved Search | Instalink Indbound TO to WOS | customsearch_instalink_inboundto_to_wos | Search to find Transfer Orders ready to push to WOS. |
Scheduled Script | Instalink Export Inbound TO to WOS | customdeploy_instalink_inboundto_to_wos | Exports the contents of the saved search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_to | After save, runs through Lines on the Order and set a value in the WOS Line Number field. |
Return Authorizations
Return Authorizations are inbound Orders and are treated in WarehouseOS like a PO. Receipts against a Return Authorization work the same as a receipt against a PO.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Saved Search | Instalink Return Authorization to WOS | customsearch_instalink_ra_to_wos | Search to find return authorization Orders ready to push to WOS. |
Scheduled Script | Instalink Export Return Authorization to WOS | customdeploy_instalink_ra_to_wos | Exports the contents of the Saved Search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_ra | After Save, runs through Lines on the Order and set a value in the WOS Line Number field. |
Vendor Returns
Vendor Returns are outbound Orders for Items to be Picked and returned to a vendor. They are treated in WarehouseOS like a regular Order that is Picked and Shipped. Fulfillments against a Vendor Return works the same as a Fulfillment against a Sales Order.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Saved Search | Instalink Vendor Returns to WOS | customsearch_instalink_vr_to_wos | Search to find vendor returns ready to push to WOS. |
Scheduled Script | Instalink Export VRMA to WOS | customdeploy_instalink_vr_to_wos | Exports the contents of the Saved Search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_vr | After Save, runs through lines on the Order and set a value in the WOS Line Number field. |
Inbound Shipments
Inbound Shipments in Netsuite are a container that wrap around Purchase Orders. It allows multiple POs to be combined into a single shipment. Inbound Shipments can be exported to WarehouseOS so that multiple POs can be combined into a single document based on a container or shipment.
Because Inbound Shipments are a wrapper around the base PO functionality, receipts are done against the Inbound Shipment, but created against the PO. This means customizations are limited. Custom Fields on the POs can't be accessed at the time of receipt and scripting is limited to the set of functions Netsuite has provided against the Inbound Shipment.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Custom Field | Exported to WOS | custrecord_wos_exported | Gets checked by the integration after the Order has been pushed to WOS. |
Custom Field | WOS Line Number | custrecord_wos_line | Creates static line value that will stay the same across all mutations. Used to match up lines when bringing data back from WOS. |
Saved Search | Instalink Inbound Shipment to WOS | customsearch_instalink_shipment_to_wos | Search to find shipments ready to push to WOS. |
Scheduled Script | Instalink Export Shipments to WOS | customdeploy_instalink_shipment_to_wos | Exports the contents of the Saved Search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set Inbound Shipment WOS Line | customdeploy_instalink_set_shipment_line | After Save, runs through Lines on the shipment and set a value in the WOS Line Number field. |
Work Orders
Work Orders in Netsuite is the process of assembling components into a new Item. Inventory for the component Items need to be consumed and inventory for the new Item is added. WarehouseOS does not have kitting functionality, but the processes can be mimicked with an Order to be picked out of inventory and a PO to receive the new product. The Receive step is usually performed through a "Received PO" so that the PO is created and automatically setup for the Putaway step. The actual assembly is performed in Netsuite. But the objects in WarehouseOS allow for inventory to be managed through the process.
Unique Netsuite Object Details
Type | Name | Id | Purpose |
Custom Field | Exported to WOS | custbody_wos_exported | Gets checked by the integration after the order has been pushed to WOS. |
Custom Field | Withold from WOS | custbody_wos_withold | If checked order will not be pushed to WOS. Checked by User. |
Custom Field | WOS Line Number | custcol_wos_line | Creates static line value that will stay the same across all mutations. Used to match up lines when bringing data back from WOS. |
Custom Field | WOS Pick Qty | custcol_wos_pick_qty | Provides a field to record how much was picked in WOS for the specific line. |
Saved Search | Instalink Work Orders to WOS Pick | customsearch_instalink_wo_to_wos_pick | Search to find work orders that are ready to be picked and taken to assembly. |
Saved Search | Instalink Work Orders to WOS Put | customsearch_instalink_wo_to_wos_puts | Search to find work orders that have been completed and are ready to be put back into inventory. |
Scheduled Script | Instalink Export Return Authorization to WOS | customdeploy_instalink_ra_to_wos | Exports the contents of the Saved Search to a middleware endpoint which then gets pushed to WOS. |
User Event Script | Instalink Set WOS Line Number | customdeploy_instalink_set_wos_line_wo | After Save, runs through Lines on the Order and set a value in the WOS Line Number field. |