Как я могу передать Дата для передачи при создании Счета с помощью SuiteScript 2.0 - PullRequest
0 голосов
/ 01 марта 2019

Я создал RESTlet , что упрощает создание нового счета-фактуры через простую веб-страницу с несколькими входами и раскрывающимися списками.Я отправляю дату в виде DM-YYYY строки, используя json с именем invoiceInfo, строка даты является значением trandate.
В сценарии (Suitescript 2.0) , к которому я подключаюсь,Я разделяю трендат, затем создаю объект Date (я использую новый номер не из-за моей глупости, он работает только так) .Затем я форматирую дату в желаемый формат Netsuite, используя format.format.После этого я устанавливаю значение trandate, используя отформатированную дату.

var splitedDate = invoiceInfo.trandate.split("-");
var dateObj = new Date(new Number(splitedDate[0]).valueOf(), (new Number(splitedDate[1]).valueOf()) - 1, new Number(splitedDate[2]).valueOf(), 0, 0, 0, 0);

var ffDate = format.format({
    value: dateObj,
    type: format.Type.DATE
});

invoiceRecord.setValue({
    fieldId: "trandate",
    value: ffDate,
    ignoreFieldChange: true
});

При отправке счета (динамический режим установлен как true) Я получаю сообщение об ошибке в строке номер 83, что является этой строкой

invoiceRecord.setValue ({fieldId: "trandate", значение: ffDate, ignoreFieldChange: true});

И получилошибка как это:

{
    "type": "error.SuiteScriptError",
    "name": "INVALID_FLD_VALUE",
    "message": "Invalid date value (must be D/M/YYYY)",
    "stack": ["anonymous(N/serverRecordService)", "<anonymous>(/SuiteScripts/Filip/_wystawianie_faktury_api.js:83)
    [...]

Когда я проверяю это с log.debug, я получаю это:

"invoiceInfo.trandate" is (например) "2019-03-15"

" dateObj "это" 2019-03-15T07: 00: 00.000Z "

" ffDate "это" 15/3/2019 "

Iперепробовал много вариантов, например: - пропуская жестко закодированную строку даты "15/3/2019" я получаю ту же ошибку;-Я попробовал setText вместо setValue и получил другую ошибку;-Я попытался изменить формат даты в @HomeIcon -> Установить настройки, а затем дал желаемый формат в жестком коде, и он все еще не работает;

Спасибо за помощь

PS Я вроде новыйпри написании вопросов в стеке.Я старался изо всех сил!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Простой ответ:

var splitedDate = invoiceInfo.trandate.split("-");
var dateObj = new Date(new Number(splitedDate[0]).valueOf(), (new Number(splitedDate[1]).valueOf()) - 1, new Number(splitedDate[2]).valueOf(), 0, 0, 0, 0);

invoiceRecord.setValue({
    fieldId: "trandate",
    value: dateObj,
    ignoreFieldChange: true
});

Объяснение: setValue для поля Date принимает JavaScript DateObj, поэтому нет необходимости форматировать.

0 голосов
/ 01 марта 2019

Неверное значение даты (должно быть Д / М / ГГГГ)

Это означает, что ffDate не является объектом даты.

Несколько замечаний, которые следует отметить первым

  1. record.setValue требует, чтобы значение было объектом dateTime.
  2. Если вы передаете недопустимое значение dateTime в format.format , возвращаетсяoption.value, который не является объектом dateTime.
  3. Если у вас есть объект даты, вам не нужно форматировать его перед использованием record.setValue.
  4. setText требует, чтобы строка былаправильно отформатирован в пользовательском формате, поэтому лучше использовать setValue, вместо этого, потому что он обрабатывает все преобразования и т. д.

Итак, я предлагаю, чтобы вы передавали дату в строке ISO в RESTlet, что могло быможно легко преобразовать в объект даты в NetSuite (используя новую функцию Date ()), а затем передать этот объект непосредственно в record.setValue.

...