2

NetSuite アイテム フォームで、現在すべての NetSuite アイテムを表示しているドロップダウン リスト「サブアイテム」(フィールド名「親」) のいくつかのアイテムを削除したいと考えています。

Before Load でUser Event Scriptを作成し、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

人々はそのようなことに頼ります。その他のオプションは次のとおりです。

  • ターゲット フィールドでフィルタリングを使用して、ドロップダウン オプションを制限する
  • これがアイテムの選択用である場合は、カスタム サブリストを使用して、表示されるアイテムを管理します
  • 上記のいずれも機能しない場合、私が一般的に行ったことは、フォームの自然なドロップダウンを非表示にし、より適切に制御できるカスタムドロップダウンを追加することです. 次に、クライアント スクリプトで、カスタム ドロップダウンから変更を取得し、非表示フィールドに適用します。2 つのシナリオ:
    • フォームをロードするときにドロップダウンの内容がわかっている場合は、リストをフォームの新しい選択フィールドとして作成し、ロード前のユーザー イベント スクリプトに入力するだけです。
    • フォームで選択されている他のものに反応する必要があり、Netsuite の組み込みソーシングが機能しない場合は、クライアント スクリプトを使用して、フォーム イベントに基づいてドロップダウンのコンテンツを変更できます。
于 2015-09-07T18:05:55.450 に答える
2

提案をありがとう、それは本当に私を助けました。私は次のアプローチで終わった:

  • ユーザー イベント スクリプト ( 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
    }
    
  • クライアント スクリプト (フィールド変更イベント) を作成して、新しいカスタム フィールドから元のフィールドにデータをコピーします。また、ページの初期化時に、スクリプトは追加されたフィールドに値を設定します。

  • カスタム フォームの元のフィールドを非表示にします。

ありがとうございました!

于 2015-09-10T03:57:27.923 に答える