NetSuite SuiteScript 2.1 编辑时,将工作订单项目子列表行 1 项目来源更改为“库存”

问题描述 投票:0回答:1

我一般对 SuiteScript 或 javascript 不太熟悉(通常我只使用工作流程,但不能用于此特定字段“项目源”),但我目前正在尝试设置第 1 行(行号)项目如果选中自定义行字段“打包项目”(custcol_is_packout),则在工作流程编辑时,项目来源 (itemsource) 字段将更改为工作订单上的“库存”。我已经尝试自己编写代码,但老实说,我不确定从哪里开始,我只是尝试使用在线多个来源将其拼凑在一起。

这是我的代码(设置为用户事件脚本,不确定这是否正确):

/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 */
define(['N/currentRecord', 'N/log', 'N/record'],
/**
 * @param{currentRecord} currentRecord
 * @param{log} log
 * @param{record} record
 */
    (currentRecord, log, record) => {
        /**
         * Defines the function definition that is executed before record is submitted.
         * @param {Object} scriptContext
         * @param {Record} scriptContext.newRecord - New record
         * @param {Record} scriptContext.currentRecord - Current record
         * @param {Record} scriptContext.oldRecord - Old record
         * @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
         * @since 2015.2
         */
        const beforeSubmit = (scriptContext) => {
            const curRec = scriptContext.currentRecord;
            if (scriptContext.sublistId == 'item') {
                const lineList = curRec.getCurrentSublistValue({
                    lineNum : 'linenumber',
                    packOut : 'custcol_is_packout'
                });
            
                if (lineNum == 0 && packOut == true) {
                    curRec.setCurrentSublistValue({
                        itemsource : 'Stock'
                    });
                }
            }
        }
        return {beforeSubmit}
    });

我正在 NetSuite 中的脚本部署上处理事件类型(编辑)和上下文(工作流程),因此我没有在代码中添加任何内容来过滤这些内容。

javascript netsuite suitescript
1个回答
0
投票

您的脚本存在一些问题。

const curRec = scriptContext.currentRecord;

currentRecord没有传入
beforeSubmit()
上下文对象
。有
newRecord
oldRecord
type
。也许你想要的是
const curRec = scriptContext.newRecord;

if (scriptContext.sublistId == 'item') {

再次强调,在

sublistId
上下文中没有
beforeSubmit
属性。这似乎来自 client 脚本。在这里使用时,它要么给出错误,要么总是评估为 false,这意味着
if
块中的代码永远不会运行。

const lineList = curRec.getCurrentSublistValue({

使用子列表 API 的“当前”版本时,您必须首先使用

Record.selectLine()
(或在您的情况下使用
curRec.selectLine()
)选择行,进行更改,然后使用
Record.commitLine()
提交该行。然而,即使这样也可能在这里不起作用,因为我知道在用户事件上下文中传递的记录处于“标准”或“延迟动态”模式,而“当前”API 用于处理“动态”模式记录。因此,您应该使用标准 API,例如 getSublistValue() 而不是 getCurrentSublistValue() curRec.setCurrentSublistValue({
与上面相同的问题。

我正在 NetSuite 中的脚本部署上处理事件类型(编辑)和上下文(工作流程),因此我没有在代码中添加任何内容来过滤这些内容。

这意味着只有当

工作流

编辑

部署脚本的类型的记录时,脚本才会运行。因此,当用户在 UI 中编辑它时,它可能无法运行 - 这真的是您想要的吗?

© www.soinside.com 2019 - 2024. All rights reserved.