Почему мой скрипт NetSuite не работает с ошибкой RCRD_DSNT_EXIST - PullRequest
0 голосов
/ 28 января 2020

Я новичок ie с NetSuite, поэтому, пожалуйста, будьте осторожны.

У меня есть простой скрипт, цель которого - удалить все кавычки, возвращенные из определенного поиска.

Вот оно:

function executeSavedSearch()
{
    var searchresults = nlapiSearchRecord('estimate', 1234, null, null);
    for (var i = 0; searchresults != null && i < searchresults.length; i++) 
    {
        var searchresult = searchresults[i];
        nlapiDeleteRecord(searchresults[i].getRecordType(), searchresults[i].getId());
    }
}

Вот и все. Но каждый раз, когда я запускаю его, происходит сбой, и в журнале выполнения отображается RCRD_DSNT_EXIST с подробными сведениями «Эта запись не существует».

Я подтвердил, что идентификатор поиска (1234 в приведенном выше) правильный любой количество раз. Поиск возвращает несколько записей, так что это не значит, что у скрипта нет результата для работы.

Любая помощь с благодарностью получена.

Ответы [ 4 ]

0 голосов
/ 29 января 2020

В следующий раз попробуйте запустить скрипт в отладчике скриптов. Вы можете легко отследить причину этой ошибки в Script Debugger.

0 голосов
/ 28 января 2020

Попробуйте.

var estimateSearch = nlapiSearchRecord("estimate", null,
        [
            // add or remove filters as per your need.
            ["formulanumeric: {internalid}", "between", "200", "300"],
            "AND",
            ["mainline", "is", "T"] // In order to avoid duplicate records in result, do not remove this filter 
        ],
        [
            new nlobjSearchColumn("internalid") // Result column
        ]
    );
    var quoteId;
    for (var i = 0; estimateSearch != null && i < estimateSearch.length; i++) {
        quoteId = estimateSearch[i].getValue('internalid');
        nlapiLogExecution("Debug", "Quote ID: " + quoteId, " Index: " + i);
        // nlapiDeleteRecord('Estimate', quoteId); // Verify the Execution Logs before you uncomment this line of code.
    }

Надеюсь, это поможет.

0 голосов
/ 28 января 2020

Спасибо, Сидд. Как вы и предлагали, с помощью регистрации ошибок, я сократил ее до фактического вызова nlapiDeleteRecord. Вот мой l oop:

for (var i = 0; searchresults != null && i < searchresults.length; i++) { try { nlapiLogExecution("Debug", "About to delete record id " + searchresults[i].getId());<br> nlapiDeleteRecord(searchresults[i].getRecordType(), searchresults[i].getId()); } catch (err) { var errMessage = err; if(err instanceof nlobjError) { errMessage = errMessage + ' ' + err.getDetails() + ' ' + 'Failed to Delete ID : ' + id; } nlapiLogExecution('ERROR', 'Error', errMessage); return err } }

Идентификатор, который он регистрирует, и идентификатор, который он показывает в сообщении об ошибке, совпадают - поэтому он регистрирует «О том, чтобы удалить идентификатор записи 1234» и затем выдает сообщение об ошибке:

Код: RCRD_DSNT_EXIST Подробности: эта запись не существует. Эта запись не существует. Не удалось удалить идентификатор: 1234

Но когда я запускаю свой сохраненный поиск, я обнаруживаю, что на самом деле имеет удаленную запись 1234. При следующем запуске он выдаст те же сообщения - но с идентификатором 1235. И тогда он будет удален 1235. Как будто по какой-то причине он пытается удалить его дважды, первый раз успешно, а затем второй раз не удаётся, так как он уже удален.

И я неоднократно проверял поиск - в одной цитате НЕ было нескольких строк. Если я выполню вышеприведенное с закомментированной строкой удаления, я получу то, что ожидал - запись в журнале для каждого идентификатора в моем поиске.

Есть предложения?

0 голосов
/ 28 января 2020

Не могли бы вы поделиться фильтрами и столбцами сохраненного поиска? Может быть вероятность того, что Основная линия / Налоговая линия / Судоходная линия не установлена. Это приводит к отображению нескольких строк в сохраненном поиске транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...