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

How to load items with SuiteScript Purchase Orders?

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

结果给我的 NetSuite 日志是:

采购订单 ID:3706 供应商 ID:144 商品 ID:空交易日期:06/08/2015 表格:标准采购订单货币:比索 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');

它不起作用 = /

答案可能比您预期的要长,但我们开始吧。

NetSuite 将交易记录(Purchase Order 是一种交易)分为 Body 和 Line Item 字段。当您执行包含 mainline = 'T' 的事务搜索时,您是在告诉 NetSuite 仅检索 Body 字段数据。但是,item 字段是行项目字段,因此 NetSuite 不会 return 为其提供任何数据。这就是为什么 idItemnull.

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

  • mainline = 'T' 将仅 return 正文字段数据,因此每个交易 return 恰好有一个搜索结果
  • mainline = 'F' 将仅 return 行项目数据,因此它将 return 每个 行项目 匹配交易[的搜索结果
  • mainline 未指定将 return 正文字段和行数据,因此它将 return 每个交易本身的一个结果加上每个交易的每一行的一个结果。

这是一个具体的例子。假设系统中只有一个采购订单匹配所有其他搜索过滤器(mainline 除外),并且该采购订单上包含三个项目。这是基于 mainline 过滤器的搜索结果的变化方式:

  • 如果 mainline = 'T' 那么您将只得到一个采购订单的结果,并且您只会得到作为正文字段的搜索列的数据。
  • 如果 mainline = 'F' 那么您将得到 三个 个结果,每个行项目一个,并且您的所有搜索列都将包含数据,无论它们是 Body 还是 Line字段
  • 如果未指定 mainline 那么您将得到恰好 四个 个结果,其中一个将只包含 Body 字段的数据,而其他三个将包含两者线条和主体数据

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