2017-01-27 4 views
0

Контекст: RESTлет, написанный в SuiteScript v1, но я буду использовать v2, если нужно.Как получить поля адреса из записи местоположения с использованием SuiteScript

Важно: Решение должно работать на серверах.

В записи местоположения есть поле под названием Main Address. Идентификатор поля - mainaddress_text.

Когда я редактирую поле «Основной адрес» с помощью веб-сайта NetSuite, он представляет мне обычную форму редактирования адреса с нормальными полями адресов, поэтому кажется, что NetSuite хранит адрес, например, на адресах, например, на клиента запись в полях «Страна», «Внимание», «Адресат», «Телефон» и т. д.

Я хочу получить значения этих полей, но я не могу понять, как это сделать.

Я загрузил местоположение с помощью

location = nlapiLoadRecord('location', locationid) 

схемы браузер (https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/schema/record/location.html) предполагает, есть поле, называемое mainAddress типа адреса.

Я пытался получить доступ поле mainAddress используя операторы, подобные этим:

location.getField('mainaddress') //returns null 
location.getSubList('mainaddress') //returns null 
location.getLineItemCount('mainaddress') //returns -1 
location.getFieldValue('mainaddress') //returns null 
location.getFieldText('mainaddress') //returns null 

Но нет успеха.

Я также пробовал location.getLineItemCount('addressbook') в случае, если в записи пользователя было указано имя, подобное возврату -1.

В браузере записей (https://system.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/script/record/location.html) указано, что существует поле под названием addrtext типа Address.

Я пытался получить доступ поле addrtext, используя операторы, подобные этим:

location.getField('addrtext') //returns null 
location.getSubList('addrtext') //returns null 
location.getLineItemCount('addrtext') //returns -1 
location.getFieldValue('addrtext') //returns null 
location.getFieldText('addrtext') //returns null 

Но нет успеха.

В браузере записей также описаны поля, называемые addr1, addr2, addr3, адресат, внимание, город и т. Д.

я попытался получить доступ к этим поля, используя операторы, подобные этим:

location.getFieldValue('attention') //returns null 
location.getFieldValue('addressee') //returns null 
location.getFieldValue('addr1') //returns null 
location.getFieldValue('addr2') //returns null 
location.getFieldValue('addr3') //returns null 
location.getFieldValue('city') //returns null 
location.getFieldValue('state') //returns null 
location.getFieldValue('country') //returns null 

Но не успех.

Единственный способ, которым я нашел, чтобы получить адресные данные, - location.getFieldValue('mainaddress_text'), но который возвращает адрес в виде одной строки с частями адреса, разделенных <br> -tokens.

Как я могу получить отдельные поля адреса?

ответ

2

Я предлагаю записать запись, чтобы увидеть, что находится в ней с JSON.stringify(location). Поля адресов обычно хранятся в addr1 и т. Д.

Возможно, что поля адреса не были установлены из пользовательского интерфейса. Я видел некоторые сценарии, которые просто устанавливают поле mainaddress_text, но пренебрегают также изменением отдельных полей, что вызывает проблемы в конечном итоге, потому что mainaddress_text не будет соответствовать другим адресам (addr1, addr2 и т. Д.).

Вы можете попытаться найти для адресных полей, вот как это сделать в SS 1.0:

var locationSearch = nlapiSearchRecord("location", null, 
    [ 
     ["internalid", "anyof", "2"] //Change internal id 
    ], 
    [ 
     new nlobjSearchColumn("attention", 'address', null), 
     new nlobjSearchColumn("addressee", 'address', null), 
     new nlobjSearchColumn("address1", null, null), 
     new nlobjSearchColumn("address2", null, null), 
     new nlobjSearchColumn("address3", null, null), 
     new nlobjSearchColumn("city", null, null), 
     new nlobjSearchColumn("state", null, null), 
     new nlobjSearchColumn("country", null, null), 
     new nlobjSearchColumn("zip", null, null), 
     new nlobjSearchColumn("phone", null, null) 
    ] 
); 

if (results) 
{ 
    var result = results[0]; 

    return { 
     attention: result.getValue('attention', 'address'), 
     addressee: result.getValue('addressee', 'address'), 
     address1: result.getValue('address1'), 
     address2: result.getValue('address2'), 
     address3: result.getValue('address3'), 
     city: result.getValue('city'), 
     state: result.getValue('state'), 
     country: result.getValue('country'), 
     zip: result.getValue('zip'), 
     phone: result.getValue('phone') 
    }; 
} 
+0

Единственные поля адресов, которые дает мне JSON.stringify, - mainaddress_text и returnaddress_text. Адрес был настроен из пользовательского интерфейса. – cja

+0

Странно, на моем конце, когда он настроен из пользовательского интерфейса, как mainaddress_text, так и отдельные addr1 и т. Д. Поля устанавливаются. –

+0

Вы работаете в RESTlet? – cja

1

Дайте этому попытку:

nlapiLoadRecord("location", locationID, {recordmode: "dynamic"}) 
.viewSubrecord("mainaddress") 
.getFieldValue('addrtext'); 

Я открыл Место записи в браузера, и оттуда открыла консоль для загрузки nlobjRecord. Глядя на полях я вижу есть mainaddress2_set поле, которое устанавливается с помощью nlapiViewSubrecord("mainaddress")

Я не мог сделать звонок в viewSubrecord("mainaddress") с клиентской стороны консоли, но я сделал создать простой suitelet, чтобы загрузить запись Расположение и напечатайте адрес.

function GET(request, response){ 
    var r = nlapiLoadRecord("location", "123456", {recordmode: "dynamic"}); 
    response.write(r.viewSubrecord("mainaddress").getFieldValue('addrtext')); 
    response.write(r.viewSubrecord("mainaddress").getFieldValue('addr1')); 
    // etc. 
} 
+0

Это дает мне исключение на r.viewSubrecord ("mainaddress") - \ "code \": \ "FIELD_1_IS_NOT_A_SUBRECORD_FIELD \", \ "details \": \ "Поле mainaddress не является субзадачным полем. \" - но оно работает для Дэйва так стоит попробовать для кого-то другого с той же проблемой. – cja