SuiteScript 2.0 调用 Map Reduce 的 UserEvent 脚本

SuiteScript 2.0 UserEvent Script to Call Map Reduce

下午好。

我正在尝试让用户事件脚本调用或使用 Map Reduce 脚本。我对 Map Reduce 脚本的概念真的很陌生,并且找不到资源。本质上,我想要做的是调用一个 Map Reduce 脚本,该脚本查找具有相同项目名称的未结交易并将该项目上的 Class 设置为用户设置的新项目。 Map Reduce 脚本需要项目名称和当前记录中的 Class。

这是我的用户事件:

/**
* @NApiVersion 2.0
* @NScriptType UserEventScript
*/

define(['N/record', 'N/log'],
    function (record, log) {
        function setFieldInRecord (scriptContext) {
            log.debug({
                'title': 'TESTING',
                'details': 'WE ARE IN THE FUNCTION!'
            });
            if (scriptContext.type === scriptContext.UserEventType.EDIT) {
                var old_Record = scriptContext.oldRecord;
                var cur_Record = scriptContext.newRecord;
                var oldClassId = old_Record.getValue({ fieldId: 'class'});
                var curClassId = cur_Record.getValue({ fieldId: 'class'});
                if ( oldClassId != curClassId ) {
                    // CALL MAP REDUCE HERE
                }
            }
        }
        return {
            beforeSubmit: setFieldInRecord
        };
    }
);

Map Reduce 脚本是单独的文件还是嵌入在用户事件脚本中?如果我知道如何从用户事件中调用它,我想我可以让 Map Reduce 工作。感谢您对这个问题的任何意见。谢谢!

以下是我们处理这种情况的方法。

我们确保将 'N/task' 添加到上述用户事件代码中的 define 语句中。然后,在满足条件时调用 Map / Reduce 脚本的用户事件中,我们这样做:

var scriptTask = task.create({
     taskType: task.TaskType.MAP_REDUCE
});
scriptTask.scriptId = 'customscript_id';
scriptTask.deploymentId = 'customdeploy_id';
var scriptTaskId = scriptTask.submit();

这成功地从用户事件中调用了 Map Reduce 脚本。

我希望这对以后的人有所帮助。

谢谢。