2016-03-11 10 views
2

Когда я отправляю вызов для отдыха в Netsuite и создаю новый заказ на продажу через RESTlet, я обнаружил, что мой код может работать отлично, если поле «item» заказа клиента содержит только инвентаризацию. Однако, когда в заказе клиента содержится элемент assemblyitem или kit/package, функция nlapiSubmitRecord() вернет значение null и заказ клиента не будет создан. (Ошибка не выбрасывается) Может ли кто-нибудь рассказать мне причину? Благодаря!Netsuite RESTlet - nlapiSubmitRecord() возвращает null при создании заказа клиента, содержащего элементы сборки

Моя Restlet функция для создания нового заказа клиента выглядит следующим образом:

function createSalesorder(datain) { 
    // init message and sales order obj 
    var message = new Object(); 
    var record = nlapiCreateRecord('salesorder'); 
    // check if the sales order already exists in Netsuite 
    if(!datain['otherrefnum']){ 
     message.status = 'failed', 
     message.message = 'missing Customer P.O.'; 
     return message; 
    } else { 
     var filters = new Array(); 
     var columns = new Array(); 
     filters.push(new nlobjSearchFilter('otherrefnum', null, 'equalto', datain['otherrefnum'])); 
     filters.push(new nlobjSearchFilter('entity', null, 'is', datain['entity'])); 
     // columns.push(new nlobjSearchColumn('otherrefnum', null, null)); 
     var search = nlapiSearchRecord(datain.recordtype, null, filters, columns); 
     if(search && search.length>0){ 
      message.status = 'duplicated', 
      message.id = search[0].id; 
      return message; 
     } 
    } 
    // check input data has required fields 
    if(!datain['item']){ 
     message.status = 'failed'; 
     message.message = 'missing item'; 
     return message; 
    } 
    if(!datain['entity']){ 
     message.status = 'failed'; 
     message.message = 'missing customer id'; 
     return message; 
    } 
    // init fields with default values 
    if(!datain['custbody_shipping_reason']){ 
     record.setFieldValue('custbody_shipping_reason',1); 
    } 
    if(!datain['custbody_order_type']){ 
     record.setFieldValue('custbody_order_type',1); 
    } 
    if(!datain['shipmethod']){ 
     record.setFieldValue('shipmethod', 4304); 
    } 
    if(!datain['location']){ 
     record.setFieldValue('location', 21); 
    } 
    if(!datain['istaxable']){ 
     record.setFieldValue('taxitem', -8); 
    } 
    // load data input 
    for(var fieldname in datain){ 
     switch(fieldname){ 
      case 'recordtype': 
      case 'type': 
      case 'id': 
       break; 
      case 'istaxable': 
       record.setFieldValue(fieldname, datain[fieldname]); 
       if(datain[fieldname] == 'T') record.setFieldValue('taxitem', 2908); 
       else record.setFieldValue('taxitem', -8); 
      case 'item': 
       for(var i = 0; i < datain[fieldname].length; i++){ 
        for(var itemfield in datain[fieldname][i]){ 
         record.setLineItemValue('item', itemfield, i+1, datain[fieldname][i][itemfield]); 
        } 
       } 
       break; 
      default: 
       record.setFieldValue(fieldname, datain[fieldname]); 
       break; 
     } 
    } 
    // submit record 
    var recordID = nlapiSubmitRecord(record, true); 
    nlapiLogExecution('DEBUG', 'Create a new salesorder, id = '+recordID); 
    // return results 
    message.status = 'create'; 
    message.id = recordID; 
    var order_entity = nlapiLoadRecord('salesorder', message.id); 
    message.refid = order_entity.getFieldValue('tranid'); 
    return message; 
} 

Update 1: Я попытался запустить тот же код в NetSuite отладчик, оказывается, чтобы успешно написать заказ на продажу, кроме того, что есть пришел с предупреждением:

warning Items on this line have been drop shipped or special ordered. Are you sure you want to modify it? 

Не уверен, если это проблема, которая мешает мне, чтобы сохранить заказ клиента должным образом в производственном режиме.

+2

Вы пробовали имитировать свой код вручную, выполняя те же операции в графическом интерфейсе? Возможно, ваши элементы сборки имеют некоторые ограничения на них, например, на другой отдел или дочернее предприятие. Кроме того, вы пробовали отладку RESTlet с помощью отладчика? Вы также можете попробовать выполнить фрагменты кода из консоли в Chrome или firefox, как еще один метод для отладки. – TonyH

+0

@TonyH Спасибо за ваше предложение. Я пробовал вручную создать заказ на поставку с элементом сборки, и мне кажется, что то же самое, что и я вручную создавал заказы на продажу с элементами инвентаря. Однако я понимаю, что для элемента сборки система автоматически создаст рабочий заказ, который будет построен, а для элемента инвентаря такая вещь не требуется. Мне было интересно, если это разница, но не так уверенно, как создать рабочий заказ через RESTlet. Я попробую отладить код с помощью отладчика Netsuite. Еще раз спасибо! – MsXN31

ответ

0

Я думаю, это потому, что assemblyitem или kit/package item имеет разные обязательные поля, поэтому вы должны добавлять к ним значения вручную.

Пожалуйста, попробуйте и дайте мне знать проблемы.

+0

Привет, спасибо за ваше предложение! Могу ли я спросить, есть ли у вас какие-либо идеи, как я могу проверить, какое поле требуется для элемента assemblyitem или kit/package? Процесс, чтобы вручную добавить resourceitem и assemblyitem в порядке продажи, выглядит одинаково для меня. Благодаря! – MsXN31

0

Наконец-то я решил эту проблему ... Это происходит от разрешения на роль. Я понял, что роль, которую я использовал для вызова REST, - это настраиваемая роль, а не администратор. Чтобы создать заказ клиента с элементами сборки или набора/пакета, роль должна иметь разрешение на создание рабочего заказа. Таким образом, решение, чтобы добавить разрешения на свою роль, чтобы создать рабочий порядок, так же, как показано ниже:

enter image description here

Он находит в Setup - Пользователи/Роли - Управление ролей - [Ваша роль Имени] - Права доступа - Сделки.

Если вы используете роль администратора для вызова REST, это не беспокоит, поскольку у вас уже есть (по моему пониманию) полный доступ ко всем ресурсам.

Еще раз спасибо за вашу помощь и комментарии! Также надеюсь, что это может помочь любому, кто имеет такую ​​же проблему!

 Смежные вопросы

  • Нет связанных вопросов^_^