Скрипт, возвращающий ‘TypeError: не удается прочитать длину свойства из NULL’, даже если это не

#javascript #netsuite #suitescript #suitescript2.0

#javascript #netsuite #suitescript #suitescript2.0

Вопрос:

Я пытаюсь прочитать в файле CSV с идентификаторами электронной почты, которые будут использоваться в качестве фильтра поиска для получения записей клиентов и удаления их идентификатора электронной почты в своих записях.

Вот мой код

 var context = nlapiGetContext();
var filedata = nlapiLoadFile(context.getSetting('SCRIPT', 'custscript42')).getValue().split(/n|nr/);
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 amp;amp; 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');
  }
}
  

Я не понимаю, почему searchresults присваивается значение NUll, я попытался выполнить поиск через пользовательский интерфейс, чтобы проверить, работает ли он для этого конкретного адреса электронной почты и работает ли он, но не в скрипте.

У кого-нибудь есть какие-либо идеи?

Ответ №1:

попробуйте использовать nlapiSearchRecord('entity'.... вместо customer.

Клиент — это тип записи, однако тип поиска entity

при поиске добавьте фильтр для типа customer

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

Кроме того, с точки зрения управления вам может быть лучше использовать nlapiSubmitField вместо загрузки / сохранения записи клиента.

Ответ №2:

Протестировал это на моей консоли, и это сработало. Попробуйте установить для переменной email статическое значение для тестирования, чтобы увидеть, будет ли это работать. Кроме того, проверьте, каков внутренний идентификатор поля, в котором хранится электронное письмо, возможно, оно может отличаться.

 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);