获取多个 "formula" 列的已保存搜索值

Get Saved Search values for multiple "formula" columns

早安大师,

我在 Netsuite 中保存了一个包含多个 "formula" 列的搜索。

例如,有多个formulapercent' named columns, although thelabel',每个都是唯一的。

然而,当自然地使用 nlobjSearchResult.getValue('formulapercent') 时,我只能得到第一个 formulapercent 列值。

如何在 getValue 公式列的 中指定 return 的值?

我真的不想使用列号,以防以后我需要在 Netsuite 中的已保存搜索中插入新列。

希望得到类似 nlobjSearchResult.getValue('formulapercent','<label>')

的东西

我已经尝试过多参数选项,但它不起作用。

简单修复?

干杯

史蒂夫

nlobjSearchResult 对象中有一个名为 getAllColumns() 的方法。然后我使用公式列的索引来获取值。

我不知道还有什么其他方法可以获取公式列的值。请注意,如果您使用此方法,如果您在保存的搜索中更改列的顺序,它将破坏您的脚本。

我通常做的是为保存的搜索公式列添加标签。那么:

var f1Val, f2Val, etc;
results.forEach(function(res){
  var cols = res.getAllColumns();
  cols.forEach(function(col){
    switch(col.getLabel()){
       case 'formula1' : f1Val = res.getValue(col); break;
       case 'formula2' : f2Val = res.getValue(col); break;
       ...
    }
  });
});

这对我使用 SuiteScript 2.0 很有效。将其放入函数中并传入所需的变量

if(join){
    if(summary){
        if(String(name).startsWith("formula")){
            return result.getValue(result.columns[column])
        }else{
            var searchResult = result.getValue({
                                name: name,
                                join: join,
                                summary:summary
                            });
            return searchResult
        }

    }else{
        if(String(name).startsWith("formula")){
            return result.getValue(result.columns[column])
        }else{
            var searchResult = result.getValue({
                                name: name,
                                join: join
                            });
            return searchResult
        }
    }

}else{
    if(summary){
        if(String(name).startsWith("formula")){
            return result.getValue(result.columns[column])
        }else{
            var searchResult = result.getValue({
                                name: name,
                                summary: summary,
                            });
            if((column==7 || column ==8 || column==10 || column==12) && type=='cases'){

                return dropDown_Obj[column].getKeyByValue(searchResult)
            }
            return searchResult
        }

    }else{
        if(String(name).startsWith("formula")){
            return result.getValue(result.columns[column])
        }else{
            var searchResult = result.getValue({
                                name: name
                            });
            return searchResult
        }
    }
}

我想我会添加一个我学到的答案。

而不是对列进行通用编号。例如:

var column = []
column[0] = new nlobjSearchColumn('formulanumeric').setFormula('myformula1');
column[1] = new nlobjSearchColumn('formulanumeric').setFormula('myformula2');
searchresults = nlapiSearchRecord(.......);

取而代之的是,我发现检索公式列值的最简单方法是唯一定义列:

var colformula1 = new nlobjSearchColumn('formulanumeric').setFormula('myformula1');
var colformula2 = new nlobjSearchColumn('formulanumeric').setFormula('myformula2');

var searchresults = nlapiSearchRecord('item',null,filters,[colformula1,colformula2]);

然后获取公式结果:

var formulares1 = searchresults[i].getValue(colformula1');
var formulares2 = searchresults[i].getValue(colformula2');

解决了列顺序更改时的问题。

认为这可能对某人有所帮助。