2017-06-23 31 views
0

私は、「リンクを開く」ボタンと、「URL」という名前のレコードにNetSuiteの添付ファイルへのハイパーリンクを含むフィールドを追加するワークフローを持っています。このURLを別のページに開くワークフローアクションスクリプトを追加します。スクリプトとワークフローアクションをワークフローに追加しました。マイスクリプト:NetSuite/Suitescript/Workflow:ボタンをクリックした後、フィールドからURLを開くにはどうすればよいですか?

function openURL() { 

var url = nlapiGetFieldValue('custbody_url'); 

window.open(url);  

} 

私はボタンをクリックした後、このスクリプトエラーを取得:「例外TypeError:オブジェクトで開いて、[オブジェクトのオブジェクト]機能を見つけることができません

それがでURLを開きますので、どのように私は私のスクリプトを変更することができますあなたに実行しているフィールド?

(私はコンソールでそれをしようとすると、この機能は動作します)

ありがとう!

答えて

1

レコードを表示または編集しているときに機能しますか?彼らはわずかに異なるスクリプトを持っています。レコードが表示されているときにボタンを動作させたいと思っていますが、ドキュメントを編集中であっても機能するように記述します。

Netsuiteは、2つのスクリプト、ユーザーイベントスクリプト、およびクライアントスクリプトが必要です。 @michoelが提案する方法は、あまりにもうまくいくかもしれません...私は個人的にテキストの前にスクリプトを挿入したことはありません。 おそらく今日はいつかそれを試してみます。

ここでは、使用できるユーザーイベントがあります(自分でテストしていないので、すべてのユーザーに展開する前にテストを実行する必要があります)。

function userEvent_beforeLoad(type, form, request) 
{ 
    /* 
    Add the specified client script to the document that is being shown 
    It looks it up by id, so you'll want to make sure the id is correct 
    */ 
    form.setScript("customscript_my_client_script"); 

    */ 
    Add a button to the page which calls the openURL() method from a client script 
    */ 
    form.addButton("custpage_open_url", "Open URL", "openURL()");  
} 

これをUser EventスクリプトのSuitescriptファイルとして使用します。スクリプトページのロード前機能をuserEvent_beforeLoadに設定します。実行したいレコードに展開してください。

ここには、それと一緒に行くクライアントスクリプトがあります。

function openURL() 
{ 
    /* 
    nlapiGetFieldValue() gets the url client side in a changeable field, which nlapiLookupField (which looks it up server side) can't do 
    if your url is hidden/unchanging or you only care about view mode, you can just get rid of the below and use nlapiLookupField() instead 
    */ 
    var url = nlapiGetFieldValue('custbody_url'); 

    /* 
    nlapiGetFieldValue() doesn't work in view mode (it returns null), so we need to use nlapiLookupField() instead 
    if you only care about edit mode, you don't need to use nlapiLookupField so you can ignore this 
    */ 
    if(url == null) 
    { 
     var myType = nlapiGetRecordType(); 
     var myId = nlapiGetRecordId(); 
     url = nlapiLookupField(myType, myId,'custbody_url'); 
    } 

    //opening up the url 
    window.open(url);  
} 

クライアントスクリプトとして追加しますが、展開はしないでください(ユーザーイベントスクリプトによってフォームに追加されます)。このスクリプトのIDがのcustomscript_my_client_script(または、form.setScript()のユーザーイベントスクリプトで使用したスクリプトID)であることを確認してください。そうしないと、動作しません。

さらに、各レコードにはform.setScript()を使用して1つのスクリプトしか追加できないということです(ユーザーのイベントスクリプトとクライアントスクリプトのタイトルに、あなたはそれを展開しています。 form.setscriptの使用は、「フォームのカスタマイズ」メニューでスクリプト値を設定するのと同じです。

@ michoelの回答がうまくいくならば、ロジックをすべて私の視点から見ると、あなたのスイーツスクリプトを簡単に管理できるようにすることができます。

0

問題は、ワークフローActioということですnスクリプトはサーバー側で実行されるため、新しいタブを開くなどのクライアント側の操作は実行できません。クライアントのコードをボタンonclick関数に「注入」できるUser Event Scriptを使用することをお勧めします。

function beforeLoad(type, form) { 
    var script = "window.open(nlapiGetFieldValue('custbody_url'))"; 
    form.addButton('custpage_custom_button', 'Open URL', script); 
} 
+0

これは私のために空白のページを開きます。私が追加しようとするときに: 'var rec = nlapiLoadRecord( 'vendorbill'、nlapiGetRecordId()); var url = rec.getFieldValue( 'custbody_url'); ' このページを開こうとすると、何もせずにページにとどまります – bluejay92

関連する問題