编辑:我已经修改了实际数字并将其替换为伪服务,因为我被告知共享性能数据是针对Netsuite的服务条款。
我正在使用restlet将我们的会计系统与NetSuite集成,总体而言,它与性能的明显异常相当不错。从性能的角度来看,我已经发现nlapiLoadRecord是撒旦自己的孩子,所以我尽可能地避免使用它来支持搜索API,现在我读取的restlet非常活泼。然而,每当我要求一个restlet写任何东西时,它就像一只卡在冷焦油中的乌龟一样慢。我通常在 SLOW 和 REALLY DAMN SLOW 秒之间分析nlapiSubmitRecord本身。这对我来说似乎很疯狂。没有人会使用NetSuite,如果表现总是这么差写作。我将在下面提供几个代码示例。有关加速NetSuite restlet写入性能的任何提示都将受到赞赏。
在第一个中,receivedInvoice是传入的数据,findCurrencyCode和findCustomerByCustomerNumber是执行这些操作的良好函数。我只是在一个几乎令人难以置信的 HOLY MONKEYS,这是一个很短的时间秒钟,这个简单的发票包含一个项目,几乎所有的时间都在我等待nlapiSubmitRecord完成时。
var createdInvoice = nlapiCreateRecord('invoice');
createdInvoice.setFieldValue('customform', Number(receivedInvoice.transactionType));
createdInvoice.setFieldValue('memo', receivedInvoice.message);
createdInvoice.setFieldValue('duedate', receivedInvoice.dateDue);
createdInvoice.setFieldValue('currency', findCurrencyCode(receivedInvoice.currencyUnit));
createdInvoice.setFieldValue('location', Number(receivedInvoice.location));
createdInvoice.setFieldValue('postingperiod', findPostingPeriod(receivedInvoice.datePosted));
var customer = findCustomerByCustomerNumber(receivedInvoice.customerNumber);
createdInvoice.setFieldValue('entity', customer.customerId );
createdInvoice.setFieldValue('custbody_end_user', customer.customerId );
createdInvoice.setFieldValue('department', customer.departmentId);
var itemCount = receivedInvoice.items.length;
for(var i = 0; i < itemCount; i++)
{
createdInvoice.selectNewLineItem('item');
createdInvoice.setCurrentLineItemValue('item', 'item',receivedInvoice.items[i].item);
createdInvoice.setCurrentLineItemValue('item', 'quantity', receivedInvoice.items[i].quantity);
createdInvoice.setCurrentLineItemValue('item', 'rate',receivedInvoice.items[i].price);
createdInvoice.setCurrentLineItemValue('item', 'custcol_list_rate',receivedInvoice.items[i].price);
createdInvoice.setCurrentLineItemValue('item', 'amount',receivedInvoice.items[i].totalAmount);
createdInvoice.setCurrentLineItemValue('item', 'description',receivedInvoice.items[i].description);
createdInvoice.commitLineItem('item');
}
var recordNumber = nlapiSubmitRecord(createdInvoice,false,true);
在这一部分中,我认为我通过在动态模式下打开记录来表现性能异端,但我不确定如何获得可能的行项目。只需在动态模式下打开一个新记录,在 SLOW 秒左右。再一次,提交是大部分时间被吃掉的地方(通常在 OH亲爱的甜蜜的母亲身边秒),虽然这个因为我弄乱了订单项而吃了相当多的时间,这可能是因为我已经以动态模式打开了记录。
var customerPayment = nlapiCreateRecord('customerpayment',{recordmode: 'dynamic'});
customerPayment.setFieldValue('customer', parseInt(customerId));
customerPayment.setFieldValue('payment', paymentAmount);
customerPayment.setFieldValue('paymentmethod', paymentMethod);
customerPayment.setFieldValue('checknum', transactionId);
customerPayment.setFieldValue('currency', currency);
customerPayment.setFieldValue('account', account);
var applyCount = customerPayment.getLineItemCount('apply');
if(applyCount>0)
{
for(var i=1;i<=applyCount;i++)
{
var thisInvoice = customerPayment.getLineItemValue('apply','refnum',i);
if(thisInvoice == invoiceToPay)
{
customerPayment.selectLineItem('apply', i);
customerPayment.setCurrentLineItemValue('apply','apply','T');
customerPayment.setCurrentLineItemValue('apply', 'amount',paymentAmount);
customerPayment.commitLineItem('apply');
}
}
}
nlapiSubmitRecord(customerPayment,false,true);
答案 0 :(得分:1)
一些想法:
还要注意您的代码。
创建发票的常规方法是
nlapiTransformRecord('customer', customer.customerId, 'invoice');
或
nlapiTransformRecord('customer', customer.customerId, 'invoice', {recordmode:'dynamic'});
我从未测试过这是否会对提交时间产生影响,但它可能会有所帮助,因为NS会从稍微好一些的地方开始保存(抓住吸管但有时NS会有非明显的变化有速度效益)
也不确定如何在动态模式下更改自定义窗体。当您知道表单时,您还可以将其添加到init默认值:
{recordmode:'dynamic', customform:receivedInvoice.transactionType}
答案 1 :(得分:0)
提交的原因之一可能是记录附加了很多用户事件脚本。由于它是保存记录的Restlet,因此它将触发用户事件脚本。