获取多个“公式”列的已保存搜索值

问题描述 投票:0回答:5

大师们早上好,

我在 Netsuite 中保存了一个包含多个“公式”列的搜索。

例如,有多个

formulapercent' named columns, although the
标签,每个标签都是唯一的。

但是,当使用

nlobjSearchResult.getValue('formulapercent')
时,我自然只能得到第一个公式百分比列值。

如何在

getValue
which 中指定我想要为其返回值的公式列?

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

希望有类似

nlobjSearchResult.getValue('formulapercent','<label>')

的东西

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

简单修复?

干杯

史蒂夫

netsuite suitescript
5个回答
6
投票

我通常做的就是向保存的搜索公式列添加标签。然后:

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;
       ...
    }
  });
});

4
投票

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

而不是一般地对列进行编号。例如:

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');

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

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


2
投票

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

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


2
投票

这对我使用 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
        }
    }
}

0
投票

在 2.x 中找到了一种不同的方法来做到这一点。希望这有帮助。

    var list = serverWidget.createList({
        title: 'Search Results'
    });

    // Add columns to the list
    list.addColumn({
        id: 'column1',
        type: serverWidget.FieldType.TEXT,
        label: 'Item'
    });
    list.addColumn({
        id: 'column2',
        type: serverWidget.FieldType.TEXT,
        label: 'Sales Description'
    });
    list.addColumn({
        id: 'column3',
        type: serverWidget.FieldType.CURRENCY,
        label: 'formula A'
    });
    list.addColumn({
        id: 'column4',
        type: serverWidget.FieldType.CURRENCY,
        label: 'formula B'
    });
    // Add more columns as needed...

    // Load the (transaction) saved search
    var mySavedSearch = search.load({
        id: 'customsearch4340'
    });
    // Replace 'customsearch_my_saved_search' with the ID of your saved search
    mySavedSearch.run().each(function(result) {
        // Create a new object to store the result values
        var resultObject = {};
        
        // Iterate over the columns in the result
        result.columns.forEach(function(column, index) {
            // Create a new column name
            var newColumnName = column.name;
            if (resultObject[newColumnName]) {
                // If the column name already exists in the resultObject, append "_n" to it
                var n = 1;
                while (resultObject[newColumnName + "_" + n]) {
                    n++;
                }
                newColumnName += "_" + n;
            }

            // Assign the value from the result to the new column in the resultObject
            if (newColumnName === 'item' || newColumnName === 'custitem_oc_isac2' || newColumnName === 'custitem_oc_isac3' || newColumnName === 'custitem_oc_productgroup' || newColumnName === 'custitem_oc_buyer') {
                resultObject[newColumnName] = result.getText(column);
            } else {
                resultObject[newColumnName] = result.getValue(column);
            }
        });

        // Add the search result to the list
        list.addRow({
            column1: resultObject['item'],
            column2: resultObject['salesdescription'],
            column3: resultObject['formulacurrency_10'],
            column4: resultObject['formulacurrency_12'],
            // Add more values as needed...
        });
        
        i++;
        
        // Continue processing until you've processed 4000 results
        return i < 4000;
    });        

    context.response.writePage(list);
}

return {
    onRequest: onRequest
};

});

© www.soinside.com 2019 - 2024. All rights reserved.