El mismo pedido, dos órdenes
Un sistema externo envía el pedido A-1042 y NetSuite crea la orden. La respuesta no llega por un corte de red. El sistema reintenta… y sin protección, se crea una segunda orden.
La solución es que reintentar sea seguro (idempotencia). Usa el identificador del sistema externo como External ID: NetSuite no permite dos registros del mismo tipo con el mismo External ID.
// RESTlet (SuiteScript 2.1): buscar antes de crear
const previo = query.runSuiteQL({
query: 'SELECT id FROM transaction WHERE externalid = ?',
params: [payload.pedidoId]
}).asMappedResults()[0];
if (previo) return { id: previo.id, duplicado: true };
const orden = record.create({ type: record.Type.SALES_ORDER });
orden.setValue({ fieldId: 'externalid', value: payload.pedidoId });
Si el pedido ya existe, devuelves la misma orden. El External ID es la segunda barrera: aunque dos peticiones lleguen a la vez, NetSuite rechaza el duplicado.