大师们早上好,
我在 Netsuite 中保存了一个包含多个“公式”列的搜索。
例如,有多个
formulapercent' named columns, although the
标签,每个标签都是唯一的。
但是,当使用
nlobjSearchResult.getValue('formulapercent')
时,我自然只能得到第一个公式百分比列值。
如何在
getValue
which 中指定我想要为其返回值的公式列?
我真的不想使用列号,以防我稍后需要在 Netsuite 中保存的搜索中插入新列。
希望有类似
nlobjSearchResult.getValue('formulapercent','<label>')
的东西
我尝试过多参数选项,但不起作用。
简单修复?
干杯
史蒂夫
我通常做的就是向保存的搜索公式列添加标签。然后:
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;
...
}
});
});
我想添加一个我学到的答案。
而不是一般地对列进行编号。例如:
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');
解决了列顺序更改时的问题。
认为这可能对某人有帮助。
nlobjSearchResult 对象中有一个名为 getAllColumns() 的方法。然后我使用公式列的索引来获取值。
我不知道还有什么其他方法可以获取公式列的值。请注意,如果您使用此方法,如果您更改已保存搜索中的列顺序,则会破坏您的脚本。
这对我使用 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
}
}
}
在 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
};
});