【问题标题】:Getting entity type in Netsuite SuiteScript在 Netsuite SuiteScript 中获取实体类型
【发布时间】:2023-04-09 03:31:01
【问题描述】:

我是 NetSuite 的新手,我不知道这是否有意义。在 NetSuite 中创建 Invoice 时,我需要发送休息呼叫。

我看到使用 SuiteScript 使用 nlapiRequestURL 方法是可以实现的。

define(['N/record'],
function(record)
{
        function afterSubmit(context) 
        {
        var url = 'myURLHere';
        var payload = 'myBodyHere';      
        var response = nlapiRequestURL(url, payload);
        }

        return {                             
           afterSubmit: afterSubmit
        };
 }

这对我来说似乎是一个触发器。但是什么时候调用呢?如何指定这应该只在 Invoice 记录插入时运行?

提前致谢!

【问题讨论】:

    标签: netsuite suitescript suitescript2.0


    【解决方案1】:

    您的代码适用于 SuiteScript 2.0,而 nlapiRequestURL() 是 SuiteScript 1.0。 你可以试试下面的

    function afterSubmit(scriptContext) {
        var type = scriptContext.type;
        if(type == 'create'){ //Only when a new record is created in system
            var myUrl = 'http://www.google.com';
            var payload = 'myBodyHere';
            var response = http.get({ url: myUrl }); //Try exploring more methods here
        }
        log.debug({title: 'response ', details: response });
    }
    

    【讨论】:

    • 感谢您的回复!我会试试这个.. 但是,我们如何指定只有在创建“发票”而不是销售订单时才应该这样做?是通过配置吗?对不起,如果我没有意义!
    • 实际上我想出了如何将它部署到实体(适用于)。但现在我得到 'http' is not defined 错误。我用谷歌搜索并了解到我需要包含“N/http”和“N/record”。但错误仍然存​​在。有什么想法吗?
    • "我得到 'http' is not defined 错误" -> 您需要将 https 模块作为依赖项导入。 define(['N/record', 'N/https'], function(record, https)注意我指定的是https而不是http,https调用必须使用https模块。
    • @playalpha 那行得通!万分感谢!我导入了模块,但没有将其作为参数添加到函数中。
    • @NetSuiteGuru 之前我正在这样做 -> define(['N/record', 'N/https'], function(record).. 现在我将其更改为 define(['N/record', 'N/https'], function(record, https)
    【解决方案2】:

    我使用如下所示的脚本 (suitescript 1.0) 执行此操作:

    function notifySubmit() {
        // build request url, headers, and post data...
        ...
        // when I'm sending the submit notification to my API, I want to know
        // what record is being submitted and who is submitting, so some of the
        // data I'll add to by postData object is:
        var recordType = nlapiGetRecordType();
        var internalId = nlapiGetRecordId();
        var requestUser = nlapiGetUser();
        ...
    
        // send the request
        return nlapiRequestURL(url, JSON.stringify(postData), headers);
    }
    

    我上传了包含此功能的文件。然后我创建一个附加到该文件的新脚本记录(在自定义 > 脚本 > 脚本 > 新建),类型为“用户事件”。

    在该脚本记录中,Netsuite 具有用于指定要在加载前、提交前和提交后调用的函数的表单字段。由于我只有一个函数,并且我希望在提交记录后调用该函数,因此我将“提交后函数”字段的值设置为“notifySubmit”。

    脚本通过“脚本部署”附加到记录类型。保存脚本记录后,点击“部署脚本”。这会将您带到脚本部署的新页面,在“适用于”字段中,您将选择“发票”。您可能还需要设置部署的状态、日志记录级别和受众。

    脚本与脚本部署的关系是一对多的。因此,如果稍后您决定要在创建销售订单和采购订单时发送通知,您仍然只有一个脚本记录,但该单个脚本记录将有 3 个脚本部署(一个用于发票,一个用于销售订单,一个用于采购订单)。

    SuiteAnswer 29246 更详细地解释了整个脚本创建和部署过程。

    【讨论】:

    • 非常感谢部署部分!这就说得通了。但是,我更喜欢使用 2.0 来执行此操作。我目前收到“http”未定义错误。我用谷歌搜索并了解到我需要包含“N/http”和“N/record”。但错误仍然存​​在。有什么想法吗?
    【解决方案3】:

    您希望如何执行此操作取决于您的脚本何时运行。由于您有一个名为“afterSubmit”的方法,这看起来像一个用户事件脚本 - 如果是这样,请将此脚本设置为在创建发票时运行。您可以通过创建一个新脚本来做到这一点:自定义 -> 脚本 -> 脚本 -> 新脚本。

    选择您创建的脚本文件并创建脚本记录。选择“用户事件”作为脚本类型。部署此脚本时,将部署应用到发票记录和“创建”事件。

    我的脚本应用于采购订单,只需将其应用于发票。请参阅下面的屏幕截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多