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
};
});
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. –
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. –