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 开发的新手,这可能有点高级,但我可能会建议类似
创建一个计划脚本,负责执行事务的实际加载和提交。向其中添加一个脚本参数,以便您可以将数据传递给它。
当 Suitelet 上的提交按钮被按下时,您只需构建一个对象数组来描述需要更新的交易和行。
数组构建完成后,使用nlapiScheduleScript()
调用您的预定脚本,传入您的数据数组进行处理。
您可以尝试在您的 suitelet 上添加一个隐藏列,其中包含记录的内部 ID,并将要处理的行按记录 ID 分组。这样您就可以避免多次加载和保存记录,这会消耗使用单位,并且还会提高您的 suitelet 的性能。
我有一个 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 开发的新手,这可能有点高级,但我可能会建议类似
创建一个计划脚本,负责执行事务的实际加载和提交。向其中添加一个脚本参数,以便您可以将数据传递给它。
当 Suitelet 上的提交按钮被按下时,您只需构建一个对象数组来描述需要更新的交易和行。
数组构建完成后,使用
nlapiScheduleScript()
调用您的预定脚本,传入您的数据数组进行处理。
您可以尝试在您的 suitelet 上添加一个隐藏列,其中包含记录的内部 ID,并将要处理的行按记录 ID 分组。这样您就可以避免多次加载和保存记录,这会消耗使用单位,并且还会提高您的 suitelet 的性能。