Suitescript在批准前停止批准订单

时间:2015-06-17 20:23:10

标签: netsuite

我正在研究网络套件的脚本。脚本的目的是检查销售订单,以确保在实际批准订单之前信用额度高于订单总数。当用户单击销售订单上的“批准”按钮时,脚本将运行。我成功检查了它是否是销售订单以及是否批准了操作类型。如果订单确实超过信用限额,我不理解的是如何停止批准。我尝试将订单状态设置回待审批并提交订单,但它不起作用。状态未设置。也没有取消类型的命令。

     function beforeApproveSalesOrder(type)
    {
        var recordType = nlapiGetRecordType();
        var recordId = nlapiGetRecordId();
        if (recordType == 'salesorder')
        {
           if (type == 'approve')
           {
               var recordId = nlapiGetRecordId();
               nlapiLogExecution("debug", "Check Credit Limit Before Approval", "Found sales order with transaction type of approve.");
               var salesOrderTotalCost = nlapiGetFieldValue('total');
               var customer = nlapiGetFieldValue('entity');
               var customerCreditLimit = queryCustomerCreditLimit(customer);

               if (customerCreditLimit < salesOrderTotalCost)
               {
                  nlapiSetFieldText('orderstatus', 'A');
                  nlapiLogExecution("debug", "Check Credit Limit Before Approval", "order status set");

                  nlapiSubmitRecord(recordId, true);
                }
              }
          }
      }

    function queryCustomerCreditLimit( customer )
    {
        var filters = new Array();
        filters[0] = new nlobjSearchFilter( 'internalid', 'null', 'is', customer);
        var columns = new Array();
        columns[0] = new nlobjSearchColumn( 'creditlimit' );
        var searchresults = nlapiSearchRecord( 'customer', null, filters, columns );
        var creditLimit = searchresults[ 0 ].getValue( 'creditlimit' );
        return creditLimit;
   }

2 个答案:

答案 0 :(得分:0)

您可以抛出异常,从而中止提交操作。在beforeSubmit()函数中,您可以使用:

if (customerCreditLimit < salesOrderTotalCost){
  throw nlapiCreateError('Error','Cannot Approve. Exceeds credit limit',true);
}

答案 1 :(得分:0)

您的代码有效,但您需要将nlapiSetFieldText('orderstatus', 'A');更改为nlapiSetFieldValue('orderstatus', 'A');

我在一个脚本上使用它来比较SO的总量,如果它已经增加,则会更改批准状态。

相关问题