Сообщение об ошибке «не удается найти функцию getFullYear (…)» при вводе даты и попытке сохранить запись

#netsuite #suitescript

#netsuite #suitescript

Вопрос:

Мы пытаемся в RESTLet получить доступ к подсписку «demandplandetail» из плана спроса на товары NetSuite. Все идет нормально до определенного момента. Мы можем загрузить его и обработать план спроса на 2020 год. Однако здесь это расстраивает.

Мы знаем (можем видеть из NetSuite), что есть данные также за 2021 год. Однако получить к нему доступ из SuiteScript кажется очень сложным.

1-е решение) В плане спроса на товар есть поле «год». Хорошо, просто установите значение 2021, сохраните и перезагрузите запись. Результат: сохранение проигнорировано, год по-прежнему 2020.

2-е решение) Установите год, используя объект Date, как в:

 var demandPlan = record.load(...)
var d = new Date();
    demandPlan.setValue({
    fieldId: 'year',
    value: d
});
  

Выдает следующее:
:"TypeError: Cannot find function getFullYear in object NaN. (NLRecordScripting.scriptInit$lib#59)","stack":["setDatesForMonthAndYear(NLRecordScripting.scriptInit:108)","anonymous(N/serverRecordService)"

при сохранении записи. Я также получаю то же самое, используя (различные) строки, соответствующие приемлемым форматам даты (как в ‘1/1/2021’). Я также попробовал пакет format, выдающий мне строку даты -> тот же результат.

Также где-то читал, что вам может потребоваться установить начальную дату (поле ‘startdate’) в записи. Пробовал несколько вариантов, но он упорно отказывается :(.

Интересно, видел ли кто-нибудь что-нибудь подобное?

С наилучшими пожеланиями, Тони

Ответ №1:

Привет, пожалуйста, попробуйте приведенный ниже код, также проверьте, передаете ли вы объект date в поле, а не в строку date.

     function formatDate() {
        
        var dateROBD = format.parse({
            value: new Date(),
            type: format.Type.DATE
        });
        
        // this line optional if you want to try with or else ignore this
        dateROBD = convertUTCDateToLocalDate(new Date(dateROBD));

        return dateROBD;
    }

    function convertUTCDateToLocalDate(date) {
        var newDate = new Date(date.getTime()   date.getTimezoneOffset() * 60 * 1000);

        var offset = date.getTimezoneOffset() / 60;
        var hours = date.getHours();

        newDate.setHours(hours - offset);

        return newDate;
    }
  

Комментарии:

1. Привет, Абдул, спасибо за твой ответ. Пробовал оба варианта, но получил ту же ошибку. С наилучшими пожеланиями, Тони

2. @ToniJussila это работает, только если вы передаете объект date. В любом случае, всего наилучшего.

Ответ №2:

Хорошо, загадка решена. Оказалось, что это не поддерживается в SuiteScript 2.0, но вам нужно использовать 1.0.