好的,这适用于SuiteScript 1,但由于某些原因我无法使用SuiteScript 2.我缺少什么?
客户端(在更改/在线更改的字段)或服务器端(在提交时),我无法更改销售订单上的行,例如设置自定义字段。
这些都不奏效。要么没有找到该功能,要么没有任何反应。我已经尝试了各种不同的功能和组合来设置文本或值。我似乎没有工作:
1
Rec.setSublistText({
sublistId : 'item',
fieldId : 'custcol_example',
line : i,
value : "A"
});
2
Rec.selectLine({
sublistId : 'item',
line : i
});
Rec.setCurrentSublistText({
sublistId : 'item',
fieldId : 'custcol_example',
value : "A",
ignoreFieldChange: true
});
Rec.commitLine();
这在SuiteScript 1
中非常有效function clientFieldChanged(type, name, linenum) {
var Count = nlapiGetLineItemCount("item");
for (var i = 1; i <= Count; i++) {
nlapiSelectLineItem("item", i);
nlapiSetCurrentLineItemValue("item", "custcol_example", "A", false, false);
nlapiCommitLineItem("item");
}
}
根据要求,更完整的SS2示例。不起作用。
function fieldChanged(scriptContext) {
var Rec = scriptContext.currentRecord;
var Count = Rec.getLineCount("item");
for (var i = 0; i < Count; i++) {
Rec.selectLine({
sublistId : 'item',
line : i
});
Rec.setCurrentSublistText({
sublistId : 'item',
fieldId : 'custcol_example',
line : i,
value : "A"
});
Rec.commitLine();
}
}
答案 0 :(得分:1)
您的代码1中存在轻微错误。
Rec.setSublistText({
sublistId : 'item',
fieldId : 'custcol_example',
line : i,
value : "A"
});
由于您使用的是setSublistText(),因此您应该使用'text':'A',而不是值。它是这样的:
Rec.setSublistText({
sublistId : 'item',
fieldId : 'custcol_example',
line : i,
text: "A"
});
希望这有帮助。
答案 1 :(得分:0)
您的代码看起来应该适用于这两种情况。您是否尝试过使用JS控制台,并逐行重复这些脚本?
例如,在Chrome中,开始编辑交易记录,然后点击Ctrl-Shift-I
打开开发控制台。在那里,您可以逐行复制和粘贴代码,以交互方式查看每个操作的效果。希望那时,你可以发现出错的地方。
答案 2 :(得分:0)
您能否展示更多代码并解释这是什么类型的脚本?
确保您的索引变量正确; 1.0中的子列表行索引从1开始,而在2.0中,它们从0开始。
要使用selectLine
和*Current*
API,必须以动态模式加载记录。在客户端脚本中,currentRecord
应始终处于动态模式,但在其他脚本类型中,您需要以动态模式显式加载记录。在标准模式而不是动态模式下处理记录时,无法找到函数selectLine 错误。
下面是一个只在控制台或调试器中运行的2.0示例。它以动态模式加载销售订单,然后将所有项目行标记为已关闭。请注意itemIndex
如何从0开始。
require(["N/record"], function (rec) {
var salesOrder = rec.load({
"type": rec.Type.SALES_ORDER,
"id": 7610,
"isDynamic": true
});
closeOrderDynamic(salesOrder);
// Utility function that closes the provided Sales Order record
// order must be in Dynamic mode
function closeOrderDynamic(order) {
var itemIndex = 0;
var itemCount = order.getLineCount({
"sublistId": "item"
});
while (itemIndex < itemCount) {
order.selectLine({
"sublistId": "item",
"line": itemIndex
});
order.setCurrentSublistValue({
"sublistId": "item",
"fieldId": "isclosed",
"value": true
});
// Must commit the line after we've changed it to save modifications
order.commitLine({
"sublistId": "item"
});
itemIndex++;
}
}
});
答案 3 :(得分:0)
根据您的SS1代码,您应该使用setCurrentSublistValue
或setSublistValue
:
Rec.selectLine({
sublistId : 'item',
line : i
});
Rec.setCurrentSublistValue({
sublistId : 'item',
fieldId : 'custcol_example',
value : "A",
ignoreFieldChange: true
});
Rec.commitLine();
答案 4 :(得分:0)
我在尝试获取联系人的地址记录时遇到了类似的错误。看起来要从子列表子记录中获取数据,您必须使用record.load加载记录,并将其置于动态模式。
我的是AfterSubmit功能,所以它可能无法解决您的问题。希望有所帮助。以下是record.load功能的链接,如果您还没有。
https://netsuite.custhelp.com/app/answers/detail/a_id/45155/kw/record.load
答案 5 :(得分:0)
提交该行后,您需要保存记录。
rec.commitLine();
rec.save();