如何使用 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 为其提供任何数据。这就是为什么 idItem
是 null
.
了解 mainline
过滤器的行为对于事务搜索至关重要。基本上,它是这样的:
mainline = 'T'
将仅 return 正文字段数据,因此每个交易 return 恰好有一个搜索结果
mainline = 'F'
将仅 return 行项目数据,因此它将 return 每个 行项目 匹配交易[的搜索结果
mainline
未指定将 return 正文字段和行数据,因此它将 return 每个交易本身的一个结果加上每个交易的每一行的一个结果。
这是一个具体的例子。假设系统中只有一个采购订单匹配所有其他搜索过滤器(mainline
除外),并且该采购订单上包含三个项目。这是基于 mainline
过滤器的搜索结果的变化方式:
- 如果
mainline = 'T'
那么您将只得到一个采购订单的结果,并且您只会得到作为正文字段的搜索列的数据。
- 如果
mainline = 'F'
那么您将得到 三个 个结果,每个行项目一个,并且您的所有搜索列都将包含数据,无论它们是 Body 还是 Line字段
- 如果未指定
mainline
那么您将得到恰好 四个 个结果,其中一个将只包含 Body 字段的数据,而其他三个将包含两者线条和主体数据
很难准确地建议您应该如何更改搜索,因为我不知道您打算如何处理这些搜索结果。
朋友们正在使用 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 为其提供任何数据。这就是为什么 idItem
是 null
.
了解 mainline
过滤器的行为对于事务搜索至关重要。基本上,它是这样的:
mainline = 'T'
将仅 return 正文字段数据,因此每个交易 return 恰好有一个搜索结果mainline = 'F'
将仅 return 行项目数据,因此它将 return 每个 行项目 匹配交易[的搜索结果mainline
未指定将 return 正文字段和行数据,因此它将 return 每个交易本身的一个结果加上每个交易的每一行的一个结果。
这是一个具体的例子。假设系统中只有一个采购订单匹配所有其他搜索过滤器(mainline
除外),并且该采购订单上包含三个项目。这是基于 mainline
过滤器的搜索结果的变化方式:
- 如果
mainline = 'T'
那么您将只得到一个采购订单的结果,并且您只会得到作为正文字段的搜索列的数据。 - 如果
mainline = 'F'
那么您将得到 三个 个结果,每个行项目一个,并且您的所有搜索列都将包含数据,无论它们是 Body 还是 Line字段 - 如果未指定
mainline
那么您将得到恰好 四个 个结果,其中一个将只包含 Body 字段的数据,而其他三个将包含两者线条和主体数据
很难准确地建议您应该如何更改搜索,因为我不知道您打算如何处理这些搜索结果。