IntegrationAudio-visual, security and smart-home systems integrators

One D-Tools SI connector, reused at about sixteen systems integrators

Integrators design and quote in D-Tools SI and run the job in NetSuite, and one connector moves projects, change orders, catalogues and service plans between the two.

The situation

Many audio-visual, security and smart-home integrators design and quote in D-Tools SI. Engineers lay out the system, pick products from a catalogue with vendor pricing, and produce the quote. The job itself runs in NetSuite. Without a connection, every quote was typed into NetSuite a second time, every change order was applied by hand, and the product catalogue in the two systems drifted apart.

What we built

A NetSuite SuiteApp, first written in 2019 and extended at each integrator since.

From D-Tools to NetSuite. A scheduled script asks D-Tools for projects published since the last run. It matches the D-Tools client to a NetSuite customer and creates any item that is missing. An unapproved project becomes an estimate. An approved project becomes a sales order, transformed from the estimate when one exists. A change order updates the existing sales order, with each line tagged by its change order number, so the customer never ends up with a second order. When a project is done, the script marks it as imported in D-Tools. Two Map/Reduce jobs import the product catalogue into NetSuite items and bring service plans in against the project's sales order.

From NetSuite to D-Tools. A button creates a new D-Tools project from a NetSuite transaction. User Events send back the estimate status, the taxable flag on each line, fulfilled quantities as goods ship, and the project team (sales rep, project manager and engineer) when the project changes. NetSuite items can also be published to D-Tools as a catalogue.

What it does now

The connector runs at about sixteen integrators. Each one installs the same SuiteApp in its own account and adds a configuration record with its D-Tools API key. At an integrator with several subsidiaries and regions, the connector picks the API key by subsidiary and region, so each entity reads and writes its own D-Tools data.

Customer-specific rules live in that customer's copy. Examples are project tasks and a work breakdown generated from the quote with labour hours, purchase orders grouped by vendor, payment-schedule draws carried onto the sales order, tax codes set on catalogue items, and a cleanup screen for change-order lines. One integrator added bin-level inventory counts and bin picking tickets for its sales orders. A new integrator starts with the core flows already working, so the project is mostly field mapping and the rules specific to that business.

Under the hood

  • D-Tools ids are stored on customers, transactions, lines and projects, so a rerun updates the existing record.
  • If a change order arrives before its base project, the script imports the base project first.
  • If D-Tools republishes a project whose lines are already billed, fulfilled or on a purchase order, the script leaves the sales order alone and emails the account manager the quantities.
  • The long-running import watches its governance and elapsed time, then yields and resumes before NetSuite would stop it.
  • Sandbox accounts never write back to D-Tools, so a test cannot change a live project.

Need something like this in your NetSuite?

A 30-minute working session with a senior consultant. Bring the systems you run and the problem in front of you; we will sketch how we would connect them.