在创建记录期间按供应商自动过滤项目
Automatically Filtering Items By Vendor During Creation of a Record
我正在使用一组相互交互的脚本。我使用客户端、用户事件和 suitelet 脚本来创建一个按钮,当按下该按钮时,会打开一个弹出窗口,其中包含由供应商筛选的项目列表。
编辑时它工作正常,但是当我在创建记录时使用它时出现问题。由于要创建的记录没有供应商或 ID,因此我无法按供应商检索项目。我想要做的是让 Suitelet 从保存之前输入的供应商字段中检索信息。因此,我可以按供应商过滤所有项目,并一次性添加必要的项目。这可能吗?我可以在提交之前访问信息吗?
下面是Client和Suitelet。用户事件只是对 suitelet 的调用,因此为了简洁起见,我将其省略。
客户端脚本
function addItemButtonCallback(data){
nlapiSelectNewLineItem('item');
nlapiSetCurrentLineItemValue('item', 'item', data);
nlapiCommitLineItem('inventoryitem');
}
function addItemButton() {
var id = nlapiGetFieldValue('id');
if (id != "") {
var url = nlapiResolveURL('SUITELET', 'customscript_val', 'customdeploy1') + '&poId='+id;
window.open(url, '_blank', 'width=500,height=500');
}
}
套房
function suitelet(request, response){
if(request.getMethod() == 'GET') {
var form = nlapiCreateForm('Add Item');
form.addSubmitButton('Submit');
var itemfield = form.addField('custpage_val', 'select', 'Item');
var id = request.getParameter('id');
var rec = nlapiLoadRecord('purchaseorder', id);
var vend = rec.getFieldValue('entity');
var search = nlapiSearchRecord(...search parameters...);
for (result in search){
if (search[result].getValue('vendor') == vend){
itemfield.addSelectOption(search[result].id, nlapiLookupField('inventoryitem', search[result].id, 'itemid'));
}
}
response.writePage(form);
} else {
var data = request.getParameter('custpage_item');
response.write('<html><body><script>window.opener.addItemButtonCallback("'+data+'"); window.close();</script></body></html>');
}
}
在客户端脚本上使用 nlapiGetFieldValue('entity') 并使用查询参数将其传递给 Suitelet,就像您使用 poId 一样(如果您这样做,您可能根本不需要 poId + 不需要在 suitelet 上加载记录)。
此外,您可能希望通过 运行 一次搜索传递一组 itemid 而不是为每个项目调用 nlapiLookupField 来优化您的代码。
您可能需要修改 beforeLoad,以便在按下按钮时动态插入实体(我不记得 clientscript 按钮是否这样做)。像这样:
var suiteletURL = nlapiResolveURL('SUITELET', 'customscript_val', 'customdeploy1');
var script = "var entity = nlapiGetFieldValue('entity'); var url = '" + suiteletURL + "'&entityId=' + entity;window.open(url, '_blank', 'width=500,height=500')";
var button = form.addButton('custpage_addItemButton', 'Add Item', script);
我正在使用一组相互交互的脚本。我使用客户端、用户事件和 suitelet 脚本来创建一个按钮,当按下该按钮时,会打开一个弹出窗口,其中包含由供应商筛选的项目列表。
编辑时它工作正常,但是当我在创建记录时使用它时出现问题。由于要创建的记录没有供应商或 ID,因此我无法按供应商检索项目。我想要做的是让 Suitelet 从保存之前输入的供应商字段中检索信息。因此,我可以按供应商过滤所有项目,并一次性添加必要的项目。这可能吗?我可以在提交之前访问信息吗?
下面是Client和Suitelet。用户事件只是对 suitelet 的调用,因此为了简洁起见,我将其省略。
客户端脚本
function addItemButtonCallback(data){
nlapiSelectNewLineItem('item');
nlapiSetCurrentLineItemValue('item', 'item', data);
nlapiCommitLineItem('inventoryitem');
}
function addItemButton() {
var id = nlapiGetFieldValue('id');
if (id != "") {
var url = nlapiResolveURL('SUITELET', 'customscript_val', 'customdeploy1') + '&poId='+id;
window.open(url, '_blank', 'width=500,height=500');
}
}
套房
function suitelet(request, response){
if(request.getMethod() == 'GET') {
var form = nlapiCreateForm('Add Item');
form.addSubmitButton('Submit');
var itemfield = form.addField('custpage_val', 'select', 'Item');
var id = request.getParameter('id');
var rec = nlapiLoadRecord('purchaseorder', id);
var vend = rec.getFieldValue('entity');
var search = nlapiSearchRecord(...search parameters...);
for (result in search){
if (search[result].getValue('vendor') == vend){
itemfield.addSelectOption(search[result].id, nlapiLookupField('inventoryitem', search[result].id, 'itemid'));
}
}
response.writePage(form);
} else {
var data = request.getParameter('custpage_item');
response.write('<html><body><script>window.opener.addItemButtonCallback("'+data+'"); window.close();</script></body></html>');
}
}
在客户端脚本上使用 nlapiGetFieldValue('entity') 并使用查询参数将其传递给 Suitelet,就像您使用 poId 一样(如果您这样做,您可能根本不需要 poId + 不需要在 suitelet 上加载记录)。
此外,您可能希望通过 运行 一次搜索传递一组 itemid 而不是为每个项目调用 nlapiLookupField 来优化您的代码。
您可能需要修改 beforeLoad,以便在按下按钮时动态插入实体(我不记得 clientscript 按钮是否这样做)。像这样:
var suiteletURL = nlapiResolveURL('SUITELET', 'customscript_val', 'customdeploy1');
var script = "var entity = nlapiGetFieldValue('entity'); var url = '" + suiteletURL + "'&entityId=' + entity;window.open(url, '_blank', 'width=500,height=500')";
var button = form.addButton('custpage_addItemButton', 'Add Item', script);