2017-06-23 81 views
0

我有一個工作流程,添加一個按鈕「打開鏈接」,並在名爲「URL」的記錄中包含超鏈接到NetSuite附件的一個字段。我想添加一個工作流程操作腳本,在另一個頁面中打開此URL。我已將腳本和工作流程操作添加到工作流程中。我的腳本:NetSuite/Suitescript /工作流程:點擊按鈕後,如何從字段中打開URL?

function openURL() { 

var url = nlapiGetFieldValue('custbody_url'); 

window.open(url);  

} 

我得到這個腳本錯誤點擊按鈕後:「類型錯誤:無法找到函數對象的翻譯:開放

我怎樣才能改變我的腳本,以便它打開的URL。現場?

(當我嘗試在控制檯此功能)

謝謝!

回答

1

你想在查看或編輯記錄時使用它嗎?他們有略微不同的腳本。我會假設你想讓按鈕在查看記錄時工作,但是我會寫它,因此即使在編輯文檔時也能正常工作。

有關Netsuite設置方式的難點在於它需要兩個腳本,一個用戶事件腳本和一個客戶端腳本。 @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()");  
} 

將此作爲用戶事件腳本的套件文件使用。將腳本頁面中的加載前功能設置爲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()(我認爲?)附加到一個腳本,所以你可能想標題的用戶事件腳本和客戶端腳本的東西有關的你正在部署它的形式。使用form.setScript等同於在「自定義表單」菜單中時設置腳本值。

如果你能得到@ michoel的答案,那最終可能會更好,因爲你將邏輯全部保存在一個腳本中(從我的角度來看)可以更容易地管理你的腳本。

0

你碰到的問題是工作流程的Actio n腳本在服務器端執行,因此您無法執行客戶端操作,如打開新選項卡。我建議使用用戶事件腳本,它可以將客戶端代碼「注入」按鈕的onclick函數。

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

相關問題