javascript - 在创建记录期间按 vendor 自动过滤项目

标签 javascript netsuite suitescript

我有一组正在使用的相互交互的脚本。我使用客户端、用户事件和 suitelet 脚本来创建一个按钮,当按下该按钮时,会打开一个弹出窗口,其中包含按 vendor 过滤的项目列表。

当我在编辑时它工作正常但是当我在创建记录时使用它时出现问题。由于要创建的记录没有 vendor 或 ID,因此我无法按 vendor 检索项目。我想要做的是让 Suitelet 从保存之前输入的 vendor 字段中检索信息。因此,我可以按 vendor 过滤所有项目,并一次性添加必要的项目。这可能吗?我可以在信息提交之前访问它吗?

下面是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 + 无需加载记录在套房上)。

此外,您可能希望通过运行一次传递一组 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);

关于javascript - 在创建记录期间按 vendor 自动过滤项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41501436/

相关文章:

Android web View 中的 Javascript

javascript - Web Audio API 和音频下载和保护

javascript - 如何使用 SuiteScript 2.0 将文件从本地上传到 NetSuite 文件柜

html - Netsuite 电子邮件模板代码

syntax-error - 无法确定预定Suitescript上评估错误的原因

javascript - 设置 Suitelet 表单的请求 URL

javascript - 如何在不移动列表中其他元素的情况下使文本出现在 div 下?

javascript - 在新终端中使用 child_process 启动 Node.js Express 服务器

javascript - NetSuite 脚本在提交后从另一个行级字段更新

netsuite - 如何访问 Netsuite 错误日志