首页 > 解决方案 > NetSuite SuiteScript,防止脚本在 API 调用完成时触发

问题描述

我似乎无法搜索我的问题/问题。请指教。

当我对 NetSuite 进行 API 调用(插入新记录或更新现有记录)时,SuiteScript 被触发并回发到我的系统(预计会发布,API 调用上的触发器不是)。

我找到了一种如何限制脚本仅与 UI 操作交互的方法:

    if (scriptContext.type !== scriptContext.UserEventType.CREATE &&
        scriptContext.type !== scriptContext.UserEventType.EDIT) {
          return;
    }

但是,当 API 调用完成时,它仍然会触发。任何想法或任何人都可以为我指明正确的方向吗?

这是整个脚本供参考:

 *@NScriptType UserEventScript
 */

define(["N/record", "./cm/graphRequest", "./cm/hubRequest"],
    function(record, graphRequest, hubRequest) {
        function onSubmitProcessing(scriptContext) {
            if (scriptContext.type !== scriptContext.UserEventType.CREATE &&
                scriptContext.type !== scriptContext.UserEventType.EDIT) {
                return;
            }

            var token = graphRequest.getToken();
            var currentRecord = scriptContext.newRecord;
            var vendorRecord = record.load({
                type: record.Type.INVENTORY_ITEM,
                id: currentRecord.id,
                isDynamic: true
            });

            var payload = JSON.stringify(vendorRecord);

            var sendObject = {
                hubAccessToken: token.access_token,
                body: payload,
                method: "/api/Part/UpdateFromNetSuite",
                url: "https://requestinspector.com/inspect/<<some value for testing>>"
            };
            var response = hubRequest.post(sendObject);
            if (response.hubId !== undefined && response.hubId !== null) {
                record.submitFields({
                    type: record.Type.INVENTORY_ITEM,
                    id: currentRecord.id,
                    values: {
                        custitem_inventoryitem_hub_id: response.hubId
                    },
                    options: {
                        enableSourcing: false,
                        ignoreMandatoryFields: true
                    }
                });
            }
        }

        return {
            afterSubmit: onSubmitProcessing
        };
    });

提前致谢。

PS(编辑):如下面的答案所述,这是我成功错过的:

自定义/脚本/脚本部署/[所需脚本]/编辑/上下文过滤/

在那里,在“执行上下文”中选择所需的项目。在我的情况下,它只是需要选择的“用户界面”。保存并解决问题。感谢 Jala 为我指明了正确的方向。

标签: netsuitesuitescript2.0

解决方案


在脚本部署记录上,有一个上下文过滤选项卡,可让您设置脚本将在什么上下文中执行。

N/runtime 也有 runtime.executionContext 和 runtime.ContextType。


推荐阅读