SuiteScript2.0 从保存的搜索公式列中获取值
SuiteScript2.0 Getting values from a saved search formula column
我正在尝试从保存的搜索中的公式字段中获取值。我正在获取所有结果,然后循环遍历它们。
for(key in itemReplenishResults){
log.debug("Single Data", JSON.stringify(itemReplenishResults[key]));
var thisNumber = Number(itemReplenishResults[key].getValue("formulanumeric_1"))
}
单条数据的日志如我所料读取;
{
"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"
}
}
但是 thisNumber 的值返回为 0。我不明白为什么这不起作用?
当我使用公式字段时,我总是使用列索引值。下面是我的一个例子。这与我创建的第五列相匹配(当然是从 0 开始)。希望对您有所帮助。
transactionSearch.run().each(function(r){
var var1=r.getValue(r.columns[5]);
var var2=r.getValue(r.columns[6]);
var var3=r.getValue(r.columns[7]);
var var4=r.getValue(r.columns[8]);
var var5=r.getValue(r.columns[9]);
return true;
});
thisNumber
为 0 的原因是 formulanumeric_1
列实际上不存在,因此 Number()
将空值转换为 0。
问题
公式列在内部 所有 名称相同,这就是为什么您不能直接单独获取它们的值的原因。例如,如果您在搜索中有两个公式(数字)列,两个 内部列名称都将是“公式数字”。因此,使用 getValue('formulanumeric')
将仅获得第一个公式值。
如您所见,记录结果对象将输出不正确的名称。如果你登录 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]));
});
});
遍历每一列(如果您不关心顺序)。
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]));
}
});
});
手动定义列并引用它们(最通用的选项)。列名必须以“公式[类型]”开头,并且可以附加任何其他内容。
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
});
});
注意:如果您选择第一个选项,则在初始搜索中重新排序列时必须小心,因为这会影响结果中的索引.
我正在尝试从保存的搜索中的公式字段中获取值。我正在获取所有结果,然后循环遍历它们。
for(key in itemReplenishResults){
log.debug("Single Data", JSON.stringify(itemReplenishResults[key]));
var thisNumber = Number(itemReplenishResults[key].getValue("formulanumeric_1"))
}
单条数据的日志如我所料读取;
{
"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"
}
}
但是 thisNumber 的值返回为 0。我不明白为什么这不起作用?
当我使用公式字段时,我总是使用列索引值。下面是我的一个例子。这与我创建的第五列相匹配(当然是从 0 开始)。希望对您有所帮助。
transactionSearch.run().each(function(r){
var var1=r.getValue(r.columns[5]);
var var2=r.getValue(r.columns[6]);
var var3=r.getValue(r.columns[7]);
var var4=r.getValue(r.columns[8]);
var var5=r.getValue(r.columns[9]);
return true;
});
thisNumber
为 0 的原因是 formulanumeric_1
列实际上不存在,因此 Number()
将空值转换为 0。
问题
公式列在内部 所有 名称相同,这就是为什么您不能直接单独获取它们的值的原因。例如,如果您在搜索中有两个公式(数字)列,两个 内部列名称都将是“公式数字”。因此,使用 getValue('formulanumeric')
将仅获得第一个公式值。
如您所见,记录结果对象将输出不正确的名称。如果你登录 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])); }); });
遍历每一列(如果您不关心顺序)。
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])); } }); });
手动定义列并引用它们(最通用的选项)。列名必须以“公式[类型]”开头,并且可以附加任何其他内容。
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 }); });
注意:如果您选择第一个选项,则在初始搜索中重新排序列时必须小心,因为这会影响结果中的索引.