2015-06-17 90 views
-1

我正在爲網絡套件編寫腳本。腳本的要點是在實際批准訂單之前檢查銷售訂單以確保信用額度高於訂單總額。該腳本在用戶單擊銷售訂單上的「批准」按鈕時運行。我成功檢查了其銷售訂單以及操作類型是否被批准。我不理解的是如果訂單確實超過了信用額度,如何停止批准。有人可以幫助我嗎?我嘗試將訂單狀態設置回等待批准並提交訂單,但它不能像那樣工作。狀態沒有設置。也沒有取消類型的命令。任何人有任何想法,任何幫助將不勝感激。Netsuite Suitescript在批准前停止批准

 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; 
    } 

回答

0

您可以拋出異常,從而中止提交操作。在您的beforeSubmit()函數,你可以有這樣的:

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

這種工作方式並不完全是我想要的方式,但我相信你正在回答我的問題,因爲沒有辦法創建我正在尋找的功能。這將不得不工作。謝謝。 – user1344519

+0

如果條件不符合,您可以嘗試主動方法並禁用批准按鈕本身... –

0

你的代碼的作品,但您需要更改nlapiSetFieldText('orderstatus', 'A');nlapiSetFieldValue('orderstatus', 'A');

我用它在一個腳本,總量比較的SO和如果增加審批狀態,則更改審批狀態。