【问题标题】:Pass variables from suitelet to clientscript in 2.x API?在 2.x API 中将变量从套件传递到客户端脚本?
【发布时间】:2017-02-18 00:45:50
【问题描述】:

我用套件构建了一个表单,它有一个子列表、下拉列表和一个按钮。在用户勾选子列表上的一些选择后,按下一个按钮,选定的项目将通过 rest 发送到其他地方。

套房:

  @NApiVersion 2.x
  *@NScriptType Suitelet
  */
define(['N/ui/serverWidget', 'N/search', 'N/https', 'N/record'],
  function(serverWidget, search, https, record) {
    function onRequest(context) {
     if (context.request.method === 'GET') {
       var form = serverWidget.createForm({ ... });
       form.clientScriptModulePath = 'path/to/client/script';
       // code to build a sublist, add a button and write page
      } return {
         onRequest: onRequest
        };
      });

然后,我的客户端脚本是这样的:

* @NApiVersion 2.x
* @NScriptType ClientScript
*/
define(
    [ 'N/currentRecord', 'N/https' ],
    function(currentRecord, https) {
      functionSendRequest(sublist //the sublist that I want to get from the suitelet)
      {
        //code to build json string and send http request
      } return {
         saveRecord: test
        }
    });

现在,在花费了几个小时之后,我注意到了一个 N/currentRecord(我不喜欢 netsuite),它似乎是我的问题解决者,因为它检索当前正在使用的记录在客户端上下文中活跃。它非常适合下拉菜单,并且有一个 getSublist(options) 方法,尽管它返回的 record.Sublist 只有 getColumn() 方法。因此,它对我来说真的不起作用。那么,一旦按下按钮,有没有办法将子列表参数从套件传递给客户端脚本?

【问题讨论】:

    标签: netsuite suitescript


    【解决方案1】:

    要解决您的问题,您可以像这样使用 currentRecord 中的 getSublistValue:

    var currentRec = currentRecord.get();
    var numLines = currentRec.getLineCount({
        sublistId: 'item'
    });
    var sublistFieldValue = currentRec.getSublistValue({
        sublistId: 'item',
        fieldId: 'item',
        line: 3
    });
    

    如果你真的想从 Suitelet 向客户端函数传递一些东西,你必须这样设置你的按钮:

    var someTextToPassToTheClientscript = 'The Suitelet send its regards';
    form.addButton({
        id : 'custpage_some_button',
        label : 'MyButton',
        functionName : 'functionSendRequest("' + someTextToPassToTheClientscript + '")'
    });
    

    然后让您的客户端脚本像这样接收它:

    /*
     * @NApiVersion 2.x
     * @NScriptType ClientScript
     */
    define(
        ['N/currentRecord', 'N/https'],
        function (currentRecord, https) {
        functionSendRequest(textReceivedFromSuitelet) {
            //code to build json string and send http request
        }
        return {
            functionSendRequest : functionSendRequest
        }
    });
    

    【讨论】:

    • 您好,非常感谢您的回复!欣赏它,我会试一试。好奇,有没有办法让我用按钮上的 functionName 选项调用套件中的另一个函数?我无法让它工作,stackoverflow 上的另一个人建议使用客户端脚本。但是,从客户端发送 rest 调用似乎不是一个好方法。
    • 通过 POST 将数据从您的客户端脚本传递到您的套件,使用 POST 正文中的变量之一来识别操作类型并让您的套件调用 Restlet。
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2017-08-26
    • 1970-01-01
    • 2015-03-03
    • 2018-11-02
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多