Почему мой сценарий NetSuite завершается с ошибкой RCRD_DSNT_EXIST

Я новичок в 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 выше) любое количество раз. Поиск возвращает ряд записей, так что это не означает, что скрипт не может работать.

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


person Bud    schedule 27.01.2020    source источник


Ответы (4)


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

person NetSuite Help    schedule 28.01.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.
    }

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

person Sidd    schedule 28.01.2020
comment
Спасибо Сидд. Пожалуйста, смотрите мой более длинный ответ ниже (это то, как вы должны отвечать кому-то здесь?). - person Bud; 28.01.2020

Спасибо, Сидд. С некоторым ведением журнала ошибок, как вы предложили, я сузил его до фактического вызова nlapiDeleteRecord. Вот мой цикл:

for (var i = 0; searchresults != null && i < searchresults.length; i++) { try { nlapiLogExecution("Debug", "About to delete record id " + searchresults[i].getId());
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. Как будто по какой-то причине он пытается удалить его дважды, в первый раз успешно, а во второй раз терпит неудачу, поскольку он уже был удален.

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

Какие-либо предложения?

person Bud    schedule 28.01.2020
comment
Пожалуйста, поделитесь фильтрами и столбцами вашего сохраненного поиска. Похоже, проблема с сохраненным поиском. - person Sidd; 29.01.2020

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

person vVinceth    schedule 29.01.2020