使用搜索中的公式从保存的搜索填充 Suitelet 子列表

Populate Suitelet Sublist from a Saved Search with Formulas in the Search

@bknights 对另一个关于在 suitelet 中填充子列表的问题发表了很好的回答。

然而,当使用 bk 的代码时,我的问题随之而来:

function getJoinedName(col) {
    var join = col.getJoin();
    return join ? col.getName() + '__' + join : col.getName();
}
searchResults[0].getAllColumns().forEach(function(col) {
    sublist.addField(getJoinedName(col), 'text', col.getLabel());
    nlapiLogExecution('DEBUG', 'Column Label', col.getLabel());
});
var resolvedJoins = searchResults.map(function(sr) {
    var ret = {
        id: sr.getId()
    };
    sr.getAllColumns().forEach(function(col) {
        ret[getJoinedName(col)] = sr.getText(col) || sr.getValue(col);
    });
    return ret;
});
sublist.setLineItemValues(resolvedJoins);

以上适用于没有公式的标准搜索...当我有多个搜索列是公式时,我们如何才能做到这一点?

使用 API1.0

您可以只获取搜索结果的所有列。 columns = result[0].getColumns()。引用公式列所在的列。因此,如果您查看 UI 并且它是从顶部数第三个,您可以使用 result[0].getValue(columns[2])

获取值

此解决方案取决于行的顺序不变。

此外,如果您保存的搜索有公式标签,您可以只使用标签作为字段 ID。

在您的搜索定义中,为所有公式列添加一个标签。然后你的列键可以像这样导出:

function getJoinedName(col) {
    if(col.getName().indexOf('formula') === 0 && col.getLabel()){
      return 'lbl_'+ col.getLabel().toLowerCase();
    }
    var join = col.getJoin();
    return join ? col.getName() + '__' + join : col.getName();
}