Netsuite Suitelet:在不达到治理限制的情况下迭代交易行项目列表加载和提交记录

Netsuite Suitelet: Iterate through a list of transaction line items Load and Submit record without reaching Governance Limits

我有一个 Suitelet 脚本,可以提取已保存的 Netsuite 事务行项目搜索。用户可以选中一行或多行上的已协调复选框,然后单击提交按钮,脚本将加载已协调复选框 = true 的每条记录,并更新记录中的特定行项目,然后提交记录。问题是我正在为 Suitescript 达到 1000 的治理限制,因为我认为每次迭代 = 30 个单位。有没有办法让我对此进行编码,以便脚本可以加载记录并更新协调复选框 = true 的所有行项目,然后提交记录?在大多数情况下,我只打开 4 - 5 条记录,但在每条记录上更新多行。这是我目前正在使用的代码。

for(var i=1; i< count+1; i++)
  {
   //get the value of the reconcile checkbox
   var reconcileTransaction = request.getLineItemValue('custpage_transaction_list', 'reconcile', i);
// If it's checked, reconcile the transaction
   if(reconcileTransaction == 'T')
   {
    // Get the transaction internal ID
    var internalId = request.getLineItemValue('custpage_transaction_list', 'internalid', i);
    // Get the transaction type
    var recordType = request.getLineItemValue('custpage_transaction_list', 'recordtype', i);
    var recordLine = request.getLineItemValue('custpage_transaction_list', 'linesequencenumber', i);
   // var totalAmount = totalAmount + request.getLineItemValue('custpage_transaction_list', 'amount', i);

    try
    {
    var recTransaction = nlapiLoadRecord(recordType, internalId);
    recTransaction.setLineItemValue('expense', 'custcol2',recordLine, 'T');
    recTransaction.setLineItemValue('expense', 'custcol_date_reconciled',recordLine, date1);
    nlapiSubmitRecord(recTransaction);
    //recTransaction.setLineItemValue('expense', 'custcol4', recordLine, periodReconcile);
    num++;
    }

非常感谢您的帮助 - 我对此很陌生!

对于像这样的任何类型的批量处理,您几乎肯定需要将处理卸载到计划的脚本中。如果您是 NS 开发的新手,这可能有点高级,但我可能会建议类似

  1. 创建一个计划脚本,负责执行事务的实际加载和提交。向其中添加一个脚本参数,以便您可以将数据传递给它。

  2. 当 Suitelet 上的提交按钮被按下时,您只需构建一个对象数组来描述需要更新的交易和行。

  3. 数组构建完成后,使用nlapiScheduleScript()调用您的预定脚本,传入您的数据数组进行处理。

您可以尝试在您的 suitelet 上添加一个隐藏列,其中包含记录的内部 ID,并将要处理的行按记录 ID 分组。这样您就可以避免多次加载和保存记录,这会消耗使用单位,并且还会提高您的 suitelet 的性能。