netsuite
Работа с подписчиками
Поиск…
Вступление
Отчеты NetSuite делятся на поля тела и подписи. Существует четыре типа подписок: Static, Editor, Inline Editor и List.
Мы можем добавлять, вставлять, редактировать и удалять позиции с использованием Sublist API.
Для справки о том, какие подписи поддерживают SuiteScript, см. Страницу справки NetSuite под названием «Подсказки для сценариев».
замечания
Подписные индексы
Каждая позиция в подсписке имеет индекс, который мы можем использовать для его ссылки.
В SuiteScript 1.0 эти индексы основаны на 1
, поэтому первая позиция имеет индекс 1
, второй - индекс 2
и т. Д.
В SuiteScript 2.0 эти индексы основаны на 0
, поэтому первая позиция имеет индекс 0
, второй - индекс 1
и т. Д. Это, конечно, более близко соответствует индексированию массива на большинстве языков, включая JavaScript.
Стандарт против динамического режима
API, который мы используем для взаимодействия с подсписком, зависит от того, работаем ли мы с записью в стандартном или динамическом режиме.
API-интерфейсы стандартного режима просто позволяют нам указать индекс строки, с которой мы хотим работать, в качестве параметра для соответствующей функции.
API-интерфейсы Dynamic-mode следуют шаблону:
- Выберите линию, с которой мы хотим работать.
- Измените выбранную строку по желанию
- Зафиксировать изменения в строке
В динамическом режиме, если мы не вносим изменений в каждую строку, которую мы модифицируем, эти изменения не будут отражаться при сохранении записи.
Ограничения
Чтобы работать с подвыписными данными через SuiteScript, мы должны иметь ссылку в памяти для записи. Это означает, что запись должна быть извлечена из контекста сценария, или нам нужно загрузить запись из базы данных.
Мы не можем работать с подсписками через функциональность lookup или submitFields .
Статические подсписчики вообще не поддерживают SuiteScript.
Рекомендации:
- Справка NetSuite: «Что такое подшучитель?»
- Справка NetSuite: «Типы подписок»
- Справка NetSuite: «Подписываемые сценарии»
- Справка NetSuite: «Работа с элементами подписок»
- Справка NetSuite: «Sublist API»
- Справка NetSuite: «Работа с записями в динамическом режиме»
[1.0] Сколько строк в подсписке?
// 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] Подсчеты в стандартном режиме
// 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] Подсветки в динамическом режиме
// 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] Найти позицию
// 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] Сколько строк в подсписке?
// 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] Подсчеты в стандартном режиме
// 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] Подсветки в динамическом режиме
// 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] Найти позицию
// 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
}
});