Tom*_*son 2 netsuite suitescript2.0
我正在尝试从保存的搜索中的公式字段获取值。我正在获取所有结果,然后这样循环它们。
for(key in itemReplenishResults){
log.debug("Single Data", JSON.stringify(itemReplenishResults[key]));
var thisNumber = Number(itemReplenishResults[key].getValue("formulanumeric_1"))
}
Run Code Online (Sandbox Code Playgroud)
正如我所期望的那样读取单个数据的日志;
{
"recordType": "inventoryitem",
"id": "2131",
"values": {
"itemid": "ITEMCODE",
"displayname": "DISPLAYNAME",
"salesdescription": "SALESDESCRIPTION",
"type": [
{
"value": "InvtPart",
"text": "Inventory Item"
}
],
"location": [],
"locationquantityonhand": "",
"locationreorderpoint": "0",
"locationpreferredstocklevel": "1",
"formulatext": "Yes",
"formulanumeric": "1",
"locationquantityonorder": "",
"formulanumeric_1": "1",
"formulatext_1": "Yes"
}
}
Run Code Online (Sandbox Code Playgroud)
但是 thisNumber 的值返回为 0。我不明白为什么这不起作用?
原因thisNumber是 0 是因为该列formulanumeric_1实际上不存在,因此Number()将 null 值转换为 0。
公式列在内部都具有相同的名称,这就是为什么您无法直接单独获取它们的值。例如,如果您的搜索中有两个公式(数字)列,则两个内部列名称都将为“formulanumeric”。因此,使用getValue('formulanumeric')只会得到第一个公式值。
如您所见,记录 Result 对象将输出不正确的名称。如果您登录,Result.columns您将看到列名实际上是相同的。
使用索引直接获取列(如果您关心排序)。
require(['N/search'], function(search) {
// A saved search containing multiple formula result columns
var s = search.load(1234);
s.run().each(function(result) {
log.debug(result.getValue(result.columns[5]));
log.debug(result.getValue(result.columns[1]));
log.debug(result.getValue(result.columns[3]));
});
});
Run Code Online (Sandbox Code Playgroud)
循环遍历每一列(如果您不关心顺序)。
require(['N/search'], function(search) {
// A saved search containing multiple formula result columns
var s = search.load(1234);
s.run().each(function(result) {
for (var i = 0; i < result.columns.length; i++) {
// Log each column's value in order
log.debug(result.getValue(result.columns[i]));
}
});
});
Run Code Online (Sandbox Code Playgroud)
手动定义列并引用它们(最通用的选项)。列名称必须以“公式[类型]”开头,并且可以附加任何其他内容。
require(['N/search'], function(search) {
var s = search.create({
type: 'salesorder',
columns: [{
name: 'formulanumeric1',
formula: 'CASE WHEN 100 > 10 THEN 100 END'
}, {
name: 'formulanumeric2',
formula: 'CASE WHEN 30 > 20 THEN 30 END'
}]
});
s.run().each(function(result) {
log.debug(result.getValue('formulanumeric2')); // 30
log.debug(result.getValue('formulanumeric1')); // 100
});
});
Run Code Online (Sandbox Code Playgroud)
注意:如果您选择第一个选项,则必须小心重新排序初始搜索中的列,因为这会影响结果中的索引。
| 归档时间: |
|
| 查看次数: |
5730 次 |
| 最近记录: |