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

时间:2019-04-03 00:02:13

标签: javascript netsuite suitescript suitescript2.0

我正在尝试读取包含电子邮件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');
  }
}

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

有人有什么主意吗?

2 个答案:

答案 0 :(得分:1)

尝试使用nlapiSearchRecord('entity'....代替客户。

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

在搜索中,添加类型为customer

的过滤器

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

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

答案 1 :(得分:0)

在我的控制台上测试了这一功能,它可以正常工作。尝试将email变量设置为静态值以进行测试以查看其是否有效。另外,检查存储电子邮件的字段的内部ID是什么,可能会有所不同。

var email = "anna_sanchez@bananarama.com"
nlapiLogExecution('DEBUG', 'email', email);
var filters = new Array();
filters[0] = new nlobjSearchFilter('email', null, 'is', email);
var searchresults = nlapiSearchRecord('customer', null, filters, null);