Как установить дату для RESTlet в netsuite с помощью Suitescript 2.0 - PullRequest
0 голосов
/ 07 января 2019

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

Invalid date value (must be M/D/YYYY)

Отлично работает в Suitescript 1.0. Phonecall имеет много стандартных полей даты и может также иметь пользовательские поля даты.

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

Есть ли другой способ, как это сделать?

1010 * JSON *

{
    "title":"test",
    "startdate":"01/08/2019",
    "resourceType":"phonecall"
}

Отлично работает в suitescript 1.0

function post(datain) {
          var record = nlapiCreateRecord(datain.resourceType);
          for (var fieldname in datain) {
              if (datain.hasOwnProperty(fieldname)) {
                  if (fieldname != 'resourceType' && fieldname != 'id') {
                      var value = datain[fieldname];
                      record.setFieldValue(fieldname, value);
                  }
              }
          }
          var recordId = nlapiSubmitRecord(record);
          nlapiLogExecution('DEBUG', 'id=' + recordId);
          var nlobj = nlapiLoadRecord(datain.resourceType, recordId);
          return nlobj;
}

Не работает в Suitescript 2.0

/**
 *@NApiVersion 2.x
 *@NScriptType Restlet
 */

define(['N/record'],function(record) {
        function post(context) {
            var resourceType = context.resourceType
            delete context.resourceType
            var objectRecord = record.create({
                type: resourceType
            });

            for (var fldName in context) {
                if (context.hasOwnProperty(fldName)) {
                    objectRecord.setValue(fldName, context[fldName]);
                }
            }
            var createdId = objectRecord.save({});
            return getById(resourceType, createdId);
        }

        function getById(resourceType, recordId) {
            if (recordId != undefined) {
                var response = record.load({
                    type: resourceType,
                    id: recordId
                });

                return response;
            }
        }
        return {
          post: post
        };
    });

1 Ответ

0 голосов
/ 08 января 2019

setValue() для поля даты в SS2.0 требуется объект даты в JavaScript для значения, а не строка. Так что вы можете сделать это:

for (var fldName in context) {
  if (context.hasOwnProperty(fldName)) {
    if (fldName === 'startdate') {
      objectRecord.setValue(fldname, new Date(context[fldName]));
    }
    objectRecord.setValue(fldName, context[fldName]);
  }
}

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

if (fldName.indexOf('date') >= 0) {
  objectRecord.setValue(fldname, new Date(context[fldName]));
}

РЕДАКТИРОВАТЬ: Вы можете сделать некоторые определения типа поля перед установкой значения:

var field = objectRecord.getField{ fieldId: fldName });
if (field.type === 'date') {
  objectRecord.setValue(fldName, new Date(context[fldName]));
}
...