NetSuite - получить идентификатор позиции

У меня есть такой сценарий: Система A создает счета-фактуры с отдельными позициями и отправляет их в NetSuite. Возможно, позже счет-фактура в Системе A был изменен, где позиции либо обновлялись, либо удалялись и возвращались в NetSuite. Как мы узнаем, какие позиции были изменены или удалены? Должна ли система A отправлять обратно идентификатор линии? В этом случае я пытаюсь понять, как получить идентификатор позиции, но он не возвращает значение.

for (var x = 1; x <= itemcount; x++)
	{
	var lineid = nlapiGetLineItemValue('item', 'linenumber', x)
	nlapiLogExecution('DEBUG', 'removing  =  ', lineid);
		if(lineid == 1)
		{
            nlapiLogExecution('DEBUG', 'removing line item 1');
			nlapiRemoveLineItem('item', x)
		}
	}


person MG2016    schedule 05.04.2016    source источник


Ответы (2)


Подход с настраиваемым полем столбца транзакции - хороший инструмент для синхронизации данных между NS и внешней системой с помощью RESTlet. Но у нас есть встроенная возможность сделать это, и это стандартный способ сделать это.

ExternalId - это стандартный столбец, который доступен для записей и элементов строки, где его можно использовать для обновления / удаления элементов строки в записи.

Этот ExternalId нельзя просмотреть в пользовательском интерфейсе записей NS. Это может быть сохранено с идентификатором записи, который хранится во внешней системе.

Например, внешняя система с таблицей SQL хранит SalesOrder и имеет столбец идентификатора в этой таблице, а также таблица SOLineItem хранит соответствующий элемент строки продавца, также содержащий столбец идентификатора.

Теперь идентификатор записи должен быть передан в JSON как externalid для SO, а идентификатор lineitems должен быть передан в JSON как externalid для lineitems в объекте items в JSON.

Образец JSON

 {
      "internalid": "",
      "recordtype": "salesorder",
      "entity": "3217",
      "salesrep": "3209",
      "terms": "2",
      "trandate": "6\/16\/2014",
      "orderstatus": "A",
      "otherrefnum": "245852",
      "billaddress":"",
      "shipaddress":"",
      "externalid": "FF160614-SO03", //ID of SO record on SO SQL table
      "item": [
       {
          "isremove":"",
          "internalid": "",
          "item": "486",
          "amount": "50",
          "quantity": "5",
        "externalid": "FF160614-SO03-L1-INV-486" //ID of LineItems record SOLineItem SQL table
        },
        {
          "isremove":"",
          "internalid": "",
          "item": "700",
          "amount": "100",
          "quantity": "1",
          "externalid": "FF160614-SO03-L2-GRP-700A" //ID of LineItems record SOLineItem SQL table
        }
      ]
}

Если вы заметили образец JSON, у которого есть свойство isremove в подсписке элементов. Если для этого параметра установлено значение true, соответствующая позиция должна быть удалена.

person Frederick RajKumar    schedule 06.04.2016
comment
Спасибо, Фредерик - попробую. - person MG2016; 06.04.2016
comment
Дайте мне знать результаты :) - person Frederick RajKumar; 06.04.2016

Мы не обнаружили, что какие-либо поля NetSuite linenumber или другие подобные поля являются надежным способом идентификации позиции. Кажется, что они меняются на протяжении всего срока существования записи всякий раз, когда меняют порядок строк или изменяют их.

Мы добивались этого в прошлом, добавляя настраиваемое поле столбца транзакции, называемое чем-то вроде Уникальный идентификатор или идентификатор строки или как вам угодно. Затем NetSuite или внешняя система могут сгенерировать UUID для каждой строки и сохранить его в настраиваемом столбце. Пока обе системы поддерживают ссылку на UUID для каждой строки, вы можете синхронизировать их.

person erictgrubaugh    schedule 05.04.2016
comment
Спасибо - я воспользуюсь этим подходом. Итак, если в исходном счете, отправленном в NetSuite, было три элемента строки, а позже в измененной версии было 2 элемента ... Я могу сравнить пользовательские идентификаторы, и если совпадения нет, я могу предположить, что он был удален, поэтому удалите элемент строки на счет в NetSuite. Но как мне узнать, было ли обновлено поле позиции? - person MG2016; 06.04.2016
comment
Вам придется вручную сравнить все значения полей, которые вас интересуют. Я бы рекомендовал проанализировать значения в каждой строке в объект JS той же структуры, что и ваши строковые объекты в JSON. Затем вы можете сравнить два объекта. - person erictgrubaugh; 06.04.2016