【问题标题】:add button and update sales order using netsuite使用 netsuite 添加按钮和更新销售订单
【发布时间】:2018-06-27 07:06:17
【问题描述】:

我是 netsuite 的新手,我需要通过单击按钮向其添加项目来更新销售订单我已经使用用户事件脚本编写了按钮代码和使用客户端脚本更新销售订单的代码。但是我的客户端脚本不工作

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/currentRecord','N/record'],

function(record) {

     function buttonclick() {

            try{
                var CurrRecord = currentRecord.get();
                var recIdSO= CurrRecord.id;
                var salesOrder = record.load({
                        type: record.Type.SALES_ORDER,
                        id:recIdSO ,
                        isDynamic: true
                      });
                 log.debug({
                     title: 'recordid',
                     details: 'Id: ' + recIdSO
                 }); 

                    var line=salesOrder.selectNewLine({
                     sublistId: 'item'

                 });

                    salesOrder.setCurrentSublistValue({
                            sublistId : 'item',
                            fieldId : 'item',
                            value :510 ,
                            ignoreFieldChange: true
                        });

                    salesOrder.setCurrentSublistValue({
                        sublistId : 'item',
                        fieldId : 'amount',
                        value :100 ,
                        ignoreFieldChange: true
                    });

                    salesOrder.commitLine({
                         sublistId: 'item'
                     });
                     var recId = salesOrder.save();
                     log.debug({
                         title: 'Record updated successfully',
                         details: 'Id: ' + recId
                     });

            }catch (e) {

                         log.error({
                             title: e.name,
                             details: e.message
                         });
                     }


        }





    /**
     * Function to be executed after page is initialized.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
     *
     * @since 2015.2
     *
    function pageInit(scriptContext) {

    }

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     *
    function fieldChanged(scriptContext) {

    }

    /**
     * Function to be executed when field is slaved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     *
     * @since 2015.2
     *
    function postSourcing(scriptContext) {

    }

    /**
     * Function to be executed after sublist is inserted, removed, or edited.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @since 2015.2
     *
    function sublistChanged(scriptContext) {

    }

    /**
     * Function to be executed after line is selected.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @since 2015.2
     *
    function lineInit(scriptContext) {

    }

    /**
     * Validation function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @returns {boolean} Return true if field is valid
     *
     * @since 2015.2
     *
    function validateField(scriptContext) {

    }

    /**
     * Validation function to be executed when sublist line is committed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     *
    function validateLine(scriptContext) {

    }

    /**
     * Validation function to be executed when sublist line is inserted.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     *
    function validateInsert(scriptContext) {

    }

    /**
     * Validation function to be executed when record is deleted.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     *
     * @returns {boolean} Return true if sublist line is valid
     *
     * @since 2015.2
     *
    function validateDelete(scriptContext) {

    }

    /**
     * Validation function to be executed when record is saved.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @returns {boolean} Return true if record is valid
     *
     * @since 2015.2
     */
    function saveRecord(scriptContext) {




    }

 return {

        saveRecord: saveRecord,
        buttonclick:buttonclick
    };

});

【问题讨论】:

  • 您能否分享您的 UE 脚本并描述您如何设置脚本记录和部署?另外,请描述什么是“不起作用” - 您期望什么结果以及您得到什么?
  • 您是否尝试过仅使用工作流/工作流脚本?您可以通过调用脚本的工作流添加一个按钮。然后脚本可以执行您需要执行的操作(在这种情况下,向 SO 添加一行)。

标签: button netsuite


【解决方案1】:

您当前的示例几乎是正确的。

你需要几样东西:

  1. 首先将fireSlavingSync:true 添加为所有setCurrentLineItemValue 方法的属性。否则,当您拨打commitLine 电话时,Netsuite 可能尚未完成更新项目的字段。
  2. 我也倾向于设置ignoreFieldChange:false
  3. 您可能需要为订单项设置价格水平。根据您的 Netsuite 版本,您应该能够设置自定义价格水平:

    salesOrder.setCurrentSublistValue({ sublistId : 'item', fieldId : 'price', value :-1 , ignoreFieldChange: false, fireSlavingSync:true });

【讨论】:

  • 感谢您的帮助...但我已经使用其他方法完成了我的任务
【解决方案2】:

AFAIK,如果您从客户端脚本添加按钮,它们仅在编辑模式下可用,并且您尝试加载相同的记录并更新它,这将导致 UI 上的记录已更改错误消息(另外,NetSuite 没有不推荐这个)。更好的方法是使用工作流来更新记录。 在工作流程中,您可以使用工作流程本身添加按钮,然后单击按钮触发您的工作流程操作脚本以更新订单上的行项目。 Here 是您可以参考的示例。

【讨论】:

  • 无论如何我已经丢失了工作流脚本我已经成功地编写了客户端脚本
  • 嗨 avi.. 可以给我你的电子邮件 id
  • avivashisth@gmail.com
【解决方案3】:
/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/currentRecord', 'N/record'],

  function (currentRecord, record) {

    function pageInit(scriptContext) {

    }

    function buttonclick() {
      try {
        var salesOrder = currentRecord.get();
        console.log(salesOrder)
        var recIdSO = salesOrder.id;
        /*              var salesOrder = record.load({
                        type: record.Type.SALES_ORDER,
                        id:recIdSO ,
                        isDynamic: true
                      });*/
        /*              console.log('recordid'+ recIdSO);
        */               /*log.debug({
                           title: 'recordid',
                           details: 'Id: ' + recIdSO
                       }); */

        var line = salesOrder.selectNewLine({
          sublistId: 'item'

        });
        console.log('line' + line);

        salesOrder.setCurrentSublistValue({
          sublistId: 'item',
          fieldId: 'item',
          value: 510,
          ignoreFieldChange: true
        });

        salesOrder.setCurrentSublistValue({
          sublistId: 'item',
          fieldId: 'amount',
          value: 100,
          ignoreFieldChange: true
        });
        salesOrder.setCurrentSublistValue({
          sublistId: 'item',
          fieldId: 'taxcode',
          value: -160,
          ignoreFieldChange: true
        });

        salesOrder.commitLine({
          sublistId: 'item'
        });
        var recId = salesOrder.save();
        log.debug({
          title: 'Record updated successfully',
          details: 'Id: ' + recId
        });

      } catch (e) {

        console.log('recordid' + recIdSO);
        /*log.error({
            title: e.name,
            details: e.message
        });*/
      }
    }

    return {
      pageInit: pageInit,
      buttonclick: buttonclick
    };
  });

【讨论】:

  • 玛格,你能分享一下你是如何做到这一点的吗?我正在尝试对脚本记录上的客户端脚本按钮定义做类似的事情,但由于某种原因,它没有找到我的功能。我正在返回我的函数 buttonclick 并且页面上有一个按钮,我在脚本记录上使用函数“buttonclick”创建了一个按钮,但代码没有运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多