oracle 帮助中心的NetSuite示例出现错误,无法运行

bqucvtff  于 2022-12-18  发布在  Oracle
关注(0)|答案(2)|浏览(138)

我正在尝试了解NetSuite环境中有关suitlet的基本知识。我从帮助中心复制/粘贴了此代码,但在单击URL“发生意外错误。请单击此处通知支持人员并提供您的联系信息”时收到此错误。

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 */
define([], function() {
    function onRequest(context) {
        var html = '<html><body><h1>Hello World</h1></body></html>';
        context.response.write(html);
        context.response.setHeader({
            name: 'Custom-Header-Demo',
            value: 'Demo'
        });
    }
        
    return {
        onRequest: onRequest
    };
});

我试过在脚本中添加log.debugs,但是在执行日志中没有任何结果。我已经上传了脚本,部署并发布了suitelet,但是仍然出现这个错误。Error Screenshot

nbewdwxp

nbewdwxp1#

小套房成功秘诀

1.就像编写Node Express / Nextjs API一样

  • 设置代码以处理每种请求方法类型
/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(["N/cache"], /**
 * @param {cache} cache
 */
(cache) => {
  /**
   * Defines the Suitelet script trigger point.
   * @param {Object} scriptContext
   * @param {ServerRequest} scriptContext.request - Incoming request
   * @param {ServerResponse} scriptContext.response - Suitelet response
   * @since 2015.2
   */

  const onRequest = (scriptContext) => {
    let sc = scriptContext;
    let req = sc.request;
    let res = sc.response;
    let { method, parameters, body, clientIpAddress, headers } = req;
    let { write, setHeader } = res;

    switch (method) {
      case "GET":
        // Run logic for each specific request type (Save creating files for each operation)

        // Set header first then return
        setHeader({
          name: "Content-Type",
          value: "application/json",
        });

        // return your server response
        write({
          output: "Hello World",
        });

        break;

      case "POST":
        // Add logic here for POST
        break;

      default:
        log.error({ title: `❌ method: ${method} not supported` });
    }
  };

  return { onRequest };
});

2.利用WebStorm和SuiteCloud IDE插件

  • 这将帮助您更快地模板化文件,自动导入模块及其JSDocs沿着并提供更好的智能感知。同时立即上传文件,而不必每次都通过NetSuite的UI进行。

3.在支持的情况下使用2.1

  • 使用2.x类似于ES 2012,ES 2012并不适合使用letconst和所有我们本机可用的新ES6函数,沿着上面示例中使用的字符串模板或文字。

4.如果可能,使用N/cache

  • 如果你正在获取像记录或ID这样的数据,使用N/cache会使suitelet的执行快得多

与您的错误相关

试试我在代码片段中建议的。你想在返回响应之前先设置你的头。因为你试图在已经发送响应的地方设置一个头。而且NetSuite有一半的时间不理解你发送/返回的数据类型。所以设置Content-Type头将允许你的响应按预期显示。

// If you're trying to send JSON you stringify it first before you send the data
        write({
          output: JSON.stringify({
            text: 'Hello World'
           })
        });

如果要将HTML作为响应发送,请执行以下操作

// Set header first for content return define
     setHeader({
       name: "Content-Type",
       value: "text/html",
     });

     write({
       output: '<html><body><h1>Hello World</h1></body></html>'
     });

希望这能有所帮助!🚀
4xy9mtcn

4xy9mtcn2#

我在我的Netsuite帐户上运行脚本,没有收到错误。
您使用哪个角色用户创建脚本并查看结果?请尝试使用管理员角色,确保不会引发该错误。

相关问题