Netsuite 将搜索保存到 Suitelet 子列表

Posted

技术标签:

【中文标题】Netsuite 将搜索保存到 Suitelet 子列表【英文标题】:Netsuite Saved Search to Suitelet Sublist 【发布时间】:2016-02-17 23:08:51 【问题描述】:

我正在尝试使用来自我已经创建的自定义保存搜索的数据填充套件中的子列表。我的问题是子列表仅从与我正在执行的已保存搜索的“类型”对应的字段中填充数据。例如,在这种情况下,保存的搜索是“交易”类型的搜索。例如,如果我想使用保存的搜索引用客户字段,例如“姓名”和“帐单地址”,则此数据不会填充套件中的子列表。交易记录本身中引用的所有其他字段都会很好地填充子列表。我只是想知道是否有人遇到过同样的问题,无论如何这是我正在尝试实现的代码。

 var form,
    sublist;

    //GET
if (request.getMethod() == 'GET')
          
        //create form
        form = nlapiCreateForm('Test Custom Suitelet Form', false);

        //create sublist to show results
        sublist = form.addSubList('custpage_sublist_id', 'list', 'Item List');


        //form buttons
        form.addSubmitButton('Submit');
        form.addResetButton('Reset');

        // run existing saved search
        var searchResults = nlapiSearchRecord('transaction','customsearchID');
        var columns = searchResults[0].getAllColumns();

        // Add the search column names to the sublist field
        for ( var i=0; i< columns.length; i++ )
            
                sublist.addField(columns[i].getName() ,'text', columns[i].getLabel() ); 
                nlapiLogExecution('DEBUG', 'Column Label',columns[i].getLabel());
            

        //additional sublist fields
        sublist.addMarkAllButtons();
        sublist.addField('custfield_selected', 'checkbox', 'Selected');

        sublist.setLineItemValues(searchResults)

        response.writePage(form);

    

【问题讨论】:

我自己尝试了几种方法,都找不到正确的答案。我尝试以各种组合将连接名称与列名称连接起来,因为这是 NetSuite 表示搜索结果的方式,但这不起作用。尝试过,但失败了。如果其他人找到正确答案,将会非常感兴趣。在一个稍微不相关的说明中,我相信您可以在调用sublist.addField时使用columns[i].getType(),而不是硬编码'text' 感谢您的帮助。我一定会试试你的 getType() 方法。我在这里没有使用它的原因是因为如果你愿意的话,这些只是列“标题”的名称。它们的类型并不重要,因为它们只是列顶部的文本。我已经尝试了很多不同的方法来让它发挥作用,我很想看看是否有人也找到了方法。 【参考方案1】:

如果您查看 nlobjSublist 文档,您会发现 sublist.setLineItemValues 也可以采用哈希数组。起作用的是:

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

【讨论】:

@bknights,是否可以在搜索中使用多个公式数字列来做到这一点 @steve-reeder 是的。不过有一点皱纹。有点值得自己的问题 我单独发一篇 @bknights 我用公式发布了一个关于上面的单独问题。 ***.com/questions/52616401/…

以上是关于Netsuite 将搜索保存到 Suitelet 子列表的主要内容,如果未能解决你的问题,请参考以下文章

NetSuite 保存的搜索计算两个相关记录之间的日期差异

使用 NetSuite 高级 PDF 和保存的搜索编写 Freemarker 脚本

报告中的 Netsuite 字段为空白,并保存了转移单的搜索

NetSuite 保存的搜索公式

Netsuite 事务已保存搜索:项目加入?

NetSuite PHP 为“事务”类型保存了搜索调用