使用多个行项目创建 NetSuite 保存的搜索

Creating NetSuite Saved Searches with Multiple Line Items

我正在使用具有多个行项目的 Kit/Package(项目)记录处理 NetSuite 保存的搜索。例如,每个 Kit/Package 由两个商品 SKU 组成。

目前,我的“已保存搜索”正在将每个商品 SKU 拉入其各自的行中。如何将每个 Kit/Package 保持在一行,并将不同的 Item SKU 拉入它们自己的列?我可以创建一个总是包含商品 SKU #1 的列,而另一个列总是包含商品 SKU #2 吗?

我要提取的记录是 {memberitem}。有没有办法让它将 {memberitem}、{memberitem1} 和 {memberitem2} 拉入不同的列?

首先 - 我看到将 2 个成员项目组合在一行中的唯一方法是对字段进行分组,即 - 创建摘要搜索。

如果您需要将此搜索用作高级 PDF 模板的基础,唯一的方法是编写脚本(因为高级 PDF/HTML 模板中不允许摘要搜索)。

我在这里为您创建了一个 suitelet 脚本,用于执行此 PDF 生成。当然我的代码里面有 xml,但是你可以从文件柜中加载预先保存的 XML 文件。此外,您可以创建保存的搜索并将其加载到脚本中。请记住,ITEM 级别的所有字段都应具有摘要类型 "GROUP"

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
define(['N/render','N/search'],

function(render, search) {


    function onRequest(context) {

        var kititemSearchObj = search.create({
            type: "kititem",
            filters: [
              ["type","anyof","Kit"]
            ],
            columns: [
              search.createColumn({
                 name: "itemid",
                 summary: "GROUP"
              }),
              search.createColumn({
                 name: "displayname",
                 summary: "GROUP"
              }),
              search.createColumn({
                 name: "salesdescription",
                 summary: "GROUP"
              }),
              search.createColumn({
                 name: "baseprice",
                 summary: "GROUP"
              }),
              search.createColumn({
                 name: "formulatext",
                 summary: "MAX",
                 formula: "CASE WHEN {memberline}=1 THEN {memberitem} ELSE null END"
              }),
              search.createColumn({
                 name: "formulatext",
                 summary: "MAX",
                 formula: "CASE WHEN {memberline}=2 THEN {memberitem} ELSE null END"
              })
            ]
        });


        var myCustomObject = {

                KitItems : []
        };

        kititemSearchObj.run().each(function(r){
            var aRow = {
                    linenum : myCustomObject.KitItems.length + 1,
                    itemid : r.getValue({
                             name: "itemid",
                             summary: "GROUP"
                          }),
                    displayname :  r.getValue({
                             name: "displayname",
                             summary: "GROUP"
                          }),
                    salesdescription :  r.getValue({
                             name: "salesdescription",
                             summary: "GROUP"
                          }),
                    baseprice :  r.getValue({
                             name: "baseprice",
                             summary: "GROUP"
                          }), 
                    memberitem1 :  r.getValue({
                             name: "formulatext",
                             summary: "MAX",
                          }), 
                    memberitem2 :  r.getValue({
                             name: "formulatext_1",
                             summary: "MAX",
                          })

            };
            myCustomObject.KitItems.push(aRow);

           return true;
        });

        var renderer = render.create();

        var xmlStr = 
            '<?xml version="1.0"?>\n'+
            '<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">\n' +
            '<pdf>\n<body size="A4">\n'+
            '<#if results.KitItems?has_content>'+
            '<table><!-- start rows --><#list results.KitItems as line>'+
            '  <tr><td>${line.linenum}</td>'+
            '      <td>${line.itemid}</td>'+
            '      <td>${line.displayname}</td>'+
            '      <td>${line.salesdescription}</td>'+
            '      <td>${line.baseprice}</td>'+
            '      <td>${line.memberitem1}</td>'+
            '      <td>${line.memberitem2}</td>'+
            '  </tr>'+
            '  </#list>'+
            '</table>'+
            '</#if>'+
            '</body>\n</pdf>';

        renderer.templateContent = xmlStr;

        renderer.addCustomDataSource({
            format: render.DataSource.OBJECT,
            alias: "results",
            data: myCustomObject
            });        

        var pdfResult = renderer.renderAsPdf();
        pdfResult.name = 'kitItems.pdf';

        context.response.writeFile({
            file: pdfResult,
            isInline : true
        });

    }

    return {
        onRequest: onRequest
    };

});