2015-02-06 27 views
0

它對網絡使用某些API(以及某些腳本)的頻率有限制。對於我在做什麼,我相信以下是適用的成本: nlapiLoadSearch:5 nlobjSearchResultSet.getSearch():10 大約需要一個小時,但每次我的腳本(後面)錯誤,可能是由於這一點。我該如何改變它以降低治理成本?如何降低以下代碼的治理成本

function walkCat2(catId, pad){ 
var loadCategory = nlapiLoadRecord("sitecategory", "14958149"); 
var dupRecords = nlapiLoadSearch('Item', '1951'); //load saved search 
var resultSet = dupRecords.runSearch(); //run saved search 
resultSet.forEachResult(function(searchResult) 
    { 
    var InterID=(searchResult.getValue('InternalID')); // process- search 
var LINEINX=loadCategory.getLineItemCount('presentationitem'); 
loadCategory.insertLineItem("presentationitem",LINEINX); 
loadCategory.setLineItemValue("presentationitem", "presentationitem", LINEINX, InterID+'INVTITEM'); //--- Sets the line value.-jf 
nlapiSubmitRecord(loadCategory , true); 
    return true;    // return true to keep iterating 
    });     
} 
+0

看起來像nlapiSubmitRecord也消耗治理點 – theinvisibleduck 2015-02-06 19:32:15

回答

4

nlapiLoadRecord使用5個單位,nlapiLoadSearch使用5個,那麼實際上它是resultSet.forEachResult使用另一個10最重要的是,你正在運行nlapiSubmitRecord每個搜索結果,將使用10個單位爲每個結果

在我看來,像您在搜索結果中所做的一切,都是將行項添加到類別記錄。在完全添加所有行之前,您無需提交記錄。現在,您將在添加的每一行後提交記錄。

移動nlapiSubmitRecord你的forEachResult調用。這會減少您的治理(並且您的執行時間爲,尤其是),從每個搜索結果10個單位減少到10個單位。

+0

這幫助了很多。謝謝! – theinvisibleduck 2015-02-09 21:43:22

0

不同的API有不同的成本相關的成本[見suiteanswers ID 10365]。此外,不同類型的腳本(用戶,預定等)對總使用限制可以有不同的最大限制。 [見suiteanswers ID 10481]

你的腳本應該消耗的比這個限制還要少,否則NetSuite會拋出一個錯誤。 您可以使用以下代碼行來測量代碼中不同點的剩餘使用情況。 nlapiLogExecution('AUDIT','Script Usage','RemainingUsage:'+ nlapiGetContext()。getRemainingUsage());

避免超出最大使用率的一種策略超出了異常,因爲它具有最大限制,因此將腳本類型更改爲「計劃腳本」。鑑於你的循環正在進行搜索,結果集可能會很大,甚至可能導致腳本超出其限制。在這種情況下,您需要在代碼中引入檢查點並使其可重入。這樣,如果您看到nlapiGetContext()。getRemainingUsage()小於您的閾值,則可將剩餘的工作卸載到後續的計劃腳本中。

+0

謝謝!這當然有幫助。我猜測有一種方法可以處理更高層次的治理腳本。 – theinvisibleduck 2015-02-13 15:34:40