This is suitelet script which generates n different pdf’s for n work orders. Now instead of printing different pdf’s for each work order data, I want to print single pdf and show different work order data on different pdf page on the same single pdf.
/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define([
“N/https”,
“N/record”,
“N/render”,
“N/file”,
“N/search”,
“N/url”,
], function (https, record, render, file, search, url) {
function renderPDF(context) {
var requestparam = context.request.parameters;
var recId = requestparam.recId;
var waveNumber = requestparam.waveNumber;
var waveNumberforRecord = requestparam.waveNumberforRecord;
var recType = requestparam.recType;
log.debug(“waveNumber”, waveNumber);
//created saved search on work order record for generated wave number form existing suitelet page.
var customrecord_ts_wo_bulkpickSearchObj = search.create({
type: “customrecord_ts_wo_bulkpick”,
filters: [[“custrecord_wmsts_wo_wave”, “is”, waveNumber]],
columns: [
search.createColumn({
name: “name”,
sort: search.Sort.ASC,
label: “Name”,
}),
search.createColumn({
name: “custrecord_wmsts_workorder”,
label: “WO#”,
}),
],
});
let resultsearch = customrecord_ts_wo_bulkpickSearchObj
.run()
.getRange(0, 1000);
// log.debug(“resultsearch “, resultsearch);
//search length
var resultLen = resultsearch.length;
log.debug(“resultLen “, resultLen);
//initialized counter to zero
var count = 0;
var fileArray = [];
//loop on search result length for work orders to print PDF.This is the main for loop.
for (var i = 0; i < resultLen; i++) { //Main Loop start……………………
//fetched work order id
var WOID = resultsearch[i].getValue({
name: “custrecord_wmsts_workorder”,
label: “WO#”,
});
log.debug(“WOID “,WOID);
//Load Work Order Record
var objWO = record.load({
type:record.Type.WORK_ORDER,
id: WOID,
isDynamic: true,
});
log.debug(“objWO”,objWO);
var buildSheet=objWO.getValue({
fieldId: ‘custbody_ccl_build_sheet_number’
});
log.debug(“buildSheet”,buildSheet);
//Get Routing Name
var routingName = objWO.getText({
fieldId: ‘manufacturingrouting’
});
log.debug(“routingName”,routingName);
//created saved search from work order id to fetch sales order id or sales order link as well as manufacturing routing record from that work order.
var workorderSearchObj = search.create({
type: “workorder”,
filters: [
[“mainline”, “is”, “T”],
“AND”,
[“type”, “anyof”, “WorkOrd”],
“AND”,
[“internalid”, “anyof”, WOID],
],
columns: [
search.createColumn({ name: “custbody2”, label: “SO Link” }),
search.createColumn({
name: “tranid”,
sort: search.Sort.ASC,
label: “Document Number”,
}),
search.createColumn({
name: “manufacturingrouting”,
label: “Manufacturing Routing”,
}),
search.createColumn({name: “department”, label: “Department”})
],
});
let searchResultCount = workorderSearchObj.run().getRange(0, 1000);
log.debug(“searchResultCount “, searchResultCount);
//fetched sales order link from work order record
var SOID = searchResultCount[0].getValue({
name: “custbody2”,
label: “SO Link”,
});
log.debug(“SOID”,SOID);
if (!SOID) {
// Display error message for this Work Order and skip further processing
throw ‘Error: Sales Order Link is not present for this work order.’;
}
// log.debug(“SOID “, SOID);
var department = searchResultCount[0].getText({
name: “department”, label: “Department”
});
log.debug(“department”,department);
//fetched work order number from search
var WOIDNumber = searchResultCount[0].getValue({
name: “tranid”,
sort: search.Sort.ASC,
label: “Document Number”,
});
log.debug(“WOIDNumber “, WOIDNumber);
//fetched manufacturing routing number from work order search
var RoutingNo = searchResultCount[0].getValue({
name: “manufacturingrouting”,
label: “Manufacturing Routing”,
});
log.debug(“RoutingNo “, RoutingNo);
//readjust the libk to get only SO internal ID from SO Link
var fields = SOID.split(“=”);
var SalesOrderId = fields[1];
log.debug(“SalesOrderId”, SalesOrderId);
//load sales order record dynamically
var loadSO = record.load({
type: “salesorder”,
id: SalesOrderId,
isDynamic: true,
});
log.debug(“loadSO”,loadSO);
var sfSoNumber=loadSO.getText({
fieldId: “custbody_sf_so_number”,
});
log.debug(“sfSoNumber”,sfSoNumber);
//fetched customer name from Sales order
var custName = loadSO.getText({
fieldId: “entity”,
});
// log.debug(“custName “, custName);
//fetched location from sales order
var location = loadSO.getText({
fieldId: “location”,
});
// log.debug(“location “, location);
//fetched transaction id fron sales order
var tranidSO = loadSO.getText({
fieldId: “tranid”,
});
// log.debug(“tranidSO “, tranidSO);
//fetched ship to address from sales order
var shipTo = loadSO.getText({
fieldId: “shipaddress”,
});
// log.debug(“shipTo “, shipTo);
//get shipping address subrecord from sales order
var subrec = loadSO.getSubrecord({
fieldId: “shippingaddress”,
});
//fetched all subrecord values to set address shipto
var addressee = subrec.getValue(“addressee”);
var phone = subrec.getValue(“addrphone”);
var addr1 = subrec.getText(“addr1”);
var city = subrec.getText(“city”);
var state = subrec.getValue(“state”);
var zip = subrec.getText(“zip”);
var country = subrec.getText(“country”);
//Date Time Logic
var currentDate = new Date();
var year = currentDate.getFullYear();
var month = String(currentDate.getMonth() + 1).padStart(2, “0”);
var day = String(currentDate.getDate()).padStart(2, “0”);
var hours = String(currentDate.getHours()).padStart(2, “0”);
var minutes = String(currentDate.getMinutes()).padStart(2, “0”);
var seconds = String(currentDate.getSeconds()).padStart(2, “0”);
var formattedDateTime = `${month}-${day}-${year} ${hours}:${minutes}:${seconds}`;
log.debug(“formattedDateTime”,formattedDateTime);
//first table header started
//to design PDF in xml this is the first header table
var strVar= ” “;
//Date Time table
strVar +=
‘<table style=”width: 100%; margin-top: 2px; height: 10%;” ><tr>’;
strVar +=
‘<td align=”right” colspan=”20″ style=”font-size: 10pt;border:0px;font-family: Arial, Helvetica, sans-serif;”>’+formattedDateTime+'</td>’;
strVar += “</tr>”;
strVar += “</table>”;
//strVar +=
//'<p style=”margin-left:200px;”> Date time</p>’
//Customer table
strVar +=
‘<table style=”width: 100%; margin-top: 2px; height: 20%;” border=”0.5px”><tr>’;
strVar +=
‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>Customer</td>’;
strVar +=
‘<td colspan=”10″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>Location</td>’;
strVar +=
‘<td colspan=”15″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>’ +
location +
“</td>”;
strVar += “</tr>”;
strVar += “<tr>”;
strVar +=
‘<td colspan=”20″ rowspan=”3″ style=”font-size: 10pt;border:0.5px; padding-top:-25px;font-family: Arial, Helvetica, sans-serif;”><br/><br/><span style=”font-size:10pt;”>’ +
custName +
“<br/>” +
“<br/>” +
‘Ship To:’ +
“<br/>” +
addressee +
“<br/>” +
addr1 +
“<br/>” +
city +
” ” +
state +
” ” +
zip +
” ” +
country +
“</span></td>”;
strVar +=
‘<td colspan=”10″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>SF SO#</td>’;
strVar +=
‘<td colspan=”15″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>’ +
sfSoNumber +
“</td></tr>”;
strVar += “<tr>”;
strVar +=
‘<td colspan=”10″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>Store</td>’;
strVar +=
‘<td colspan=”15″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”>’ +
department +
“</td>”;
//strVar += `<td colspan=”15″ style=”font-size: 10pt;border:0.5px”><barcode codetype=”code128″ showtext=”false” value=”${WOIDNumber}”/></td>`;
strVar += “</tr>”;
// strVar += “<tr>”;
// strVar +=
// ‘<td colspan=”10″ style=”font-size: 10pt;border:0.5px”>Sales Order</td>’;
// strVar +=
// ‘<td colspan=”15″ style=”font-size: 10pt;border:0.5px”>’ +
// tranidSO +
// `</td>`;
// // strVar += `<td colspan=”15″ style=”font-size: 10pt;border:0.5px”><barcode codetype=”code128″ showtext=”false” value=”${tranidSO}”/></td>`;
// strVar += “</tr>”;
// strVar += “<tr>”;
// strVar +=
// ‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px”><b>Store:</b> ’+ department +'</td>’;
// strVar += `<td colspan=”25″ style=”font-size: 10pt;”><b>SF SO#:</b> `+ sfSoNumber +`</td>`;
// strVar += “</tr>”;
strVar += “</table>”;
//first table header end
strVar +=
‘<table style=”width: 100%; margin-top: 10px; height: 29%;” border=”0.5px”><tr>’;
strVar +=
‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><b>Sales Order</b></td>’;
strVar +=
‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><b>Work Order</b></td>’;
strVar +=
‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><b>Pick wave</b></td>’;
strVar +=
‘<td colspan=”20″ style=”font-size: 10pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><b>Build Sheet</b></td>’;
strVar += “</tr>”;
strVar += “<tr>”;
strVar += `<td colspan=”20″ style=”font-size: 15pt;border:0.5px; height: 30%;font-family: Arial, Helvetica, sans-serif;”><barcode codetype=”code128″ showtext=”true” value=”${tranidSO}”/></td>`;
strVar += `<td colspan=”20″ style=”font-size: 15pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><barcode codetype=”code128″ showtext=”true” value=”${WOIDNumber}”/></td>`;
strVar += `<td colspan=”20″ style=”font-size: 15pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><barcode codetype=”code128″ showtext=”true” value=”${waveNumber}”/></td>`;
strVar += `<td colspan=”20″ style=”font-size: 15pt;border:0.5px;font-family: Arial, Helvetica, sans-serif;”><barcode codetype=”code128″ showtext=”true” value=”${buildSheet}”/></td>`;
strVar += “</tr>”;
strVar += “</table>”;
//first table header end
//second table routing started
//************************************************************************************************************* */
//resolve domain to get suitelet url
var output = url.resolveDomain({
hostType: url.HostType.APPLICATION,
});
//increment the count
count++;
//main logic to generate the pdf
var xmlValue =
‘<?xml version=”1.0″?>\n<!DOCTYPE pdf PUBLIC “-//big.faceless.org//report” “report-1.1.dtd”>\n’;
xmlValue += “<pdfset>”;
xmlValue += “<pdf>\n”;
xmlValue += “<head>”;
xmlValue += “<style>”;
xmlValue += “</style>”;
xmlValue += “<macrolist>”;
xmlValue += ‘<macro id=”nlfooter”>’;
xmlValue += ‘<table width=”100%” height=”20%”>’;
xmlValue += “<tr>”;
xmlValue +=
‘<td align=”right” style=”font-size: 9pt;”><pagenumber/> of <totalpages/></td>’;
xmlValue += “</tr>”;
xmlValue += “</table>”;
xmlValue += “</macro>”;
xmlValue += “</macrolist>”;
xmlValue += “</head>”;
xmlValue +=
‘<body size=”A4-Landscape” font-size=”7″ footer=”nlfooter” footer-height=”2pt”>’ +
strVar +
“</body>\n</pdf>”;
xmlValue += “</pdfset>”;
try {
//render module convert xml to pdf format
var pdfFileObj = render.xmlToPdf({
xmlString: xmlValue,
});
log.debug(“PDF PRINTED SUCESSFULLY!!”, “COOL”);
//saved created pdf into the folder with name.
pdfFileObj.folder = 1358;
pdfFileObj.name = “samplepdf” + count;
pdfFileObj.isOnline = true;
// log.debug(“bol”, bol);
let fileid = pdfFileObj.save();
log.debug(“fileid”,fileid);
//loaded the pdf files
let pdfFinal1 = file.load(fileid);
log.debug(“pdfFinal1”, pdfFinal1);
//pushed pdf file ids into the array
fileArray.push(fileid);
// context.response.writeFile(pdfFileObj, true);
//created url for pdf file output
output = “https://” + output + pdfFinal1.url;
//log.debug({title: “output”,details: output });
//return output;
//open the generated pdfs into the seperate tab as per the result length
context.response.write(
`<html><head><script>window.open(“${output}”)</script></head></html>`
);
} catch (error) {
log.error(“Error : In Create Pdf”, error);
}
} //Main Loop end
//window.close to avoid extra suitelet form on the screen.
context.response.write(
`<html><head><script>window.close()</script></head></html>`
);
}
return {
onRequest: renderPDF,
};
function _logValidation(value) {
if (
value != null &&
value != “” &&
value != “null” &&
value != undefined &&
value != “undefined” &&
value != “@NONE@” &&
value != “NaN”
) {
return true;
} else {
return false;
}
} //Log Validation
});