NetSuite Restlet写入性能较差

2023-12-29

编辑:我已经编辑了实际数字并用伪咒语替换了它们,因为我被告知共享性能数据违反了 Netsuite 的 TOS。

我正在使用 Restlet 将我们的会计系统与 NetSuite 集成,总体来说,除了性能方面的明显例外之外,它运行得非常好。从性能角度来看,我发现 nlapiLoadRecord 是撒旦自己的孩子,因此我尽可能避免使用它,而倾向于搜索 api,现在我的读取 Restlet 非常敏捷。然而,每当我要求 Restlet 写任何东西时,它都像困在冷焦油中的乌龟一样慢。我通常在两者之间分析 nlapiSubmitRecord 本身SLOW and 真的太慢了秒。这对我来说似乎很疯狂。如果 NetSuite 的写入性能总是这么差,那么没有人会使用 NetSuite。我将在下面提供一些代码示例。如果有任何有关加快 NetSuite Restlet 写入性能的提示,我们将不胜感激。

在第一个中,receivedInvoice 是传入数据,findCurrencyCode 和 findCustomerByCustomerNumber 是执行这些操作的性能良好的函数。我刚刚以几乎令人难以置信的速度计时缓慢的圣猴一张包含一个行项目的简单发票需要几秒钟,几乎所有时间都在我等待 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秒。同样,提交是花费最多时间的地方(通常在噢,亲爱的可怕的母亲秒),尽管这会占用相当多的时间,因为我弄乱了行项目,这又可能是因为我在动态模式下打开了记录。

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);

一些想法:

  1. (只是为了吐露心声)将您的会计系统与 Netsuite 集成听起来很奇怪。 Netsuite 是一个会计系统,通常是使用它的组织的会计记录系统。如果您不使用 Netsuite 进行会计处理,您可能需要考虑一下它的价格优势并放弃它。
  2. 当我将外部系统与 Netsuite 集成时,我通常会尝试使其异步。为此,我将原始信息放入自定义记录中,然后启动计划脚本来处理排队的更新。这让我的 api 快速返回。当我处理队列时,我将错误存储在队列记录中,以便如果出现任何问题,我可以修复数据或代码并重新提交。
  3. 事务提交缓慢的一个明显主要来源(除了缓慢的 UE 脚本)是您的账本状态。我有一个初创客户,他们做得非常好,但他们从未结账,而且他们使用的是 IIRC 平均成本计算。每次他们保存一个发布事务时,Netsuite 都会重新计算整个时期(对于一个非常繁忙的网站来说,在事情陷入停滞时大约有 2 年的记录)。当他们开始关闭期间时,交易保存时间大幅下降。当他们转换为标准成本计算时,交易保存时间再次下降(我想后进先出会比平均快,比标准慢,但 YMMV)

还对您的代码进行注释。

创建发票的正常方法是

nlapiTransformRecord('customer', customer.customerId, 'invoice'); or nlapiTransformRecord('customer', customer.customerId, 'invoice', {recordmode:'dynamic'});

我从未测试过这是否对提交时间有影响,但它可能会有所帮助,因为 NS 将从一个稍微好一点的地方开始保存(抓住救命稻草,但使用 NS 有时不明显的变化会带来速度优势)

也不知道如何在动态模式下更改自定义表单。当您知道形式后,您还可以将其添加到 init 默认值中:

{recordmode:'dynamic', customform:receivedInvoice.transactionType}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NetSuite Restlet写入性能较差 的相关文章

随机推荐

  • 如何获取包含字符串的列表的索引

    我有一个List
  • 在运行时加载程序集

    我的项目是一个应用程序 我们在其中加载各种程序集并对它们执行操作 我们陷入了这样一种情况 我们需要添加对我们加载的程序集的引用 将由用户选择 所以我需要在运行时添加对DLL的引用 I tried 这个网站 http www codeproj
  • android updateLocaleListFromAppContext NullPointerException 中的问题

    最近我的应用程序崩溃并显示以下错误 我无法检测到实际问题是什么 也无法检测到崩溃 如果有人对此崩溃有解决方案 请帮助解决此问题 java lang NullPointerException at android app ActivityTh
  • 编写一个例程来创建顺序记录

    我想编写一个例程 它允许我在跨越设定时间范围的表中获取带日期的事件 记录 并且在特定日期没有发生事件的情况下 将创建一个重复最多的事件最近确实发生过事件的记录 例如 如果在 9 月 4 日 字段 1 X 字段 2 Y 和字段 3 Z 然后直
  • 如何删除通过 jQuery 插入的引导模式?

    我决定拥有一个可以在需要插入自定义 Bootstrap 模式时使用的脚本 我不想让空的静态 Bootstrap 模式 HTML 位于每个页面的底部 如果它不总是被利用的话 所以 这可能是错误的做法 但这是我的尝试 我创建了一个变量 它是模式
  • 从 Java 连接到 OLEDB 数据源?

    我们正在尝试连接到 ACT CRM 系统使用的 SQL Server 实例 他们设法锁定了一切 因此无法使用 ODBC 连接到 SQL 后端 有一些特殊的实用程序可以添加 ODBC 支持 如果您购买了该软件的 primo 版本 则可以安装它
  • 在 Android 应用程序中嵌入广告?

    我想制作一个我拥有的 Android 应用程序的免费版本 但想在其中嵌入广告 我不知道应该从哪里开始 有没有一家专门从事移动广告的知名移动广告公司 我个人都用过Admob http www admob com and Adsense htt
  • 如何在 opencv 2.4.11 python 中调整轮廓大小? (目标:对象提取)

    我对 opencv 非常陌生 所以请原谅我的无知 基本上 我的图像中有一个感兴趣的对象 我想把它提取出来 我的问题是由于缩小原始图像的尺寸以方便处理而产生的 我在较小的图像上找到了物体的轮廓 我真正想做的是使用有关该轮廓的信息从原始全尺寸图
  • 具有声明的宽度和高度的图像在加载前呈现正方形

    我有声明宽度和高度的图像 例如 img src foo jpg width 1500 height 1800 alt bar 它们位于响应式网格内 因此它们显示在max width 100 它们是延迟加载的 问题是 尽管有height au
  • 对于表示返回 void 的操作的任务,Task.FromResult() 的替代方案是什么[重复]

    这个问题在这里已经有答案了 返回没有泛型类型参数的任务的最佳方法是什么 换句话说 任务代表不返回任何内容或返回任何内容的操作void 换句话说 我正在寻找以下替代方案 T value default T return Task FromRe
  • 如何在切换 Bootstrap 3 面板时为 V 形字形图标设置动画?

    我有一个用 Bootstrap 3 手风琴包裹的面板的工作解决方案 如何通过 90 度旋转将 V 形状态从 gt 更改为 panel heading accordion toggle after font family Glyphicons
  • Django:is_valid 和 form_valid 之间的区别

    我创建了一个表单 它是forms ModelForm 在 视图 方面 我创建了一个视图 它是generic UpdateView 在这两个不同的班级中 我有is valid 一侧 并且form valid 另一方面 class Profil
  • W3Schools 试用编辑器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道如何获得 或在哪里获得 或如何制作 或在哪里可以找到关于w3schools 尝试一下编辑器 h
  • 如何将扩展编译成sqlite?

    我想将扩展编译到 sqlite 中以便在运行时加载 我使用的文件扩展名为 functions c 来自https www sqlite org contrib https www sqlite org contrib 我已经能够编译成可加载
  • 在 Rails 中使用域逻辑回调的优点和缺点

    您认为使用领域逻辑回调的优点和缺点是什么 我是在 Rails 和 或 Ruby 项目的背景下谈论的 为了开始讨论 我想提一下来自关于回调的 Mongoid 页面 http mongoid org en mongoid docs callba
  • 从命令行在 Firefox 上安装 WebExtensions

    我找到了问题如何在脚本中从命令行安装 Firefox 插件 https askubuntu com questions 73474 how to install firefox addon from command line in scri
  • 如何在没有 UI 的情况下启动 Activity?

    是否可以在没有 UI 的情况下从主函数启动 Activity 即是否有一种方法可以围绕另一个活动创建一种 包装器 即通过启动主要活动 它会自动将您带到另一个活动 如果这是不可能的 是否有办法从堆栈中删除主要活动 以便单击后退按钮不会将您带到
  • Objective C 数组元素都以相同的值结束

    首先 如果这是一个相当基本的问题 我深表歉意 但是我是 Objective C 的新手 并且在我所有的搜索中都无法找到我的问题的答案 尽管这很可能是因为我是新手而不是新手 在寻找答案时相当使用正确的术语 我有一个简单的循环 在其中我用一些自
  • nltk 没有将 $NLTK_DATA 添加到搜索路径?

    在linux下 我设置了环境变量 NLTK DATA home user data nltk 并且爆炸测试按预期工作 gt gt gt from nltk corpus import brown gt gt gt brown words T
  • NetSuite Restlet写入性能较差

    编辑 我已经编辑了实际数字并用伪咒语替换了它们 因为我被告知共享性能数据违反了 Netsuite 的 TOS 我正在使用 Restlet 将我们的会计系统与 NetSuite 集成 总体来说 除了性能方面的明显例外之外 它运行得非常好 从性