FMT's Custom NetSuite Solutions: Serialized Number Tracking
Over the years FMT’s NetSuite team has produced a number of innovative solutions that can be characterized as a combination of configuration, custom scripting, and custom workflow development. Most of the time, these customizations are driven by real and unique customer needs that cannot be satisfied by NetSuite’s out-of-the-box functionality.
Recently, we were contacted by a client who was frustrated by their inability to track serial numbers in NetSuite. This client did not know how to manage warranties within their system and asked for our recommendation on how to solve this issue.
We immediately scanned NetSuite for available Saved Searches/Reports relative to serial number tracking. Unfortunately, the results of our query were disappointing; there were no out-of-the-box reports related to serial numbers that we could find. We determined that we could build a Saved Search for our customer, but this solution proved to be lacking relative to their unique needs.
As per warranty requirements, and based on our previous experience, we recommended that the client installs the Warranty and Repair Bundle. We hoped that this installation would solve all of their warranty tracking issues. However, we were wrong again. Although the bundle provided substantial functionality, it did not meet our client’s specific, yet fairly simple, needs.
In this article I will discuss:
- The limitations related to serialized number tracking in NetSuite.
- NetSuite’s Warranty & Repair Management SuiteApp and its pros and cons.
- Our take on the issues mentioned above and how we solved them using NetSuite’s native tools and minimal code.
Serialized / Lot Number Control
NetSuite offers good control over serialized and lot numbered inventory. It will maintain the uniqueness of serialized items, as well as ensure that the correct serialized items are selected on relevant transactions. However, what NetSuite can improve on is the reporting on serialized items.
Unless we build a very sophisticated Saved Search, it is impossible to lookup a serial number within the system and to display all the associated and relevant transactions in a meaningful way. Because of this, hours can be wasted on generating this simple report and even then it is uncertain that the end result will be satisfactory.
Based on our experience and the feedback we received from our clients, we discovered it is natural to assume the user would be able to type in the serial number in the Global Search bar and see transaction data associated with the serial number. Global Search cannot query this information.
NetSuite’s Warranty and Repair Bundle (SuiteApp)
Let’s speak about some advantages to using the Warranty and Repair bundle before we start addressing some of the shortcomings of this SuiteApp. Remember, however, the goal of this article is not to dismiss NetSuite’s Warranty and Repair Bundle as a good solution, but instead to show the reasons why it has not been effective for some of our clients.
With one simple free install you will get the following functionality:
- Warranty Registration
This is a record with appropriate validation and lookups running in the background. In the drop-down menu, you will find only items available for warranty registration, the back-end scripts will also look for expiration dates and validate the data you are entering on the Warranty Registration Record.
- Ability to Create Claims
Create claims (cases) from the Warranty Registration (WR) record. This nicely links the WR record to cases and provides a seamless native flow similar to other transactions in NetSuite.
- Ability to create RMA from the Claim (Case) Record
The Warranty Management bundle allows you to generate RMA transactions. Note: you can choose via the case record ‘action’ field whether you want the product that is defective to be replaced or simply refunded.
- Replacement Orders
Based on the selection in the action field mentioned above, the bundle will add a button to your RMA transaction to will allow you to generate a Replacement Sales Order transaction. Natively, NetSuite does not have a concept of Replacement orders so this function makes the bundle very useful.
- Cross Record Linking and Separate Categories to Track Warranties and Claims
The bundle organizes warranties very well and renders them searchable within the system. It also provides links to all warranty-related records in a separate subtab on various transactions.
You may be thinking, “Wow this bundle is great! Why shouldn’t I use this wonderful bundle, especially since it’s free?!”
Well, the answer is complicated. Even with all its bells and whistles, the bundle falls short for some users with more specific needs:
- The Bundle is Locked.
The Warranty and Repair bundle is a managed bundle. This means it is updated automatically by the provider of the bundle and NetSuite will naturally lock all of its related records and scripts. As a result, the solution is not scalable and it is very difficult to build and configure on top of this functionality.
- Includes a Large Number of Scripts
Remember, the more scripts you deploy on a record, the greater the chance is that one will interfere with others and cause ugly user errors. The bundle deploys:
- 12 user event scripts
- 10 client-side scripts
- 1 RESTlet
- 5 Suitelets
- 3 Scheduled Scripts
This is a total of 31 scripts and 48 script files. Given the fairly simple functionality that this bundle provides, it is more clutter than a system needs.
- Warranty Registration Record Cannot Be Modified.
Although we can add custom fields to the record, the validation (executed by locked client and user-event scripts) does not allow us to change the way we select items or serial numbers on the Warranty Registration record. This is not practical if we want Warranty Registration to work with other customizations or custom structures.
- BOM Items and Replacement Functionality
The handling for BOM items is not very practical within this bundle. The solution does not allow you to replace the entire BOM with another. However, you can replace a defective component of that Assembly Item.
NetSuite gives a ‘computer’ and ‘computer part’ as an example of these cases in one of their instructional videos. In this video, they show us how to replace and warrant defective computer components. The question is, what happens when the entire BOM needs to be replaced?
FMT Serial Number Record (SNR) and Warranty Tracking Solution
Our approach to solving this problem was to combine seemingly different, but compatible, functionalities (serial numbers and warranty) into one solution. After determining what needed to be tracked in relation to serial numbers, we asked our client what they liked about the warranty functionality that NetSuite provisioned for them.
After obtaining these clarifications, we rolled up our sleeves and came up with our own bundle that provides the following functionality:
- Quickly locate serial number records and see the entire, related transactional history in one place.
- Easily create warranty registrations, either from the menu or from the Serial Number record.
- When a warranty is generated and a customer requests a replacement or a repair for the item they purchased, you can quickly find the warranty by the serial number provided and generate a case directly from the serial number record.
- When the serialized product is received in the warehouse, SNR records are created automatically without any user intervention. These will appear as a sub-list on the Item (Purchase) Receipt.
- At the time of fulfillment and shipping, the SNR record is updated and linked to the Item Fulfillment Transaction.
- The SNR record will be updated to show:
- Customer Information
- Warranty Holder information
This field is populated after the creation of a Warranty Record. It allows for the warranty holder to be a different entity from the one that originally purchased the product.
- Ship Date
- Item Fulfillment
- Item Receipt
As mentioned above, the SNR record is created when the serial number is received into inventory
- On the Warranty and Case records, certain fields can be populated automatically when records are generated from the SNR record. All of this is seamless and executes instantly.
- Lastly, some validation must occur on the Case transaction. For instance, if an expired warranty for a specific item is selected on the case, the user should be notified that they are making a claim (case) against an expired warranty
Our solution consists of the following custom structures:
- 2 Custom records (SNR and Warranty Registration)
- 2 User event scripts
- 1 Client-side script
- 2 SuiteFlow Workflows
- 3 Saved Searches
It is simple, light, and easy to install and scale. Furthermore, it leverages various NetSuite building blogs where appropriate.
In this blog, I walked you through a typical business scenario facing our clients, I also provided you with our take on resolving these specific business needs. Remember, getting any solution right is not easy and it requires substantial requirement gathering and research time before any design and development can begin.
Feel free to comment on our solution, ask questions, request a demo, or even offer alternative options. We would love to take a peek under your NetSuite hood and help you adapt this flexible ERP system to your unique business processes. Don’t hesitate to reach out to us!