如何使用SuiteScript采购订单加载项目?

时间:2015-08-10 21:10:14

标签: netsuite purchase-order suitescript

朋友们正在使用NetSuite和SuiteScript。我可以保存运行脚本的采购订单,还可以收取已创建的采购订单,但是当我将返回数据项值作为空值时,我需要获取该项目的ID。

结果给我的日志NetSuite是:

采购订单编号:3706供应商ID:144货号:null Trandate:06/08/2015表格:标准采购订单货币:Peso CL

这发生在所有采购订单中,显然如果您有附加物品。

加载javascript以使用Purchase Order的功能如下:

function loadPurchaseOrder(){

nlapiLogExecution('DEBUG','loadPurchaseOrder', 'Entra a funcion loadPurchaseOrder');    

//se aplican filtros para la busqueda del objeto  
var filters= new Array();
filters[0] = new nlobjSearchFilter('purchaseorder',null,'isnotempty');
filters[1] = new nlobjSearchFilter('mainline', null, 'is', 'T');

//seleccion de los campos que se quieren extraer
var columns = new Array();    
columns[0] = new nlobjSearchColumn('item');
columns[1] = new nlobjSearchColumn('entity');
columns[2] = new nlobjSearchColumn('trandate');
columns[3] = new nlobjSearchColumn('customform');
columns[4] = new nlobjSearchColumn('currency');
columns[5] = new nlobjSearchColumn('internalid');

var results = nlapiSearchRecord('purchaseorder',null,filters,columns);

var out = "";
if(results != null ){

    for(var i=0; i< results.length; i++){

        var purchaseOrder = results[i];
        var idItem = purchaseOrder.getValue('item');                        
        var idVendor = purchaseOrder.getValue('entity');
        var trandate = purchaseOrder.getValue('trandate');
        var form = purchaseOrder.getText('customform');
        var currency = purchaseOrder.getText('currency');
        var idPurchaseOrder = purchaseOrder.getText('internalid');

        out = " ID Purchase Order: " + idPurchaseOrder + " ID Vendor: " + idVendor + " ID Item: " + idItem
              + " Trandate: " + trandate + " Form: " + form + " Currency: " + currency;

        nlapiLogExecution('DEBUG','purchaseOrderCargada', out);

    }
} 

return out;  

}

如果有人可以帮助我。问候!

PD:

我也试过了:

var idItem = nlapiGetLineItemField('item','item');

并且它不起作用= /

1 个答案:

答案 0 :(得分:7)

这可能是一个比你预期的更长的答案,但我们走了。

NetSuite将交易记录(采购订单是一种交易)划分为正文和行项目字段。当您执行包含mainline = 'T'的事务搜索时,您告诉NetSuite仅检索Body字段数据。但是,item字段是行项目字段,因此NetSuite不会为其返回任何数据。这就是idItemnull的原因。

了解mainline过滤器的行为对于事务搜索至关重要。基本上,它是这样的:

  • mainline = 'T'只会返回正文字段数据,因此每个事务只返回一个搜索结果
  • mainline = 'F'只会返回订单项数据,因此会在匹配的交易中为每个订单项返回一个搜索结果
  • 未指定的
  • mainline将返回正文字段和行数据,因此它将为每个事务本身返回一个结果,并为每个事务的每一行返回一个结果。

这是一个具体的例子。我们假设系统中只有一个采购订单与您的所有其他搜索过滤器(mainline除外)匹配,并且该采购订单上有三个项目。这是搜索结果将根据mainline过滤器更改的方式:

  • 如果mainline = 'T'那么您将获得采购订单的一个结果,并且您将只获取作为正文字段的搜索列的数据。
  • 如果mainline = 'F'那么您将获得完全三个结果,每个订单项一个,并且所有搜索列都将包含数据,无论它们是正文还是行字段
  • 如果未指定mainline,那么您将获得四个结果,其中一个仅包含Body字段的数据,其他三个将包含Line和Body数据< / LI>

很难就您应该如何更改搜索提出建议,因为我不知道您打算如何处理这些搜索结果。