繁体   English   中英

NetSuite SuiteScript 2.0如何从UserEvent按钮创建银行存款单(套件功能)

NetSuite SuiteScript 2.0 How do I create a Bank Deposit Slip (suitelet function) from a UserEvent Button

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我是NetSuite和SuiteScript的全新开发人员,我磕磕绊绊。

问题:对于每个存款记录,我需要创建一个可打印的pdf,其中列出了该记录中的每笔付款(银行存款单)。 我想在自定义按钮上调用此pdf,以显示在我可以打印的新窗口中。 我不需要将文档保存在文件柜中。

1.现在我有一个UserEvent按钮,可以在视图和编辑模式中显示存款。

 define([], function () { /** * @NApiVersion 2.x * @NScriptType UserEventScript */ var exports = {}; function beforeLoad(context) { context.form.addButton({ id: "custpage_printdepositslip", label: "Print Deposit Slip", functionName: "onButtonClick" }); context.form.clientScriptModulePath = "SuiteScripts/depositSlips/customDepositSlipButton.js" } exports.beforeLoad = beforeLoad; return exports; }); 

2.此按钮从名为“customDepositSlipButton.js”的ClientScript调用clickhandler函数“onButtonClick”。

 define(["N/ui/dialog"], function (dialog) { /** * @NApiVersion 2.x * @NScriptType ClientScript */ var exports = {}; function pageInit(context) { // TODO } function onButtonClick() { dialog.alert({ title: "COMING SOON", message: "This feature will eventually create a bank deposit slip" }); } exports.onButtonClick = onButtonClick; exports.pageInit = pageInit; return exports; }); 

目前这有效,但只创建一个用于测试目的的对话框弹出窗口。 到现在为止还挺好。 测试弹出窗口

这就是我被困住的地方:我不明白如何将它连接到Suitelet上的一个函数,该函数应该从xml生成一个pdf文件。

3.我在一个名为“depositSlipPDF.js”的文件柜位置设置了一个带有来自xml脚本的pdf的Suitelet,其功能为“generatePdfFileFromRawXml”,如下所示。

 define(['N/render', 'N/record'], function(render, record) { /** * @NApiVersion 2.x * @NScriptType Suitelet * @appliedtorecord deposit */ /** * <code>onRequest</code> event handler * @gov 0 * * @param request * {Object} * @param response * {String} * * @return {void} * * @static * @function onRequest */ function generatePdfFileFromRawXml() { var xml = '<?xml version="1.0"?>n<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">n<pdf>n<body size="letter-landscape" font-size="10">n'; xml += '<table width="100%" align="center">n'; xml += '<tr>n'; xml += '<td>Deposit Number: ' + depositRecord.getFieldValue('tranid') + '</td>n'; xml += '</tr>n'; xml += '<tr>n'; xml += '<td>Date: ' + depositRecord.getFieldValue('trandate') + '</td>n'; xml += '</tr>n'; xml += '<tr>n'; xml += '<td>Total: ' + depositRecord.getFieldValue('total') + '</td>n'; xml += '</tr>n'; xml += '<tr>n'; xml += '<td>Posting Period: ' + depositRecord.getFieldText('postingperiod') + '</td>n'; xml += '</tr>n'; xml += '</table>n'; xml += '<br /><br />n'; xml += '<table width="100%" align="center">n'; xml += '<thead>n'; xml += '<tr>n'; xml += '<th>Date</th>n'; xml += '<th>ID</th>n'; xml += '<th>Customer</th>n'; xml += '<th>Payment Amount</th>n'; xml += '<th>Transaction Amount</th>n'; xml += '<th>Transaction Type</th>n'; xml += '<th>Payment Method</th>n'; xml += '</tr>n'; xml += '</thead>n'; xml += '<tbody>n'; for (var i = 1; i < parseInt(depositRecord.getLineItemCount('payment')) + 1; i++) { if (depositRecord.getLineItemValue('payment', 'deposit', i) == 'T') { xml += '<tr>n'; xml += '<td>' + depositRecord.getLineItemValue('payment', 'docdate', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemValue('payment', 'docnumber', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemText('payment', 'entity', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemValue('payment', 'paymentamount', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemValue('payment', 'transactionamount', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemValue('payment', 'type', i) + '</td>n'; xml += '<td>' + depositRecord.getLineItemText('payment', 'paymentmethod', i) + '</td>n'; xml += '</tr>n'; } } xml += '</tbody>n'; xml += '</table>n'; xml += '</body>n</pdf>'; var pdfFile = render.xmlToPdf({ xmlString: xmlStr }); } return { onRequest: generatePdfFileFromRawXml } }); 

我如何调用generatePdfFileFromRawXml(); 来自onButtonClick();?

获得这个目标的信誉可以归功于Stoic Software ,其中SS2是可以理解的(谢谢你,Eric)和teamtag 这篇文章 ,我得到了这些初始xml数据拉取的代码。

4 个回复

我也是,我正在尝试同样的事情。 我终于工作了,尝试将你的xml字符串更改为:

    var xml = '<?xml version="1.0"?>\n<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">\n<pdf>';
    xml += '\n<body font-size="18">\n';
    xml += '<table width="100%" align="center">\n';
    xml += '<tr>\n';
    xml += '<td>Deposit Number: ' + depositRecord.getValue({fieldId: 'tranid'}) + '</td>\n';
    xml += '</tr>\n';
    xml += '<tr>\n';
    xml += '<td>Date: ' + depositRecord.getValue({fieldId: 'trandate'}) + '</td>\n';
    xml += '</tr>\n';
    xml += '<tr>\n';
    xml += '<td>Total: ' + depositRecord.getValue({fieldId: 'total'}) + '</td>\n';
    xml += '</tr>\n';
    xml += '<tr>\n';
    xml += '<td>Posting Period: ' + depositRecord.getText({fieldId: 'postingperiod'}) + '</td>\n';
    xml += '</tr>\n';
    xml += '</table>\n';

    xml += '<br /><br />\n';

    xml += '<table width="100%" align="center">\n';
    xml += '<thead>\n';
    xml += '<tr>\n';
    xml += '<th>Date</th>\n';
    xml += '<th>ID</th>\n';
    xml += '<th>Customer</th>\n';
    xml += '<th>Payment Amount</th>\n';
    xml += '<th>Transaction Amount</th>\n';
    xml += '<th>Transaction Type</th>\n';
    xml += '<th>Payment Method</th>\n';
    xml += '</tr>\n';
    xml += '</thead>\n';
    xml += '<tbody>\n';

    for (var i = 0; i < parseInt(depositRecord.getLineCount({sublistId: 'payment'})); i++){
        if (depositRecord.getSublistText({sublistId: 'payment', fieldId: 'deposit', line: i}) == 'T'){
            xml += '<tr>\n';
            xml += '<td>' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docdate', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docnumber', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistText({sublistId: 'payment', fieldId: 'entity', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'paymentamount', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'transactionamount', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'type', line: i}) + '</td>\n';
            xml += '<td>' + depositRecord.getSublistText({sublistId: 'payment', fieldId: 'paymentmethod', line: i}) + '</td>\n';
            xml += '</tr>\n';
        }
    }

    xml += '</tbody>\n';
    xml += '</table>\n';
    xml += '</body>';
    xml += '\n</pdf>'; 

并查看是否修复了您的Parsing XML错误。

使用前两个答案的输入,这里是完整的工作解决方案和结果的屏幕截图:

步骤1)客户端脚本为自定义按钮建立一个点击处理程序,这会抓取我当前记录的id并将其传递给我在新窗口中执行的suitelet

define(['N/url', 'N/currentRecord'], function (url, currentRecord) {
/**
  * 
  * @NApiVersion 2.x
  * @NScriptType ClientScript
  * @appliedtorecord deposit
  */
var exports = {};
/**
  * <code>pageInit</code> event handler
  * 
  * @gov XXX
  * 
  * @param context
  *             {Object}
  * @param context.mode
  *             {String} The access mode of the current record. will be one of
  *                 <ul>
  *                 <li>copy</li>
  *             <li>create</li>
  *             <li>edit</li>
  *             </ul>
  * 
  * @return {void}
  * 
  * @static
  * @function pageInit
  */
 function pageInit(context) {
     // TODO
 }
 function onButtonClick() {
  var suiteletUrl = url.resolveScript({
    scriptId: 'customscript_depositslip_pdf', //the script id of my suitelet
    deploymentId: 'customdeploy_depositslip_pdf', //the deployment id of my suitelet
    returnExternalUrl: false,
    params: {
        custom_id: currentRecord.get().id,
    },
 });
 window.open(suiteletUrl);
 }
 exports.onButtonClick = onButtonClick;
 exports.pageInit = pageInit;
 return exports;
 });

步骤2)用户事件脚本创建在我的存款记录的编辑和查看模式中可见的自定义按钮,并从我的客户端脚本调用点击处理程序。

define([], function () {
/**
  * 
  * @NApiVersion 2.x
  * @NScriptType UserEventScript
  * @appliedtorecord deposit
  */
 var exports = {};
 /**
  * <code>beforeLoad</code> event handler
  * 
  * @gov 0
  * 
  * @param context
  *             {Object}
  * @param context.newRecord
  *             {record} the new record being loaded
  * @param context.type
  *             {UserEventType} the action that triggered this event
  * @param context.form
  *             {form} The current UI form
  * 
  * @return {void}
  * 
  * @static
  * @function beforeLoad
  */
  function beforeLoad(context) {
    context.form.addButton({
        id: "custpage_printdepositslip",
        label: "Print Deposit Slip",
        functionName: "onButtonClick"
    });
    context.form.clientScriptModulePath = "SuiteScripts/ss2-add-button/customDepositSlipButton.js"
    }
  exports.beforeLoad = beforeLoad;
  return exports;
 });

步骤3)Suitelet脚本从xml创建相对于当前存款的记录ID(您点击按钮的位置)的自定义表单,该表格从存款子列表中提取信息并将其返回到带有标题的pdf的有组织表格中如果表需要多个页面,则会在每个页面上保留页脚部分。

define(['N/render', 'N/record', 'N/xml', 'N/format'],
function(render, record, xml, format) {
 /**
    *@NApiVersion 2.x
    * @NScriptType Suitelet
    * @appliedtorecord deposit
    */
 /**
    * <code>onRequest</code> event handler
    * @gov 0
    * 
    * @param request
    *           {Object}
    * @param response
    *           {String}
    * 
    * @return {void}
    * 
    * @static
    * @function onRequest
    * @function generateXml
    */
function onRequest(context) {
    var id = context.request.parameters.custom_id;
    if (!id) {
        context.response.write('The parameter "custom_id" is required');
        return;
    }
    var xmlString = generateXml(id);
    context.response.renderPdf({ xmlString : xmlString });
}
function generateXml(id) {
      var depositRecord = record.load({ type: record.Type.DEPOSIT, id: id });
      var totes = depositRecord.getValue('total');
      var totally = format.format({value:totes, type:format.Type.CURRENCY});
      var fulldate = depositRecord.getValue('trandate');
      var mmdddate = format.format({value:fulldate, type:format.Type.DATE});
      var xml='<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">\n<pdf>\n<head>\n<macrolist>\n<macro id="nlheader">\n';
        xml += '<table width="100%" align="center" style="font-size:11px;">\n';
        xml += '<tr>\n';
        xml += '<td><b>Deposit Number:</b> ' + depositRecord.getValue('tranid') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Date:</b> ' + mmdddate + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Account:</b> ' + depositRecord.getText('account') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Total:</b> ' + totally + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Posting Period:</b> ' + depositRecord.getText('postingperiod') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Memo:</b> ' + depositRecord.getText('memo') + '</td>\n';
        xml += '</tr>\n';
        xml += '</table>\n';
        xml += '</macro>\n<macro id="nlfooter">\n<table style="width: 100%;">\n<tr>\n<td align="right" style="padding: 0; font-size:8pt;">\n<p align="right" text-align="right" ><br /><pagenumber/> of <totalpages/></p>\n</td>\n</tr>\n</table>\n</macro>\n</macrolist>\n</head>\n<body header="nlheader" header-height="13%" footer="nlfooter" footer-height="10pt" padding="0.375in 0.5in 0.5in 0.5in"  style="font:10px arial, sans-serif; text-align:left;">\n';
        xml += '<table width="100%" align="center" cellpadding="4" cellspacing="0" style="text-align:left; border-left:1px solid #ccc; border-right:1px solid #ccc;">\n';
        xml += '<thead>\n';
        xml += '<tr style="border:1px solid #ccc; background-color:#efefef;">\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Date</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>ID</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Customer</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Payment Method</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Type</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Ref No.</b></th>\n';
        xml += '<th><b>Amount</b></th>\n';
        xml += '</tr>\n';
        xml += '</thead>\n';
        xml += '<tbody>\n';
        for (var i = 0; i < parseInt(depositRecord.getLineCount({sublistId: 'payment'})); i++)
        {
        var amt = depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'paymentamount', line: i});
        var payamt = format.format({value:amt, type:format.Type.CURRENCY});
        var longdate = depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docdate', line: i});
        var shortdate = format.format({value:longdate, type:format.Type.DATE});
        if (depositRecord.getSublistText({sublistId: 'payment', fieldId: 'deposit', line: i}) == 'T')
        {
        xml += '<tr style="border-bottom:1px solid #ccc;">\n';
        xml += '<td style="border-right:1px solid #ccc;">' + shortdate  + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docnumber', line: i}) + '</td>\n';
        var name= depositRecord.getSublistText({sublistId: 'payment', fieldId: 'entity', line: i})
                var andName = name.match('&')
                if(andName){
                var newName = name.replace("&", "&amp;");
                xml += '<td style="border-right:1px solid #ccc;">' + newName + '</td>\n';
                }
                else 
                    xml += '<td style="border-right:1px solid #ccc;">' + name + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistText({sublistId: 'payment', fieldId: 'paymentmethod', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'type', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'refnum', line: i}) + '</td>\n';
        xml += '<td align="right" style="text-align:right !important;"><p style="text-align:right !important;">' + payamt + '</p></td>\n';
        xml += '</tr>\n';
        }
        }
        xml += '</tbody>\n';
        xml += '</table>\n';
        xml += '</body>\n</pdf>';
      return xml;
    }
  return {
    generateXml:generateXml,
    onRequest: onRequest
  }
});

我遇到的主要障碍是我们的许多客户都有客户名称的&符号,xml将其解释为运营商,这需要在“实体”子列表字段中处理条件&符号。 另外,xml想要返回一个更长的日期字段形式,其中包括时间戳,我使用变量和N /格式模块在结果表单上将日期更改为mm / dd / yyyy格式。

所有这些都会在您的存款屏幕上放置一个标有“打印存款单”的自定义按钮,或者您在用户事件脚本中选择标记它的任何内容。 当你点击它时,它应该在一个看起来像这样的新窗口中给你一个pdf表格(请注意,为了这个演示的目的,潜在的敏感信息已经像素化):

来自Suitelet的NetSuite银行存款单

就是这样! 我希望将来可以帮助其他人。

您的Suitelet需要接受一个参数来识别您希望打印哪条记录:

function onRequest(context) {
    var id = context.request.parameters.custom_id;
    if (!id) {
        context.response.write('The parameter "custom_id" is required');
        return;
    }
    var xmlString = generateXml(id);
    context.response.renderPdf({ xmlString: xmlString });
}

function generateXml(id) {
    var depositRecord = record.load({ type: record.Type.DEPOSIT, id: id });
    var xml = ...
    return xml;
}

然后客户端脚本可以打开Suitelet页面,传入当前记录的内部标识(确保导入N/urlN/currentRecord模块):

function onButtonClick() {
    var suiteletUrl = url.resolveScript({
        scriptId: 'customscript_printdepositslip', // replace with correct script id
        deploymentId: 'customdeploy_printdepositslip', // replace with correct deployment id
        returnExternalUrl: false,
        params: {
            custom_id: currentRecord.get().id,
        },
    });

    window.open(suiteletUrl);
}

免责声明:上面的代码未经测试,可能包含语法错误!

我无法阻止改善这一点。 这是一个更新的suitelet代码,它修改了我们的&符号替换,以全局替换实体名称中的所有&符号实例(是的,我们有一个带有两个&符号的客户)。

此外,我添加了for循环来显示来自“其他存款”子列表的数据以及当这些子列表中的一个或两个中存在数据时的“现金返还”。

define(['N/render', 'N/record', 'N/xml', 'N/format'],
function(render, record, xml, format) {
/**
    *@NApiVersion 2.x
    * @NScriptType Suitelet
    * @appliedtorecord deposit
    */
/**
    * <code>onRequest</code> event handler
    * @gov 0
    * 
    * @param request
    *           {Object}
    * @param response
    *           {String}
    * 
    * @return {void}
    * 
    * @static
    * @function onRequest
    * @function generateXml
    */
function onRequest(context) {
    var id = context.request.parameters.custom_id;
    if (!id) {
        context.response.write('The parameter "custom_id" is required');
        return;
    }
    var xmlString = generateXml(id);
    context.response.renderPdf({ xmlString : xmlString });
}
function generateXml(id) {
      var depositRecord = record.load({ type: record.Type.DEPOSIT, id: id });
      var totes = depositRecord.getValue('total');
      var totally = format.format({value:totes, type:format.Type.CURRENCY});
      var fulldate = depositRecord.getValue('trandate');
      var mmdddate = format.format({value:fulldate, type:format.Type.DATE});
      var xml='<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">\n<pdf>\n<head>\n<macrolist>\n<macro id="nlheader">\n';
        xml += '<table width="100%" align="center" style="font-size:11px;">\n';
        xml += '<tr>\n';
        xml += '<td><b>Deposit Number:</b> ' + depositRecord.getValue('tranid') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Date:</b> ' + mmdddate + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Account:</b> ' + depositRecord.getText('account') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Total:</b> ' + totally + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Posting Period:</b> ' + depositRecord.getText('postingperiod') + '</td>\n';
        xml += '</tr>\n';
        xml += '<tr>\n';
        xml += '<td><b>Memo:</b> ' + depositRecord.getText('memo') + '</td>\n';
        xml += '</tr>\n';
        xml += '</table>\n';
        xml += '</macro>\n<macro id="nlfooter">\n<table style="width: 100%;">\n<tr>\n<td align="right" style="padding: 0; font-size:8pt;">\n<p align="right" text-align="right" ><br /><pagenumber/> of <totalpages/></p>\n</td>\n</tr>\n</table>\n</macro>\n</macrolist>\n</head>\n<body header="nlheader" header-height="13%" footer="nlfooter" footer-height="10pt" padding="0.375in 0.5in 0.5in 0.5in"  style="font:10px arial, sans-serif; text-align:left;">\n';
        xml += '<table width="100%" align="center" cellpadding="4" cellspacing="0" style="text-align:left; border-left:1px solid #ccc; border-right:1px solid #ccc;">\n';
        xml += '<thead>\n';
        xml += '<tr style="border:1px solid #ccc; background-color:#efefef;">\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Date</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>ID</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Customer</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Payment Method</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Type</b></th>\n';
        xml += '<th style="border-right:1px solid #ccc;"><b>Ref No.</b></th>\n';
        xml += '<th><b>Amount</b></th>\n';
        xml += '</tr>\n';
        xml += '</thead>\n';
        xml += '<tbody>\n';
  for (var i = 0; i < parseInt(depositRecord.getLineCount({sublistId: 'payment'})); i++)
        {
        var amt = depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'paymentamount', line: i});
        var payamt = format.format({value:amt, type:format.Type.CURRENCY});
        var longdate = depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docdate', line: i});
        var shortdate = format.format({value:longdate, type:format.Type.DATE});
        if (depositRecord.getSublistText({sublistId: 'payment', fieldId: 'deposit', line: i}) == 'T')
        {
        xml += '<tr style="border-bottom:1px solid #ccc;">\n';
        xml += '<td style="border-right:1px solid #ccc;">' + shortdate  + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'docnumber', line: i}) + '</td>\n';
        var name= depositRecord.getSublistText({sublistId: 'payment', fieldId: 'entity', line: i})
        var andName = name.match('&')
        if(andName)
            name = name.replace(/&/g, "&amp;");
        xml += '<td style="border-right:1px solid #ccc;">' + name + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistText({sublistId: 'payment', fieldId: 'paymentmethod', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'type', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'payment', fieldId: 'refnum', line: i}) + '</td>\n';
       xml += '<td align="right" style="text-align:right !important;"><p style="text-align:right !important;">' + payamt + '</p></td>\n';
        xml += '</tr>\n';
        }
        }
  for (var i = 0; i < parseInt(depositRecord.getLineCount({sublistId: 'other'})); i++)
        {
        var amt2 = depositRecord.getSublistValue({sublistId: 'other', fieldId: 'amount', line: i});
        var payamt2 = format.format({value:amt2, type:format.Type.CURRENCY});
        xml += '<tr style="border-bottom:1px solid #ccc;">\n';
        xml += '<td style="border-right:1px solid #ccc;">' +  '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' +  '</td>\n';
        var name2= depositRecord.getSublistText({sublistId: 'other', fieldId: 'entity', line: i})
        var andName2 = name2.match('&')
        if(andName2)
            name2 = name2.replace(/&/g, "&amp;");
        xml += '<td style="border-right:1px solid #ccc;">' + name2 + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistText({sublistId: 'other', fieldId: 'paymentmethod', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'other', fieldId: 'class', line: i}) + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + depositRecord.getSublistValue({sublistId: 'other', fieldId: 'refnum', line: i}) + '</td>\n';
       xml += '<td align="right" style="text-align:right !important;"><p style="text-align:right !important;">' + payamt2 + '</p></td>\n';
        xml += '</tr>\n';
        }
  for (var i = 0; i < parseInt(depositRecord.getLineCount({sublistId: 'cashback'})); i++)
        {
        var amt3 = depositRecord.getSublistValue({sublistId: 'cashback', fieldId: 'amount', line: i});
        var payamt3 = format.format({value:amt3, type:format.Type.CURRENCY});
        xml += '<tr style="border-bottom:1px solid #ccc;">\n';
        xml += '<td style="border-right:1px solid #ccc;">' +  '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' +  '</td>\n';
        var name3= depositRecord.getSublistText({sublistId: 'cashback', fieldId: 'account', line: i})
        var andName3 = name3.match('&')
        if(andName3)
            name3 = name3.replace(/&/g, "&amp;");
        xml += '<td style="border-right:1px solid #ccc;">' + name3 + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + '</td>\n';
        xml += '<td style="border-right:1px solid #ccc;">' + '</td>\n';
        xml += '<td align="right" style="text-align:right !important;"><p style="text-align:right !important;">' + '(' + payamt3 + ')' + '</p></td>\n';
        xml += '</tr>\n';
        }
        xml += '</tbody>\n';
        xml += '</table>\n';
        xml += '</body>\n</pdf>';
      return xml;
    }
  return {
    generateXml:generateXml,
    onRequest: onRequest
  }
});
3 生成可打印的银行转帐存款单

我试图每次有人单击并下载一个带有递增序列号的银行存款单(最好是PDF)。 现在,我知道如何以编程方式生成PDF等,但是我想知道在开始在PDF上逐像素生成存款单之前,是否存在“最佳实践”方式来进行此类操作? 我必须可以使用一些模板? 关于在这种情况下应采取什么方法的任何想法? ...

4 尝试通过玩家输入进行银行存款

我对编码 spigot 相当陌生,但我正在尝试制作一个银行脚本,玩家可以在其中单击存款按钮并提示输入他们想要存入的金额。 但是,当这种情况发生在游戏中时,它会自动将输入确定为 0,并且不会给玩家足够的时间来输入他们的消息。 这是代码: } } ...

7 Netsuite-自动创建存款

我刚刚创建了一个Suitelet,以自动执行现金销售存款的应用程序,其中用户将在CSV文件中上传现金销售记录的列表,脚本将自动在现金销售中应用存款并创建存款记录,但是我意识到存款记录中的现金销售记录太多(&gt; 3000),无法遍历该列表并应用它们。 这将导致套件超时。 我也无法为记录列表 ...

9 如何在清单对象,银行存款中查找特定值

我有一个拥有三个银行帐户(贷方,支票,退休金)的客户列表,每个银行帐户是一个单独的类,内部有一个单独的提款方法。 我在列表中选择一个人(Visual Studio),然后单击他们可以在另一个列表中查看他们的银行帐户。 现在我想选择他们的帐户之一,然后将钱存入其中,现在我被卡住了。 这笔钱只 ...

10 SuiteScript 2.0 UserEvent脚本以调用Map Reduce

下午好。 我正在尝试获取一个用户事件脚本来调用或使用Map Reduce脚本。 我对Map Reduce脚本的概念真的很陌生,没有足够的运气来寻找资源。 本质上,我想做的是调用Map Reduce脚本,该脚本查找具有相同“项目名称”的未清交易,并将该项目上的“类别”设置为用户设置的新项 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM