netsuite
Trabajando con Sublistas
Buscar..
Introducción
Los registros de NetSuite se dividen en campos de cuerpo y sub-listas. Hay cuatro tipos de listas secundarias: Estática, Editor, Editor en línea y Lista.
Podemos agregar, insertar, editar y eliminar artículos de línea usando las API de Sublist.
Para obtener una referencia sobre qué sublistas son compatibles con SuiteScript, consulte la página de ayuda de NetSuite titulada "Scriptable Sublists".
Observaciones
Índices Sublistas
Cada elemento de línea en una lista secundaria tiene un índice que podemos usar para referenciarlo.
En SuiteScript 1.0, estos índices están basados en 1
, por lo que la primera línea de pedido tiene el índice 1
, la segunda tiene el índice 2
y así sucesivamente.
En SuiteScript 2.0, estos índices están basados en 0
, por lo que la primera línea de pedido tiene el índice 0
, la segunda tiene el índice 1
y así sucesivamente. Por supuesto, esto se ajusta más a la indexación de Array en la mayoría de los idiomas, incluido JavaScript.
Modo estándar vs dinámico
La API que utilizamos para interactuar con una lista secundaria depende de si estamos trabajando con el registro en modo Estándar o Dinámico.
Las API de modo estándar simplemente nos permiten proporcionar el índice de la línea con la que queremos trabajar como parámetro para la función apropiada.
Las API de modo dinámico siguen un patrón:
- Selecciona la línea con la que queremos trabajar.
- Modificar la línea seleccionada como se desee.
- Confirmar los cambios en la línea.
En el modo dinámico, si no confirmamos los cambios en cada línea que modificamos, dichos cambios no se reflejarán cuando se guarde el registro.
Limitaciones
Para poder trabajar con datos de sublistas a través de SuiteScript, debemos tener una referencia en la memoria al registro. Esto significa que el registro debe recuperarse del contexto del script o debemos cargar el registro desde la base de datos.
No podemos trabajar con sublistas a través de la funcionalidad de búsqueda o de submitFields .
Las sublistas estáticas no son compatibles con SuiteScript.
Referencias:
- NetSuite Help: "¿Qué es un Sublista?"
- NetSuite Help: "Tipos de lista"
- NetSuite Help: "Sublistas de secuencias de comandos"
- NetSuite Help: "Trabajar con elementos de línea Sublist"
- NetSuite Help: "Sublist APIs"
- NetSuite Help: "Trabajar con registros en modo dinámico"
[1.0] ¿Cuántas líneas en una sublista?
// How many Items does a Sales Order have...
// ... if we're in the context of a Sales Order record
var itemCount = nlapiGetLineItemCount("item");
// ... or if we've loaded the Sales Order
var order = nlapiLoadRecord("salesorder", 123);
var itemCount = order.getLineItemCount("item");
[1.0] Sublistas en Modo Estándar
// Working with Sublists in Standard mode ...
// ... if the record is in context:
// Add item 456 with quantity 10 at the end of the item sublist
var nextIndex = nlapiGetLineItemCount("item") + 1;
nlapiSetLineItemValue("item", "item", nextIndex, 456);
nlapiSetLineItemValue("item", "quantity", nextIndex, 10);
// Inserting item 234 with quantity 3 at the beginning of a sublist
nlapiInsertLineItem("item", 1);
nlapiSetLineItemValue("item", "item", 1, 234);
nlapiSetLineItemValue("item", "quantity", 1, 3);
// Insert item 777 with quantity 2 before the end of the last item
var itemCount = nlapiGetLineItemCount("item");
nlapiInsertLineItem("item", itemCount);
nlapiSetLineItemValue("item", "item", itemCount, 777);
nlapiSetLineItemValue("item", "quantity", itemCount, 2);
// Remove the first line item
nlapiRemoveLineItem("item", 1);
// Remove the last line item
nlapiRemoveLineItem("item", nlapiGetLineItemCount("item"));
// ... or if we have a reference to the record (rec):
// Add item 456 with quantity 10 at the end of the item sublist
var nextIndex = rec.getLineItemCount("item") + 1;
rec.setLineItemValue("item", "item", nextIndex, 456);
rec.setLineItemValue("item", "quantity", nextIndex, 10);
// Insert item 777 with quantity 3 at the beginning of the sublist
rec.insertLineItem("item", 1);
rec.setLineItemValue("item", "item", 1, 777);
rec.setLineItemValue("item", "quantity", 1, 3);
// Remove the first line
rec.removeLineItem("item", 1);
// Remove the last line
rec.removeLineItem("item", rec.getLineItemCount("item"));
[1.0] Sublistas en modo dinámico
// Adding a line item to the end of a sublist in Dynamic Mode...
// ... if the record is in context:
nlapiSelectNewLineItem("item");
nlapiSetCurrentLineItemValue("item", "item", 456);
nlapiSetCurrentLineItemValue("item", "quantity", 10);
nlapiCommitLineItem("item");
// ... or if we have a reference to the record (rec):
rec.selectNewLineItem("item");
rec.setCurrentLineItemValue("item", "item", 456);
rec.setCurrentLineItemValue("item", "quantity", 10);
rec.commitLineItem("item");
[1.0] Encontrar un elemento de línea
// Which line has item 456 on it...
// ... if we're in the context of a record
var index = nlapiFindLineItemValue("item", "item", 456);
if (index > -1) {
// we found it...
} else {
// item 456 is not in the list
}
// ... or if we have a reference to the record (rec)
var index = rec.findLineItemValue("item", "item", 456);
if (index > -1) {
// we found it on line "index"...
} else {
// item 456 is not in the list
}
[2.0] ¿Cuántas líneas en una sublista?
// How many lines in a sublist in SuiteScript 2.0...
require(["N/record"], function (r) {
var rec = r.load({
"type": r.Type.SALES_ORDER,
"id": 123
});
// How many lines are on the Items sublist?
var itemCount = rec.getLineCount({"sublistId": "item"});
});
[2.0] Sublistas en Modo Estándar
// Working with a sublist in Standard Mode in SuiteScript 2.0...
require(["N/record"], function (r) {
var rec = r.create({
"type": r.Type.SALES_ORDER,
"isDynamic": false
});
// Set relevant body fields ...
// Add line item 456 with quantity 10 at the beginning of the Items sublist
rec.setSublistValue({"sublistId": "item", "fieldId": "item", "value": 456, "line": 0});
rec.setSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 10, "line": 0});
// Insert line item 238 with quantity 5 at the beginning of the Items sublist
rec.insertLine({"sublistId": "item", "line": 0});
rec.setSublistValue({"sublistId": "item", "fieldId": "item", "value": 238, "line": 0});
rec.setSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 5, "line": 0});
// Insert line item 777 with quantity 3 before the last line of the Items sublist
var lastIndex = rec.getLineCount({"sublistId": "item"}) - 1; // 2.0 sublists have 0-based index
rec.insertLine({"sublistId": "item", "line": lastIndex}); // The last line will now actually be at lastIndex + 1
rec.setSublistValue({"sublistId": "item", "fieldId": "item", "value": 777, "line": lastIndex});
rec.setSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 3, "line": lastIndex});
// Remove the first line
rec.removeLine({"sublistId": "item", "line": 0});
// Remove the last line
rec.removeLine({"sublistId": "item", "line": rec.getLineCount({"sublistId": "item"}) - 1});
rec.save();
});
[2.0] Sublistas en modo dinámico
// Working with Sublists in Dynamic Mode in SuiteScript 2.0...
require(["N/record"], function (r) {
var rec = r.create({
"type": r.Type.SALES_ORDER,
"isDynamic": true
});
// Set relevant body fields ...
// Add line item 456 with quantity 10 at the end of the Items sublist
var itemCount = rec.selectNewLine({"sublistId": "item"});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "item", "value": 456});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 10});
rec.commitLine({"sublistId": "item"});
// Insert line item 378 with quantity 2 at the beginning of the Items sublist
rec.insertLine({"sublistId": "item", "line": 0});
rec.selectLine({"sublistId": "item", "line": 0});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "item", "value": 378});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 2});
rec.commitLine({"sublistId": "item"});
// Insert line item 777 with quantity 3 before the last line of the Items sublist
var lastIndex = rec.getLineCount({"sublistId": "item"}) - 1; // 2.0 sublists have 0-based index
rec.insertLine({"sublistId": "item", "line": lastIndex}); // The last line will now actually be at lastIndex + 1
rec.selectLine({"sublistId": "item", "line": lastIndex});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "item", "value": 777});
rec.setCurrentSublistValue({"sublistId": "item", "fieldId": "quantity", "value": 3});
rec.commitLine({"sublistId": "item"});
// Remove the first line
rec.removeLine({"sublistId": "item", "line": 0});
// Remove the last line
rec.removeLine({"sublistId": "item", "line": rec.getLineCount({"sublistId": "item"}) - 1});
rec.save();
});
[2.0] Encuentra un artículo de línea
// Finding a specific line item in SuiteScript 2.0...
require(["N/record"], function (r) {
var rec = r.load({
"type": r.Type.SALES_ORDER,
"id": 123
});
// Find the line that contains item 777
var index = rec.findSublistLineWithValue({"sublistId": "item", "fieldId": "item", "value": 777});
// find returns -1 if the item isn't found
if (index > -1) {
// we found it on line "index"
} else {
// item 777 is not in the list
}
});