NetSuite Integration Architect and Engineering Leader with 14+ years of ERP experience and 8+ years driving enterprise integration architecture across complex, multi-system environments. Deep expertise in SuiteScript 2.1, SuiteQL, SuiteTalk (REST & SOAP), RESTlets, and Map/Reduce—plus iPaaS platforms like Celigo, Boomi, MuleSoft, and Workato.
I design and deliver enterprise-grade NetSuite ecosystems for advanced manufacturing, supply chain, and high-volume commerce—combining hands-on SuiteScript engineering with architecture-led integration strategy and platform governance.
Deep expertise in SuiteScript 2.1, SuiteQL, SuiteTalk (REST & SOAP), RESTlets, Map/Reduce, and middleware/iPaaS platforms including Celigo, Boomi, MuleSoft, and Workato. I build secure integration standards (OAuth 2.0/TBA), error handling & recovery, logging/monitoring, and scalable real-time & batch sync patterns.
In manufacturing, I’ve implemented multi-level BOMs, revision control, routing logic, WIP tracking, automated backflushing, serialized/lot-controlled inventory, and custom MES replacement tooling— including barcode-driven shop-floor Suitelets, labor capture automation, and real-time dashboards.
const profile = {
name: "Haider Ali",
title: "NetSuite Integration Architect | Engineering Leader",
location: "Ronkonkoma, NY",
experience: {
erpYears: 14,
integrationArchitectureYears: 8,
clientEngagementsLed: "15+",
enterpriseUsersSupported: "50+",
},
platform: {
netsuite: ["SuiteScript 2.1", "SuiteQL", "SuiteTalk REST/SOAP", "SDF"],
engineering: ["Map/Reduce", "Suitelets", "RESTlets", "UE/Scheduled"],
},
iPaaS: {
primary: "Celigo Integrator.io",
additional: ["Dell Boomi", "MuleSoft", "Workato"],
},
focusAreas: [
"Integration standards + API governance",
"OAuth 2.0 / TBA security patterns",
"Real-time + batch orchestration",
"Advanced Manufacturing + MES/WMS/3PL",
"SDF governance + CI/CD pipelines",
],
availability: {
authorizedToWorkInUS: true,
openToRelocation: true,
},
};Gordon Sinclair
Jan 2025 – Present
Remote
J2 Digital LLC
Oct 2020 – Jan 2025
Ronkonkoma, NY
Dynamic Creations
Jan 2012 – Dec 2020
New York
Farmingdale State College
Farmingdale, NY
Representative examples of the SuiteScript 2.1, RESTlet/SuiteTalk, and iPaaS scripting patterns I use to deliver secure, scalable enterprise integrations.
/**
* @NApiVersion 2.1
* @NScriptType MapReduceScript
* @NModuleScope SameAccount
*/
define(['N/record', 'N/search', 'N/runtime', 'N/email'],
(record, search, runtime, email) => {
const getInputData = () => {
return search.create({
type: search.Type.SALES_ORDER,
filters: [
['mainline', 'is', 'T'],
'AND',
['status', 'anyof', 'SalesOrd:B'],
'AND',
['custbody_sync_status', 'is', 'PENDING']
],
columns: ['entity', 'total', 'trandate']
});
};
const map = (context) => {
const searchResult = JSON.parse(context.value);
const orderId = searchResult.id;
// Process order and emit for reduce
context.write({
key: searchResult.values.entity.value,
value: { orderId, total: searchResult.values.total }
});
};
const reduce = (context) => {
const customerId = context.key;
const orders = context.values.map(v => JSON.parse(v));
// Aggregate customer orders
const totalValue = orders.reduce((sum, o) => sum + parseFloat(o.total), 0);
log.audit('Customer Summary', { customerId, totalValue, orderCount: orders.length });
};
return { getInputData, map, reduce };
});/**
* @NApiVersion 2.1
* @NScriptType Restlet
*/
define(['N/record', 'N/search', 'N/error'],
(record, search, error) => {
const post = (requestBody) => {
try {
const { action, payload } = requestBody;
switch(action) {
case 'CREATE_ORDER':
return createSalesOrder(payload);
case 'UPDATE_INVENTORY':
return updateInventoryLevels(payload);
case 'SYNC_BOM':
return syncBillOfMaterials(payload);
default:
throw error.create({
name: 'INVALID_ACTION',
message: `Unknown action: ${action}`
});
}
} catch (e) {
log.error('RESTlet Error', e);
return { success: false, error: e.message };
}
};
const createSalesOrder = (data) => {
const salesOrder = record.create({
type: record.Type.SALES_ORDER,
isDynamic: true
});
salesOrder.setValue({ fieldId: 'entity', value: data.customerId });
salesOrder.setValue({ fieldId: 'memo', value: data.externalRef });
data.items.forEach(item => {
salesOrder.selectNewLine({ sublistId: 'item' });
salesOrder.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'item',
value: item.itemId
});
salesOrder.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: item.qty
});
salesOrder.commitLine({ sublistId: 'item' });
});
const orderId = salesOrder.save();
return { success: true, orderId };
};
return { post };
});// Celigo Integrator.io - Shopify to NetSuite Flow
// Custom PreMap Script for Order Transformation
function preSavePage(options) {
const orders = options.data;
return orders.map(order => {
// Transform Shopify order to NetSuite format
const nsOrder = {
externalId: `SHOP-${order.id}`,
entity: mapCustomer(order.customer),
trandate: formatDate(order.created_at),
memo: `Shopify Order #${order.order_number}`,
// Map line items with inventory sync
items: order.line_items.map(item => ({
item: lookupNetSuiteItem(item.sku),
quantity: item.quantity,
rate: item.price,
location: getWarehouseLocation(item)
})),
// Custom fields for promotional products
custbody_promo_campaign: order.discount_codes?.[0]?.code,
custbody_shopify_tags: order.tags
};
return nsOrder;
});
}
function mapCustomer(shopifyCustomer) {
// Customer mapping logic with upsert
return customerLookup(shopifyCustomer.email)
|| createNetSuiteCustomer(shopifyCustomer);
}Looking for a NetSuite Integration Architect who can define integration standards, lead delivery teams, and build secure, high-performance ecosystems? Let’s connect.
Location
Ronkonkoma, NY • US Citizen