2017-08-03 2 views
1

Ich arbeite an einer gesicherten NetSite-Suche mit Kit-/Paketsätzen (Artikel), die mehrere Werbebuchungen enthalten. Zum Beispiel besteht jedes Kit/Paket aus zwei Artikel-SKUs.Erstellen gespeicherter NetSuite-Suchen mit mehreren Werbebuchungen

Im Moment zieht meine Gespeicherte Suche jede Artikel-Artikelnummer in einer eigenen Zeile an. Wie kann ich jedes Kit/Package auf einer Linie halten, während die verschiedenen Artikel-SKUs in ihre eigenen Spalten gezogen werden? Kann ich eine Spalte erstellen, die immer Artikel SKU # 1 einzieht, und eine andere, die Artikel SKU # 2 immer einzieht?

Der Datensatz, den ich abrufen möchte, ist {memberitem}. Gibt es eine Möglichkeit, es zu veranlassen, {memberitem}, {memberitem1} und {memberitem2} in verschiedene Spalten einzutragen?

+0

Sie 2 Formelfelder mit CASE innen verwenden können, und dann die richtige Gruppierung verwenden. Wenn Sie eine spezifischere Antwort wünschen, geben Sie weitere Informationen über diese Suche und die Felder an, die Sie sehen möchten. –

+0

Danke! Ich erstelle eine Suche mit dem Item-Eintrag mit Type = Kit/Package. Ich möchte die Kit/Package-Komponenten einziehen. Jedes Kit/Paket besteht aus zwei Komponenten. Das Feld heißt Member Item {Mitgliedsname}. Außerdem verwende ich diese Suche, um eine erweiterte PDF/HTML-Vorlage zu erstellen, sodass ich keine Zusammenfassungsfelder verwenden kann. –

Antwort

2

Vor allem - die einzige Möglichkeit, eine Suche zu sehen, die 2 Mitgliederelemente in einer Zeile kombiniert, besteht darin, die Felder zu gruppieren, d. H. - um eine Zusammenfassungssuche zu erstellen.

Wenn Sie diese Suche als Grundlage für die erweiterte PDF-Vorlage verwenden möchten, besteht die einzige Möglichkeit darin, ein Skript zu schreiben (da die Zusammenfassung in den erweiterten PDF/HTML-Vorlagen nicht erlaubt ist).

Hier habe ich für Sie ein Suletlet-Skript erstellt, das diese PDF-Generierung durchführt. Natürlich habe ich die XML im Code, aber Sie könnten die zuvor gespeicherte XML-Datei aus dem Archiv laden. Sie können auch eine gespeicherte Suche erstellen und sie einfach in das Skript laden. Beachten Sie, dass alle Felder auf Positionsebene mit Zusammenfassung Typ „GROUP“ sein sollte

/** 
* @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 
    }; 

}); 
Verwandte Themen