2

在 NetSuite 项目表单上,我想删除下拉列表“子项目”(字段名称“父”)中的一些项目,该列表当前显示所有 NetSuite 项目。

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

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

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

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

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

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

谢谢你。

4

2 回答 2

2

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

  • 创建一个用户事件脚本(加载前事件),以编程方式添加字段,以便我可以更好地控制列表,并且可以删除或插入选项。在 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
    }
    
  • 创建客户端脚本(字段更改事件)以将数据从新的自定义字段复制到原始字段。此外,在页面 init 上,脚本将值设置为添加的字段。

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

谢谢!

于 2015-09-10T03:57:27.923 回答
2

人们确实会求助于这种事情。其他选项包括:

  • 对目标字段使用过滤来限制下拉选项
  • 如果这是用于项目选择,请使用自定义子列表来管理显示的项目
  • 如果上述任何一项工作我通常所做的都是隐藏表单上的自然下拉菜单并添加我可以更好地控制的自定义下拉菜单。然后在客户端脚本中,我从自定义下拉列表中进行更改并将其应用于隐藏字段。两种情况:
    • 如果您在加载表单时知道下拉内容,则可以将列表创建为表单上的新选择字段,并将其填充到加载用户事件脚本之前。
    • 如果您需要对表单上选择的其他内容做出反应并且 Netsuite 的内置采购不起作用,那么您可以使用客户端脚本根据表单事件更改下拉列表的内容。
于 2015-09-07T18:05:55.450 回答