NetSuite / Suitescript / Workflow:如何在单击按钮后从字段中打开URL?

时间:2017-06-23 21:55:24

标签: url hyperlink netsuite suitescript

我有一个工作流程,可以添加一个按钮" Open Link"和记录中的一个字段叫做" URL"包含NetSuite中附件的超链接。我想添加一个工作流操作脚本,在另一个页面中打开此URL。我已将脚本和工作流操作添加到工作流程中。我的剧本:

function openURL() {  

var url = nlapiGetFieldValue('custbody_url');

window.open(url);    

} 

单击按钮后出现此脚本错误:" TypeError:找不到对象[object object]中打开的函数。

如何更改我的脚本以便在字段中打开URL?

(当我在控制台中尝试时,此功能有效)

谢谢!

2 个答案:

答案 0 :(得分:2)

在查看或编辑记录时,您希望它能够正常工作吗?它们的脚本略有不同。我会假设您希望按钮在查看记录时起作用,但是我会写它以便即使在编辑文档时也能正常工作。

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()");    
}

将此用作User Event脚本的Cardscript文件。将脚本页面中的Before Load功能设置为 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的答案有效,那么最终可能会变得更好,因为你将逻辑保存在一个脚本中(从我的角度来看)可以更容易地管理你的套件

答案 1 :(得分:0)

您遇到的问题是Workflow Action Scripts在服务器端执行,因此您无法执行客户端操作,例如打开新选项卡。我建议使用一个用户事件脚本,它可以将客户端代码“注入”按钮onclick功能。

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