TABLE OF CONTENTS

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.

RestletInstalink Rest Actioncustomdeploy_instalink_rest_actionAccepts 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.

RestletInstalink Rest Actioncustomdeploy_instalink_rest_actionPO 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

RestletInstalink Rest Actioncustomdeploy_instalink_rest_actionInventory 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 FieldWOS Pick Qtycustcol_wos_pick_qtyProvides 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 SearchInstalink 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.