NetSuite restlet write performance is poor(NetSuite RESTlet写入性能较差)
问题描述
编辑:我已经编辑了实际数字,并将其替换为伪装,因为我被告知共享性能数据违反NetSuite的TOS。
我正在使用RESTlet将我们的记账系统与NetSuite集成在一起,总体来说,它运行得很好,只有一个明显的例外:性能。我已经了解到,从性能角度来看,nlip iLoadRecord是撒旦自己的孩子,所以我尽可能避免使用它,更倾向于使用搜索API,现在我的Read RESTlet非常快。然而,每当我要求休息程序写任何东西时,它都像乌龟卡在冰冷的焦油里一样慢。我通常在慢和真他妈的慢秒之间分析nlipiSubmitRecord本身。在我看来,这太疯狂了。如果NetSuite的性能总是这么差,没有人会使用NetSuite。我将在下面包括几个代码示例。任何关于加快NetSuite RESTlet写入性能的提示都将不胜感激。 在第一个函数中,ReceivedInvoice是传入的数据,findCurrencyCode和findCustomerByCustomerNumber很好地执行了执行这些操作的函数。我刚刚看到了一个几乎令人难以置信的天哪,对于一张只有一行项目的简单发票来说,它慢了秒,几乎所有的时间都过去了,我一直在等待nlip iSubmitRecord完成。
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);
在这个示例中,我认为在动态模式下打开记录是在犯下性能异端邪说,但我不确定如何获得可能的行项目。只需在动态模式下打开新记录,就会以大约慢秒的速度计时。同样,提交是消耗时间最多的地方(通常在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);
推荐答案
几点想法:
- (只是发泄一下)将您的会计系统与NetSuite集成听起来很奇怪。NetSuite是一个会计系统,通常是使用它的组织的会计记录系统。如果您不使用NetSuite进行记账,您可能需要考虑它的价格实用程序,然后停止使用它。
- 当我将外部系统与NetSuite集成时,我通常会尝试将其设置为异步。为此,我将原始信息放入一个定制记录中,然后启动一个计划的脚本来处理排队的更新。这可以让我的API快速返回。当我处理队列时,我会将错误存储在队列记录中,以便在出现问题时可以修复数据或代码并重新提交。
- 事务提交缓慢的一个明显的主要来源(除了缓慢的UE脚本之外)是您的图书的状态。我有一个创业客户,他做得很好,但他们从来没有结账,而且他们使用IIRC平均成本计算。每次他们保存一项发布交易时,NetSuite都会重新计算整个时间段(对于一个非常繁忙的网站来说,这段时间大约是两年的记录)。当他们开始关闭时,交易保存时间大幅下降。当他们转换到标准成本计算时,事务保存时间再次下降(我想后进先出会比平均快,比标准慢,但YMMV)
还要注意您的代码。
开具发票的正常方式是
nlapiTransformRecord('customer', customer.customerId, 'invoice');
nlapiTransformRecord('customer', customer.customerId, 'invoice', {recordmode:'dynamic'});
我从未测试过这是否会影响提交时间,但它可能会有所帮助,因为NS会从稍微好一点的地方开始保存(抓住救命稻草,但对于NS,有时不明显的更改会带来速度上的好处)
也不确定如何在动态模式下更改自定义表单。知道表单后,您还可以将其添加到初始化默认设置中:{recordmode:'dynamic', customform:receivedInvoice.transactionType}
这篇关于NetSuite RESTlet写入性能较差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:NetSuite RESTlet写入性能较差
基础教程推荐
- 动态更新多个选择框 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 我什么时候应该在导入时使用方括号 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01