尝试将 SuiteScript 搜索结果存储为查找参数

Trying to store SuiteScript search result as a lookup parameter

我有以下代码,它 return 通过从支持案例记录中查找销售订单的内部 ID。

所以事件的顺序是:

*@NApiVersion 2.x *@NScriptType WorkflowActionScript * @param {Object} context

define(["N/search", "N/record"], function (search, record) {
  function onAction(context) {
    var recordObj = context.newRecord;
    var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" });
    var s = search
      .create({
        type: "salesorder",
        filters: [
          search.createFilter({
            name: "tranid",
            operator: search.Operator.IS,
            values: [oc_number],
          }),
        ],
        columns: ["internalid"],
      })
      .run()
      .getRange({
        start: 0,
        end: 1,
      });
    log.debug("result set", s);
    return s[0];
  }

  return {
    onAction: onAction,
  };
});

我正在尝试 return 生成的内部 ID 作为参数,以便我可以为案例记录中的记录创建 link。 我被卡住了,想弄清楚我将如何做到这一点? 有没有办法将查找的内部 ID 的值存储在案例记录中? (i.e.the 一个当前在调试日志中)?

我对 JS 和 Suitescript 还很陌生,所以我不确定在这个过程中的什么时候,这个值需要存储在支持案例记录中。 在这一刻。工作流操作脚本(与上述脚本相关的工作流的一部分)设置为在提交后触发 谢谢

编辑:多亏了 Bknights,我有了一个可行的解决方案。 工作流程:

新改版脚本如下:

     *@NApiVersion 2.x
     *@NScriptType WorkflowActionScript
     * @param {Object} context
     */
    define(["N/search", "N/record"], function (search, record) {
      function onAction(context) {
        var recordObj = context.newRecord;
        var oc_number = recordObj.getValue({ fieldId: "custevent_case_creation" });
        var s = search
          .create({
            type: "salesorder",
            filters: [
              search.createFilter({
                name: "tranid",
                operator: search.Operator.IS,
                values: [oc_number],
              }),
            ],
            columns: ["internalid"],
          })
          .run()
          .getRange({
            start: 0,
            end: 1,
          });
        log.debug("result set", s[0].id);
    
        return s[0].id;
      }
    
      return {
        onAction: onAction,
      };
    });

在工作流操作脚本的脚本记录中,设置您期望的 return 类型。在这种情况下,它将是销售订单记录:

这将允许您使用 list/record 字段来存储来自脚本创建的 'search message' 工作流操作的值

结果

编辑 2:这个的变体

    /**
     *@NApiVersion 2.x
     *@NScriptType WorkflowActionScript
     * @param {Object} context
     */
    
    define(["N/search", "N/record"], function (search, record) {
      function onAction(context) {
        try {
          var recordObj = context.newRecord;
          var oc_number = recordObj.getValue({
            fieldId: "custevent_case_creation",
          });
          var s = search
            .create({
              type: "salesorder",
              filters: [
                search.createFilter({
                  name: "tranid",
                  operator: search.Operator.IS,
                  values: [oc_number],
                }),
              ],
              columns: ["internalid","department"],
          
            })
            .run()
            .getRange({
              start: 0,
              end: 1,
            });
          log.debug("result set", s[0]);
          recordObj.setValue({fieldId:'custevent_case_sales_order', value:s[0].id});
    
      //    return s[0]
        } catch (error) {
          log.debug(
            error.name,
            "recordObjId: " +
              recordObj.id +
              ", oc_number:" +
              oc_number +
              ", message: " +
              error.message
          );
        }
      }
    
      return {
        onAction: onAction,
      };
    });

根据您想对订单执行的操作 link,您可以做几件事。

如果您想从支持案例记录中引用销售订单记录,您需要添加自定义 List/Record 字段以支持引用交易的案例。 (例如 custevent_case_order

然后将此脚本移动到 beforeSubmit UserEvent 脚本,而不是 return 将其扩展为:

recordObj.setValue({fieldId:'custevent_case_order', value:s[0].id});

对于性能,您可能需要测试您是否处于 create/update 事件中以及自定义订单字段是否尚未填写。

如果这是更大工作流程的一部分,您可能仍想在用户事件脚本中查找销售订单,然后在填充该字段后启动您的工作流程。

如果您想保持工作流完整,您当前的代码可以 return s[0].id 到工作流或工作流操作自定义字段,然后将其应用到带有设置字段值操作的案例。