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

时间:2017-08-03 21:46:39

标签: netsuite

我正在使用包含多个订单项的工具包/订单(项目)记录来处理NetSuite保存的搜索。例如,每个套件/包都包含两个商品SKU。

目前,我保存的搜索正在各个项目的SKU中拉入。如何将每个套件/包装在一行中,并将不同的商品SKU拉入自己的列中?我可以创建一个总是拉入Item SKU#1的列和另一个总是拉入Item SKU#2的列吗?

我想要的记录是{memberitem}。有没有办法告诉它将{memberitem},{memberitem1}和{memberitem2}引入不同的列?

1 个答案:

答案 0 :(得分:2)

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

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

在这里,我为您创建了一个执行此PDF生成的suitelet脚本。当然我在代码中有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
    };

});