脚本返回'TypeError:无法从NULL读取属性长度',即使它不是

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

我正在尝试使用电子邮件ID读取CSV文件,该文件将用作搜索过滤器以获取客户记录并删除其记录中的电子邮件ID。

这是我的代码

var context = nlapiGetContext();
var filedata = nlapiLoadFile(context.getSetting('SCRIPT', 'custscript42')).getValue().split(/\n|\n\r/);
for (var i = 0; i < filedata.length; i++) {
  var email = filedata[i];
  nlapiLogExecution('DEBUG', 'email', email);
  var filters = new Array();
  filters[0] = new nlobjSearchFilter('email', null, 'is', email);
  var searchresults = nlapiSearchRecord('customer', null, filters, null);
  nlapiLogExecution('DEBUG', '# of profiles with this email are:', searchresults.length);
  for (var j = 0; searchresults != null && j < searchresults.length; j++) {
    var id = searchresults[j].getId();
    nlapiLogExecution('DEBUG', 'cleaning email for: ', id);
    var record = nlapiLoadRecord('customer', id);
    record.setFieldValue('email', '');
    nlapiSubmitRecord(record);
    nlapiLogExecution('DEBUG', 'Result', 'Success');
  }
}

我不明白为什么搜索结果被设置为NUll,我尝试通过UI进行搜索以查看它是否适用于该特定电子邮件地址及其工作但不在脚本中。

有人有任何想法吗?

javascript netsuite suitescript suitescript2.0
2个回答
1
投票

尝试使用nlapiSearchRecord('entity'....而不是客户。

客户是记录类型,但搜索类型是entity

在搜索中,添加类型的过滤器是customer

https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2018_1/script/record/entity.html

此外,从治理方面来说,您可能最好使用nlapiSubmitField而不是加载/保存客户记录。


0
投票

在我的控制台上测试了这个并且它有效。尝试将电子邮件变量设置为静态值以进行测试,以确定它是否有效。另外,检查存储电子邮件的字段的内部ID是什么,可能是不同的。

var email = "[email protected]"
nlapiLogExecution('DEBUG', 'email', email);
var filters = new Array();
filters[0] = new nlobjSearchFilter('email', null, 'is', email);
var searchresults = nlapiSearchRecord('customer', null, filters, null);
© www.soinside.com 2019 - 2024. All rights reserved.