2016-01-14 2 views
3

Я пытаюсь обновить поле в пользовательском объекте, но когда я это сделаю, я получаю сообщение об ошибке java.lang.NullPointerException.API NetSuite: обновление поля пользовательского объекта

Существует также это в объекте Code исключения: http://schemas.xmlsoap.org/soap/envelope/:Server.userException. This S/O thread указывает, что может быть что-то не так с запросом, который я отправил, что заставило сервер выбросить исключение. Но что? В исключении нет никаких деталей.

Насколько я вижу, я следую примеру обновления в «Руководстве по платформе SuiteTalk (Web Services)», за исключением того, что это «CustomRecord», а не «Клиент», поэтому мне пришлось сделать некоторые изменения.

Это метод, который я должен помочь обновить CustomRecords. Ошибка происходит в последней строке, где я на самом деле сделать запрос:

private static void UpdateCustomRecordValue(CustomRecord customRecord, string fieldName, string newValue, NetSuiteService netsuiteService) 
{ 
    var field = customRecord.customFieldList.Where(custField => custField.scriptId == fieldName).FirstOrDefault(); 

    if (field == null) return; 

    var updateRecord = new CustomRecord(); 
    updateRecord.scriptId = customRecord.scriptId; 

    CustomFieldRef[] custFieldList = new CustomFieldRef[] { 
     new StringCustomFieldRef 
     { 
      value = newValue, 
      scriptId = field.scriptId 
     } 
    }; 

    updateRecord.customFieldList = custFieldList; 
    var updateResponse = netsuiteService.update(updateRecord); 

} 
+0

scriptId идентифицирует тип записи. Вам также нужен внутренний идентификатор экземпляра записи. – bknights

+0

@bknights Спасибо, это привело меня к правильному пути! – FirstDivision

ответ

1

я, наконец, понял это, я должен также обеспечить внутренний идентификатор и RecordRef указать тип объекта:

private static void UpdateCustomRecordValue(CustomRecord customRecord, string fieldName, string newValue, NetSuiteService netsuiteService) 
{ 
    var field = customRecord.customFieldList.Where(custField => custField.scriptId == fieldName).FirstOrDefault(); 

    if (field == null) return; 

    var updateRecord = new CustomRecord(); 

    updateRecord.recType = new RecordRef { 
     internalId = "56", //<-- The same ID you would normally use to search with 
     typeSpecified = true 
    }; 

    updateRecord.internalId = customRecord.internalId; 

    CustomFieldRef[] custFieldList = new CustomFieldRef[] { 
     new StringCustomFieldRef 
     { 
      value = newValue, 
      scriptId = field.scriptId, 
      internalId = field.internalId 
     } 
    }; 

    updateRecord.customFieldList = custFieldList; 

    var updateResponse = netsuiteService.update(updateRecord); 

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