我正在研究网络套件的脚本。脚本的目的是检查销售订单,以确保在实际批准订单之前信用额度高于订单总数。当用户单击销售订单上的“批准”按钮时,脚本将运行。我成功检查了它是否是销售订单以及是否批准了操作类型。如果订单确实超过信用限额,我不理解的是如何停止批准。我尝试将订单状态设置回待审批并提交订单,但它不起作用。状态未设置。也没有取消类型的命令。
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 :(得分:0)
您可以抛出异常,从而中止提交操作。在beforeSubmit()函数中,您可以使用:
if (customerCreditLimit < salesOrderTotalCost){
throw nlapiCreateError('Error','Cannot Approve. Exceeds credit limit',true);
}
答案 1 :(得分:0)
您的代码有效,但您需要将nlapiSetFieldText('orderstatus', 'A');
更改为nlapiSetFieldValue('orderstatus', 'A');
我在一个脚本上使用它来比较SO的总量,如果它已经增加,则会更改批准状态。