```/** * @NApiVersion 2.1 * @NScriptType Suitele...
# suitescript
k
Copy code
/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/search', 'N/ui/serverWidget', 'N/log', "N/render"],
    /**
 * @param{search} search
 * @param{serverWidget} serverWidget
 */
    (search, serverWidget, log, render) => {
        /**
         * Defines the Suitelet script trigger point.
         * @param {Object} scriptContext
         * @param {ServerRequest} scriptContext.request - Incoming request
         * @param {ServerResponse} scriptContext.response - Suitelet response
         * @since 2015.2
         */
        const onRequest = (scriptContext) => {
            try {

                var internalid = scriptContext.request.parameters.salesOrderId
                var templateId = "CUSTTMPL_LF_COMPONENT_N"

                log.debug("salesorderid" , internalid)


                var workorderSearchObj = search.create({
                    type: "workorder",
                    filters:
                        [
                            ["mainline","is","F"],
                            "AND",
                            ["type","anyof","WorkOrd"],
                            "AND",
                            ["custcol_lf_created_from.internalid","anyof", internalid]
                        ],
                    columns:
                        [
                            search.createColumn({
                                name: "item",
                                summary: "GROUP",
                                label: "Item"
                            }),
                            search.createColumn({
                                name: "quantity",
                                summary: "SUM",
                                label: "Quantity"
                            })
                        ]
                });






                var results = workorderSearchObj.run().getRange(0, 1000);
                log.debug("results", results);
                var renderer = render.create();
                renderer.setTemplateById({
                    id: 119
                });
                renderer.addSearchResults({
                    templateName: 'results',
                    searchResult: results
                });

                var newfile = renderer.renderAsPdf();




                // create your suitelet form
                const form = serverWidget.createForm({
                    title: "Component Needed Suitelet: Sales Order " + internalid,
                });

                // add your sublist
                const sublist = form.addSublist({
                    id: "components",
                    type: serverWidget.SublistType.LIST,
                    label: "Components",
                });

                
                const pdfContents = generatePDFContents(internalid, templateId, results, scriptContext);
                // add saved search fields to the sublist
                const savedSearch = sublist.addField({
                    id: "custpage_internalid",
                    type: serverWidget.FieldType.TEXT,
                    label: "ITEM",
                });

                

                const amount = sublist.addField({
                    id: 'amount',
                    type: serverWidget.FieldType.INTEGER,
                    label: 'Sum of Quantity'
                })

                sublist.updateTotallingFieldId({
                    id: 'amount'
                })



                // load the saved search
                const savedSearchObj = search.load({
                    id: "customsearch2143",
                });

                // run the saved search and display the results in the sublist
                let line = 0;
              

                workorderSearchObj.run().each((result) => {
                    sublist.setSublistValue({
                        id: "custpage_internalid",
                        line: line,
                        value: result.getText({
                            name: "item",
                            summary: "GROUP"
                        })
                    });
                    sublist.setSublistValue({
                        id: "amount",
                        line: line,
                        value: result.getValue({
                            name: "quantity",
                            summary: "SUM",
                            label: "Quantity"
                        })
                    })

                    line++;
                    return true;
                });




                // display the form
                scriptContext.response.writePage(form);
                //scriptContext.response.writeFile(newfile, true);
            } catch (e) {
                log.error({ title: "error in onRequest", details: e });
            }
        }

        const generatePDFContents = (recId, templateId, results, ) => {
            const pdfRenderer = render.create();
            pdfRenderer.setTemplateByScriptId({ scriptId: templateId });
            pdfRenderer.addSearchResults({
                templateName: 'LF | Component Needed Template',
                searchResult: results
            });


    return pdfRenderer.renderAsPdf();
        };

        return {onRequest}

    });
e
Check your data to make sure it doesn't have invalid characters that's throwing off the XML parsing like ampersands etc
d
hey 👋 you can create a text snippet to post long scripts so they don't take up so much space. And with the added bonus of syntax highlighting
🤯 1