2017-01-06 1 views
1

私は使用している一連のスクリプトを相互にやりとりしています。私は、クライアント、ユーザーイベント、スイートレットスクリプトを使用して、ボタンを押すと、ベンダーによってフィルタリングされた項目のリストをポップアップ表示するボタンを作成します。レコードの作成中にベンダー別にアイテムを自動的にフィルタリングする

私は編集中にはうまくいますが、レコードの問題が発生したときに使用するとうまくいきます。作成されるレコードにはベンダーやIDがないため、ベンダーによってアイテムを取得することはできません。私がしようとしているのは、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'); 
    } 
} 

Suitelet

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>'); 
    } 
} 

答えて

3

利用nlapiGetFieldValue clientscript上の( 'エンティティ')と(もしあなたがPOIDでやっているだけのようなクエリパラメータを使用してSuiteletに渡します結局のところ、スイートレットにレコードをロードする必要はありません。

また、アイテムごとにnlapiLookupFieldを呼び出す代わりに、1つの検索を実行してitemidsの配列を渡してコードを最適化することもできます。

beforeLoadを変更して、ボタンが押されたときにエンティティが動的に挿入されるようにする必要があります(クライアントスクリプトボタンがこれを行うかどうか覚えていません)。このようなもの:

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); 
+0

私はそれをしなかったと信じられません!それは完璧に働いた。すでにダイナミックなので、あまり変更する必要はありませんでした。 'nlapiLookupField'を使ってもすべてが素早く動くが、間違いなくそれを調べるだろう。ありがとう! – VicDid

関連する問題