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

时间:2015-09-05 16:11:49

标签: netsuite suitescript

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

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

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

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

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

  • 创建用户事件脚本(加载前事件),以编程方式添加字段,以便我可以更好地控制列表,并且我可以删除或插入选项。如果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上,脚本将值设置为添加的字段。

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

谢谢!