使用Netsuite PHPToolKit向客户记录中添加新地址

使用Netsuite PHPToolKit向客户记录中添加新地址,php,netsuite,Php,Netsuite,我希望向现有客户通讯簿添加新地址。我可以为新客户添加地址,但在向现有客户添加/更新地址时,用于更新地址的customform的InternalID为负数,netsuite拒绝该负数。我的代码是否已关闭,或者是否需要更新其他customform $shipService = new NetSuiteService(); $gr = new GetRequest(); $gr->baseRef = new RecordRef(); $gr->baseRef->internalId

我希望向现有客户通讯簿添加新地址。我可以为新客户添加地址,但在向现有客户添加/更新地址时,用于更新地址的customform的InternalID为负数,netsuite拒绝该负数。我的代码是否已关闭,或者是否需要更新其他customform

$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。”

这对我来说似乎很奇怪。尝试将customform设置为在NetSuite中处于活动状态的客户表单的内部ID(-2)是标准客户表单,但在使用它之前,请确保它不是非活动的


除此之外,我要说的是,您必须查看可能会干扰您的脚本的其他脚本或工作流,例如可能会处理某些beforeSubit功能的脚本或工作流。

解决方案是实际创建一个新客户();而不是对现有客户进行baseref。它仍然是一个更新请求,但您将更新分配给现有客户的内部ID。因此,地址更新代码如下所示:

$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);

当我var_转储$customer数组时,当我尝试将其添加到-2时,我得到以下对象(customer)#390(123){[“customForm”]=>object(RecordRef){[“internalId”]=>string(6)“-10002”[“externalId”]=>NULL[“type”]=>NULL[“name”=>string(24)“标准客户表单”}:权限不足”[“message”=>string(257)”由于以下原因之一,您没有为元素平衡设置值的权限:1)该字段为只读;2)关联功能被禁用;3)该字段在创建或更新记录时可用,但在这两种情况下都不可用。在工具箱所在的文件夹下是否有名为NSLOG的文件夹?如果是,它将继续a NetSuite发送/接收的XML。您也可以在NetSuite中的Web服务使用日志中找到它。我想查看请求和响应。这似乎很奇怪。我几乎已经在nslog中复制了结果…如果我不定义customForm,我会得到一个错误,即-10002是无效的customForm,如果我定义-2,则会显示InuffiCIENT_Permission你在nslog中复制结果是什么意思?我想在这里看到发送给NetSuite的SOAP调用和NetSuite的SOAP响应,以便我可以帮助你。如果我看不到幕后发生了什么,我就无能为力。你关于“余额到期”的评论非常非常奇怪。