Добавление нового адреса в запись клиента с помощью Netsuite PHPToolKit

Я хочу добавить новый адрес в существующую адресную книгу клиентов. Я могу добавить адрес для нового клиента, но при добавлении/обновлении адреса для существующего клиента InternalID пользовательской формы для обновления адреса является отрицательным числом, которое отклоняется netsuite. Мой код отключен или есть другая пользовательская форма, которую мне нужно обновить.

$shipService = new NetSuiteService();

$gr = new GetRequest();
$gr->baseRef = new RecordRef();
$gr->baseRef->internalId = $internalId;
$gr->baseRef->type = "customer";
$getResponse = $shipService->get($gr);

//look in response for customer record
$customer = $getResponse->readResponse->record;

//add new address
$address = new CustomerAddressBook();
$address->defaultShipping = true;
$address->defaultBilling = true;
$address->attention = $customer_first . ' ' . $customer_last;
$address->addr1 = $customer_addr1;
$address->addr2 = $customer_addr2;
$address->city = $customer_city;
$address->zip = $customer_zip;
$address->state = $customer_state;

//add new Address book list
$addressBook = new CustomerAddressbookList();
$addressBook->addressbook = array($address);
$addressBook->replaceAll = false;

//add address book to customer record
$customer->addressbookList = $addressBook;

$shipService2 = new NetSuiteService();
$addrRequest = new UpdateRequest();
$addrRequest->record = $customer;
$addrResponse = $shipService2->update($addrRequest);   

это возвращает «Недопустимый ключ ссылки пользовательской формы -10002».


person Matt McThree    schedule 30.12.2013    source источник


Ответы (2)


Решение состоит в том, чтобы фактически создать New Customer(); вместо того, чтобы делать baseref для существующего клиента. Это по-прежнему запрос на обновление, но вы присваиваете обновление внутреннему идентификатору существующего клиента. Итак, код обновления адреса выглядит так:

$shipService = new NetSuiteService();

$address = new CustomerAddressBook();
$address->defaultShipping = true;
$address->defaultBilling = true;
$address->attention = $customer_first.' '.$customer_last;
$address->addr1 = $customer_addr1;
$address->addr2 = $customer_addr2;
$address->city = $customer_city;
$address->zip = $customer_zip;
$address->state = $customer_state;

$addressBook = new CustomerAddressbookList();
$addressBook->addressbook = array($address);
$addressBook->replaceAll = false;

$customer = new Customer();
$customer->addressbookList = $addressBook;
$customer->internalId = $internalId;

$customer->customForm = new RecordRef();
$customer->customForm->internalId = 24;

$customer->addressbookList = $addressBook;

$shipService2 = new NetSuiteService();
$addrRequest = new UpdateRequest();
$addrRequest->record = $customer;
$addrResponse = $shipService2->update($addrRequest);
person Matt McThree    schedule 31.12.2013

Мне это кажется очень странным. Попробуйте установить для пользовательской формы внутренний идентификатор формы клиента, которая активна в NetSuite (-2), является стандартной формой клиента, но перед ее использованием убедитесь, что она не является неактивной.

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

person Suite Resources    schedule 30.12.2013
comment
когда я var_dump массива $customer, я получаю следующий объект (Customer) # 390 (123) { [customForm] = > object (RecordRef) # 389 (4) { [internalId] = > string (6) -10002 [externalId ]=› NULL [type]=› NULL [name]=› string(24) Standard Customer Form_2 } - person Matt McThree; 31.12.2013
comment
Когда я пытаюсь добавить его к -2: INSUFFICIENT_PERMISSION [message]=>string(257) У вас нет прав на установку значения баланса элементов по одной из следующих причин: 1) Поле доступно только для чтения; 2) связанная функция отключена; 3) Поле доступно либо при создании, либо при обновлении записи, но не в обоих случаях. - person Matt McThree; 31.12.2013
comment
У вас есть папка с именем NSLOG в папке, где находится Toolkit? Если это так, он будет содержать XML, отправляемый/получаемый NetSuite. Вы также можете найти его в журнале использования веб-службы в NetSuite. Я хотел бы увидеть запрос и ответ. Это кажется очень странным. - person Suite Resources; 31.12.2013
comment
Я почти уже скопировал результаты в nslog... Если я не определяю пользовательскую форму, я получаю сообщение об ошибке, что -10002 является недопустимой пользовательской формой, а если я определяю -2, он говорит INSUFFICIENT_PERMISSION - person Matt McThree; 31.12.2013
comment
Что значит вы скопировали результаты в nslog?? Я хотел бы видеть вызов SOAP, отправленный в NetSuite, и ответ SOAP от NetSuite здесь, чтобы я мог вам помочь. Я не могу помочь, если не вижу, что происходит за кулисами. Ваш комментарий о остатке долга очень, очень странный. - person Suite Resources; 01.01.2014
comment
Я нашел решение и ответил на него выше. - person Matt McThree; 01.01.2014
comment
Да, вам нужно создать экземпляр объекта Customer. Это другой тип объекта, отличный от результата get. Рад, что вы нашли проблему. - person Suite Resources; 01.01.2014
comment
nslog и ответ в виде массива php дают вам одну и ту же информацию. они оба показывают одну и ту же ошибку, одну в XML и одну в массиве. - person Matt McThree; 01.01.2014