2017-08-29 68 views
1

我在javascript AMD模塊中獲得了一些代碼。如果我創建一個引用它並部署它的ClientScript,當從ClientScript事件調用時,代碼運行良好。但是,如果我從自定義按鈕單擊事件中調用完全相同的函數,它會在require.js中引發意外錯誤(請參閱控制檯輸出的帖子末尾)。將模塊加載到自定義按鈕調用的客戶端腳本中

這裏的ClientScript代碼:

/** 
* @NApiVersion 2.0 
* @NScriptType ClientScript 
* @NModuleScope public 
*/ 

'use strict' 
require.config({ 
    paths: { 
     'iceUtil': 'SuiteScripts/ieCommon/iceUtil' 
    } 
}); 

define(['N/log', 'iceUtil'], function (https, iceUtil) { 
    function calculateConfigurations() { 
     console.log('calculateConfigurations: before native log call'); 
     log.debug({ 
      title: 'calculateConfigurations', 
      details: 'nothing' 
     }) 

     console.log('calculateConfigurations: before iceUtil log call'); 
     iceUtil.logDebug('calculateConfigurations - iceUtil log', 
      'nothing'); 
    } 

    function fieldChanged() { 
     iceUtil.logDebug('pageInit', 'begining client event'); 
     calculateConfigurations(); 
     iceUtil.logDebug('pageInit', 'ending client event'); 
    } 

    return { 
     calculateConfigurations: calculateConfigurations 
     , fieldChanged: fieldChanged 
    } 
}); 

iceUtil.js實際上只是包含本地NetSuite的日誌功能。

這工作正常,所有日誌顯示從fieldChanged事件觸發調用時。

但是,如果我將它連接到自定義按鈕,使用下面的代碼,只有第一個console.log('recordId: ' + recordId);調用運行。第一次致電iceUtil.logDebug炸彈。

下面是該線向上按鈕的代碼:

/** 
* @NApiVersion 2.x 
* @NScriptType UserEventScript 
*/ 
define(["N/log", "../ieCommon/iceUtil"], function (log, iceUtil) { 

    function addCalcConfigsButton(context) { 
     if(context.type==context.UserEventType.EDIT) { 
      context.form.clientScriptFileId = 6222; 
      //context.form.clientScriptModulePath = 'SuiteScripts/ieOppMetrics/clientCalculateConfigurations.js'; // This also works 
      context.form.addButton(
       { 
        id : 'custpage_buttonid', 
        label : 'Calculate Configurations', 
        functionName : 'calculateConfigurations' 
       } 
      ); 
      iceUtil.logDebug("addCalcConfigButton - iceUtil log", 
       "Button added."); 

      log.debug({ 
       title: 'addCalcConfigButton - native log', 
       details: 'Button added.' 
      }); 
     } 
    } 

    return { 
     beforeLoad : addCalcConfigsButton 
    }; 
}); 

下面是這段代碼的控制檯輸出時,它從fieldChanged事件調用和作品(日誌消息也顯示在NS執行日誌):

[Log] calculateConfigurations: before native log call 
[Log] calculateConfigurations: before iceUtil log call 

下面是從按下按鈕控制檯輸出和失敗(有在NS執行日誌沒有日誌消息):

[Log] calculateConfigurations: before native log call 
[Error] UNEXPECTED_ERROR: Unexpected Error 
    onError (bootstrap.js:150) 
    onError (NsRequire.js:645) 
    check (NsRequire.js:994) 
    enable (NsRequire.js:1251) 
    init (NsRequire.js:882) 
    (anonymous function) (NsRequire.js:1547) 
+0

在你的客戶端腳本中,你需要'N/log'依賴,但是它在定義函數中的名字是'https'。 'log'沒有被定義。 –

回答

1

事實證明,這根本不是一個模塊加載問題;這是N/log代碼中的一個問題,特別是在JS環境從不同位置(NS客戶端事件與自定義按鈕中的任意JS函數)進行調用時。

log.debug()正在從按鈕調用,JS環境有定義並與值以下變量: NLScriptIdForLoggingNLDeploymentIdForLogging,但是當log.debug()成功從NS客戶端事件稱這些並沒有定義。

如果在調用log.debug()之前運行下文中,將成功地從按鈕的代碼運行:

delete NLScriptIdForLogging; 
delete NLDeploymentIdForLogging; 

我不知道這些是什麼,想要做,所以我只是檢查他們,跳過log.debug()調用(或將它路由到JS控制檯,如果它在那裏的話)。

這看起來像一個NS錯誤。有誰知道我可以如何報告?

0

「第一次打電話給iceUtil.logDebug炸彈。」這非常含糊。發佈實際的錯誤輸出(最重要的是主錯誤和堆棧跟蹤中引用您自己的代碼的第一行),以便爲您的代碼提供一些提示,以便在代碼中查找錯誤。

即使沒有實際的錯誤,我會說這行看起來令人難以置信的懷疑:

functionName : 'calculateConfigurations(' + context.newRecord.id + ')' 

我不知道底層代碼是什麼,處理您的來電context.form.addButton,但我從財產懷疑名稱functionName,唯一有效的值是[String],其中包含context範圍內的函數名稱。

相反,您正在努力做一些動態函數創建,對您調用的addButton()方法可能沒有任何意義。

context.form.addButton從何而來?它不是原生的js,並且沒有明顯的代碼示例參考。那種你沒有提到過的圖書館提供的方法是什麼?

+0

謝謝,我使用控制檯輸出和錯誤堆棧跟蹤更新了原始帖子,並且還根據您的建議刪除了傳遞的參數,但仍然存在此問題。 – josh

0

addButtonfunctionName屬性只能期待名稱的功能的。我不相信你可以調用這個函數並傳遞參數。

您的點擊處理程序需要從context或使用NetSuite的N/currentRecord模塊讀取當前記錄的ID。

+0

感謝您的建議。我改變它不通過參數(無論是否有parens),它仍然以同樣的方式炸彈。 (順便說一下,我從[本博客文章]的評論中獲得了該技術(https://ursuscode.com/netsuite-tips/suitescript-2-0-quickstart-samples/#comment-3159860869))。 – josh

+0

僅供參考,我用更簡單的代碼更新了原始帖子,該代碼不會嘗試傳遞參數。 – josh

0

由於NetSuite中需要對象配置的更新,您可能會遇到問題。輸入內容有點多,所以請參考NetSuite文檔here瞭解詳情。如果這不能爲您的情況提供足夠的背景信息,請參閱2017.2發行說明,第67和68頁。希望這有助於您。

相關問題