2

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

结果给我的日志 NetSuite 是:

采购订单 ID:3706 供应商 ID:144 项目 ID:null Trandate:06/08/2015 表格:标准采购订单 货币:比索 CL

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

加载javascript以使用采购订单的函数如下:

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');

它不起作用= /

4

1 回答 1

9

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

NetSuite 将 Transaction 记录(Purchase Order 是 Transaction 的一种)分为 Body 和 Line Item 字段。当您执行包含 的事务搜索时mainline = 'T',您是在告诉 NetSuite 仅检索正文字段数据。但是,该item字段是 Line Item 字段,因此 NetSuite 不会为其返回任何数据。idItem这就是为什么null

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

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

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

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

由于我不知道您打算如何处理这些搜索结果,因此很难就您应该如何更改搜索提供确切的建议。

于 2015-08-10T22:38:44.460 回答