TypeError: Cannot call method "getField" of null User Event
TypeError: Cannot call method "getField" of null User Event
我在刚刚发布到生产环境的脚本中收到错误消息(在沙盒测试中未收到错误消息)
错误:类型错误:无法调用空用户事件的方法“getField”
-这很奇怪,因为据我所知,它不会导致我的解决方案出现问题(它完全按照预期的方式工作。)
- 用户不会收到此错误,只会向我自己(脚本所有者)发送电子邮件,显然还有执行日志
- 它发生在新旧事务上,即用户第一次加载页面时。
- 错误发生在脚本尝试获取的第一个字段上,无论它是哪个字段。
- 它只发生在某些交易中,我找不到相关性。
代码如下:
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/record', 'N/ui/serverWidget', 'N/url', 'N/runtime', 'N/search'],
function(record, serverWidget, url, runtime, search) {
function beforeLoad(context){
var form = context.form;
var sublist = form.getSublist({
id : 'item'
});
var recObj = context.newRecord
var recId = recObj.id;
var currUser = runtime.getCurrentUser();
var numLines = recObj.getLineCount({sublistId: 'item'});
var sessionScope = runtime.getCurrentSession().get({ ////remove after debug
name: 'scope'
});
log.debug('Tansaction: ' + recObj.getValue({fieldId: 'tranid'}))
log.debug('runtime.executionContext: ' + runtime.executionContext)///remove after debug
var isConnectedField = sublist.getField({id: 'custcol_isconnected'});//this is line 25
var connectedPoField = sublist.getField({id: 'custcol_connected_po'});
这是日志:
调试 | runtime.executionContext:用户界面
系统 | org.mozilla.javascript.EcmaError: TypeError: 无法调用 null 的方法“getField” (/SuiteScripts/rei_userEvent_so.js#25)
JS_EXCEPTION
如果能深入了解为什么会发生这种情况,我们将不胜感激。
我们需要更多地了解您针对哪些交易类型部署了此交易,但您提到了多种交易类型。简单的答案是并非所有交易都有 items
子列表。
例如vendorbill 和 deposit 都没有项目子列表
你可以这样短路:
var sublist = form.getSublist({
id : 'item'
});
if(!sublist) return; // not one of the transactions of interest
可能还有一些事件类型的子列表不可用。您的代码没有显示类型过滤。您可以在引用表单之前尝试类似的操作。当我不对类型进行过滤时,我遇到了一些奇怪的 UserEvent 问题:
if (context.type != ctx.UserEventType.VIEW && context.type != ctx.UserEventType.EDIT && context.type != ctx.UserEventType.CREATE) return;
我在刚刚发布到生产环境的脚本中收到错误消息(在沙盒测试中未收到错误消息)
错误:类型错误:无法调用空用户事件的方法“getField”
-这很奇怪,因为据我所知,它不会导致我的解决方案出现问题(它完全按照预期的方式工作。)
- 用户不会收到此错误,只会向我自己(脚本所有者)发送电子邮件,显然还有执行日志
- 它发生在新旧事务上,即用户第一次加载页面时。
- 错误发生在脚本尝试获取的第一个字段上,无论它是哪个字段。
- 它只发生在某些交易中,我找不到相关性。
代码如下:
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
*/
define(['N/record', 'N/ui/serverWidget', 'N/url', 'N/runtime', 'N/search'],
function(record, serverWidget, url, runtime, search) {
function beforeLoad(context){
var form = context.form;
var sublist = form.getSublist({
id : 'item'
});
var recObj = context.newRecord
var recId = recObj.id;
var currUser = runtime.getCurrentUser();
var numLines = recObj.getLineCount({sublistId: 'item'});
var sessionScope = runtime.getCurrentSession().get({ ////remove after debug
name: 'scope'
});
log.debug('Tansaction: ' + recObj.getValue({fieldId: 'tranid'}))
log.debug('runtime.executionContext: ' + runtime.executionContext)///remove after debug
var isConnectedField = sublist.getField({id: 'custcol_isconnected'});//this is line 25
var connectedPoField = sublist.getField({id: 'custcol_connected_po'});
这是日志:
调试 | runtime.executionContext:用户界面
系统 | org.mozilla.javascript.EcmaError: TypeError: 无法调用 null 的方法“getField” (/SuiteScripts/rei_userEvent_so.js#25) JS_EXCEPTION
如果能深入了解为什么会发生这种情况,我们将不胜感激。
我们需要更多地了解您针对哪些交易类型部署了此交易,但您提到了多种交易类型。简单的答案是并非所有交易都有 items
子列表。
例如vendorbill 和 deposit 都没有项目子列表
你可以这样短路:
var sublist = form.getSublist({
id : 'item'
});
if(!sublist) return; // not one of the transactions of interest
可能还有一些事件类型的子列表不可用。您的代码没有显示类型过滤。您可以在引用表单之前尝试类似的操作。当我不对类型进行过滤时,我遇到了一些奇怪的 UserEvent 问题:
if (context.type != ctx.UserEventType.VIEW && context.type != ctx.UserEventType.EDIT && context.type != ctx.UserEventType.CREATE) return;