NetSuite - 从下拉列表中删除一个项目

NetSuite - Remove an item from a dropdown

在 NetSuite Items 表单上,我想删除下拉列表“Sub-Item Of”(字段名称 "parent")的一些项目,该列表当前显示所有 NetSuite Items。

我尝试在加载前创建一个用户事件脚本,并使用API nlapiRemoveSelectOption,但是NetSuite 引发错误,通知该方法不存在。当尝试在客户端使用 API 时,它 returns 一个错误,通知该方法在客户端不可用。该方法被调用如下:

nlapiRemoveSelectOption('parent', '1');  // 1 is the internal Id

调查脚本源代码后,我能够从列表中删除项目的唯一方法是在客户端使用名为 deleteOneOption 的非文档化方法。

getDropdown(window.document.getElementsByName('inpt_parent')[0]).deleteOneOption('1');    

但是,这应该不是最好的方法,因为它没有记录,而且我正在直接访问 DOM 对象,这可能不适用于未来的版本。

有谁知道从该字段中删除某些项目的更好方法吗?

谢谢。

人们确实诉诸于那种事情。 其他选项包括:

  • 在目标字段上使用筛选来限制下拉选项
  • 如果这是针对项目 selection 使用自定义子列表来管理显示的项目
  • 如果以上都没有,我通常做的是隐藏表单上的自然下拉菜单并添加我可以更好控制的自定义下拉菜单。然后在客户端脚本中,我从自定义下拉列表中进行更改并将其应用于隐藏字段。两种情况:
    • 如果您在加载表单时知道下拉列表内容,您可以将列表创建为表单上的新 select 字段,并在加载前的用户事件脚本中填充它。
    • 如果您需要对表单上 selected 的其他内容做出反应,而 Netsuite 的内置资源不起作用,那么您可以使用客户端脚本根据表单更改下拉列表的内容事件。

谢谢你的建议,它真的帮助了我。我最终采用了以下方法:

  • 创建用户事件脚本(Before Load 事件),以编程方式添加字段,以便我可以更好地控制列表并且我能够删除或插入选项。在 API nlapiRemoveSelectOption 有效的情况下。

    function beforeLoad(type, form, request) {
    
        var fld = form.addField('custpage_item', 'select', 'Subitem Of', 'item', null);
    
        // Inserts the field after the "Subitem Of" original
        form.insertField(fld, 'parent'); 
    
        nlapiRemoveSelectOption('custpage_item', '1');  // internal id to remove
    }
    
  • 创建客户端脚本(字段更改事件)以将数据从新的自定义字段复制到原始字段。此外,在页面初始化上,脚本将值设置为添加的字段。

  • 隐藏自定义表单上的原始字段。

谢谢!