NetSuite发票创建MLI_LOCATION_REQUIRED但invoice.location无法设置

时间:2014-12-19 16:56:53

标签: netsuite invoice inventory

似乎大多数人都在使用PHP Toolkit进行NetSuite webservices交互;我不是,但我会粘贴SOAP编码的请求/响应,希望有人可以提供帮助(咳嗽套件资源咳嗽)。

我正在尝试使用单个发票项目创建新发票。我收到错误:

  

多地点库存错误(MLI_LOCATION_REQUIRED):此交易或其商品必须包含位置。

但是,当我尝试在发票上设置位置时,我收到错误:

  

由于以下原因之一,您无权为元素位置设置值:1)该字段为只读字段; 2)禁用相关功能; 3)该字段在创建或更新记录时可用,但在两种情况下都不可用。

[1] pry(main)> invoice.add

D, [2014-12-19T16:47:19.997923 #13995] DEBUG -- : HTTPI GET request to webservices.sandbox.netsuite.com (net_http)
I, [2014-12-19T16:47:20.464235 #13995]  INFO -- : SOAP request: https://webservices.sandbox.netsuite.com/services/NetSuitePort_2013_2
I, [2014-12-19T16:47:20.464378 #13995]  INFO -- : SOAPAction: "add", Content-Type: text/xml;charset=UTF-8, Content-Length: 2568
D, [2014-12-19T16:47:20.464926 #13995] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:platformMsgs="urn:messages_2013_2.platform.webservices.netsuite.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:platformCore="urn:core_2013_2.platform.webservices.netsuite.com" xmlns:platformCommon="urn:common_2013_2.platform.webservices.netsuite.com" xmlns:listRel="urn:relationships_2013_2.lists.webservices.netsuite.com" xmlns:tranSales="urn:sales_2013_2.transactions.webservices.netsuite.com" xmlns:actSched="urn:scheduling_2013_2.activities.webservices.netsuite.com" xmlns:setupCustom="urn:customization_2013_2.setup.webservices.netsuite.com" xmlns:listAcct="urn:accounting_2013_2.lists.webservices.netsuite.com" xmlns:tranBank="urn:bank_2013_2.transactions.webservices.netsuite.com" xmlns:tranCust="urn:customers_2013_2.transactions.webservices.netsuite.com" xmlns:tranInvt="urn:inventory_2013_2.transactions.webservices.netsuite.com" xmlns:listSupport="urn:support_2013_2.lists.webservices.netsuite.com" xmlns:tranGeneral="urn:general_2013_2.transactions.webservices.netsuite.com" xmlns:listMkt="urn:marketing_2013_2.lists.webservices.netsuite.com" xmlns:listWebsite="urn:website_2013_2.lists.webservices.netsuite.com" xmlns:fileCabinet="urn:filecabinet_2013_2.documents.webservices.netsuite.com" xmlns:listEmp="urn:employees_2013_2.lists.webservices.netsuite.com">
  <env:Header>
    <platformMsgs:passport>
      <platformCore:email>[REDACTED]</platformCore:email>
      <platformCore:password>[REDACTED]</platformCore:password>
      <platformCore:account>[REDACTED]</platformCore:account>
      <platformCore:role internalId="3"/>
    </platformMsgs:passport>
  </env:Header>
  <env:Body>
    <platformMsgs:add>
      <platformMsgs:record xsi:type="tranSales:Invoice">
        <tranSales:email>[REDACTED]</tranSales:email>
        <tranSales:isTaxable>false</tranSales:isTaxable>
        <tranSales:entity internalId="26017" externalId="[REDACTED]" type="customer"/>
        <tranSales:itemList>
          <tranSales:item>
            <tranSales:item internalId="152"/>
            <tranSales:line>1</tranSales:line>
            <tranSales:orderLine>1</tranSales:orderLine>
            <tranSales:amount>313</tranSales:amount>
            <tranSales:location internalId="1" type="location"/>
            <tranSales:revRecStartDate>2014-12-01T08:13:00.000Z</tranSales:revRecStartDate>
            <tranSales:revRecEndDate>2015-12-01T08:13:00.000Z</tranSales:revRecEndDate>
          </tranSales:item>
        </tranSales:itemList>
      </platformMsgs:record>
    </platformMsgs:add>
  </env:Body>
</env:Envelope>

D, [2014-12-19T16:47:20.465337 #13995] DEBUG -- : HTTPI POST request to webservices.sandbox.netsuite.com (net_http)
I, [2014-12-19T16:47:23.786293 #13995]  INFO -- : SOAP response (status 200)
D, [2014-12-19T16:47:23.786660 #13995] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
    <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2013_2.platform.webservices.netsuite.com">
      <platformMsgs:nsId>WEBSERVICES_[REDACTED]_121920141668433096579618905_1be2c0a823e5</platformMsgs:nsId>
    </platformMsgs:documentInfo>
  </soapenv:Header>
  <soapenv:Body>
    <addResponse xmlns="urn:messages_2013_2.platform.webservices.netsuite.com">
      <writeResponse>
        <platformCore:status xmlns:platformCore="urn:core_2013_2.platform.webservices.netsuite.com" isSuccess="false">
          <platformCore:statusDetail type="ERROR">
            <platformCore:code>MLI_REQD</platformCore:code>
            <platformCore:message>Multi-location Inventory Error (MLI_LOCATION_REQUIRED): this transaction or its items must have locations.</platformCore:message>
          </platformCore:statusDetail>
          <platformCore:statusDetail type="WARN">
            <platformCore:code>WARNING</platformCore:code>
            <platformCore:message>Fake Billing Line Item: You have only 0 available across all locations (0 back ordered, 0 on order).</platformCore:message>
          </platformCore:statusDetail>
        </platformCore:status>
      </writeResponse>
    </addResponse>
  </soapenv:Body>
</soapenv:Envelope>

=> false
[2] pry(main)> invoice.location = ottawa
=> #<NetSuite::Records::Location:0x007fca96a5eea8
 @attributes=
  {:name=>"Ottawa",
   :is_inactive=>false,
   :addressee=>"Ottawa",
   :addr1=>"[REDACTED]",
   :city=>"Ottawa",
   :state=>"ON",
   :zip=>"[REDACTED]",
   :country=>"_canada",
   :addr_text=>"Ottawa\n[REDACTED]\nOttawa ON [REDACTED]",
   :override=>false,
   :make_inventory_available=>false},
 @external_id=nil,
 @internal_id="1">
[3] pry(main)> invoice.add
D, [2014-12-19T16:48:03.626321 #13995] DEBUG -- : HTTPI GET request to webservices.sandbox.netsuite.com (net_http)
I, [2014-12-19T16:48:04.090118 #13995]  INFO -- : SOAP request: https://webservices.sandbox.netsuite.com/services/NetSuitePort_2013_2
I, [2014-12-19T16:48:04.090331 #13995]  INFO -- : SOAPAction: "add", Content-Type: text/xml;charset=UTF-8, Content-Length: 2640
D, [2014-12-19T16:48:04.090841 #13995] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:platformMsgs="urn:messages_2013_2.platform.webservices.netsuite.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:platformCore="urn:core_2013_2.platform.webservices.netsuite.com" xmlns:platformCommon="urn:common_2013_2.platform.webservices.netsuite.com" xmlns:listRel="urn:relationships_2013_2.lists.webservices.netsuite.com" xmlns:tranSales="urn:sales_2013_2.transactions.webservices.netsuite.com" xmlns:actSched="urn:scheduling_2013_2.activities.webservices.netsuite.com" xmlns:setupCustom="urn:customization_2013_2.setup.webservices.netsuite.com" xmlns:listAcct="urn:accounting_2013_2.lists.webservices.netsuite.com" xmlns:tranBank="urn:bank_2013_2.transactions.webservices.netsuite.com" xmlns:tranCust="urn:customers_2013_2.transactions.webservices.netsuite.com" xmlns:tranInvt="urn:inventory_2013_2.transactions.webservices.netsuite.com" xmlns:listSupport="urn:support_2013_2.lists.webservices.netsuite.com" xmlns:tranGeneral="urn:general_2013_2.transactions.webservices.netsuite.com" xmlns:listMkt="urn:marketing_2013_2.lists.webservices.netsuite.com" xmlns:listWebsite="urn:website_2013_2.lists.webservices.netsuite.com" xmlns:fileCabinet="urn:filecabinet_2013_2.documents.webservices.netsuite.com" xmlns:listEmp="urn:employees_2013_2.lists.webservices.netsuite.com">
  <env:Header>
    <platformMsgs:passport>
      <platformCore:email>[REDACTED]</platformCore:email>
      <platformCore:password>[REDACTED]</platformCore:password>
      <platformCore:account>[REDACTED]</platformCore:account>
      <platformCore:role internalId="3"/>
    </platformMsgs:passport>
  </env:Header>
  <env:Body>
    <platformMsgs:add>
      <platformMsgs:record xsi:type="tranSales:Invoice">
        <tranSales:email>[REDACTED]</tranSales:email>
        <tranSales:isTaxable>false</tranSales:isTaxable>
        <tranSales:entity internalId="26017" externalId="[REDACTED]" type="customer"/>
        <tranSales:itemList>
          <tranSales:item>
            <tranSales:item internalId="152"/>
            <tranSales:line>1</tranSales:line>
            <tranSales:orderLine>1</tranSales:orderLine>
            <tranSales:amount>313</tranSales:amount>
            <tranSales:location internalId="1" type="location"/>
            <tranSales:revRecStartDate>2014-12-01T08:13:00.000Z</tranSales:revRecStartDate>
            <tranSales:revRecEndDate>2015-12-01T08:13:00.000Z</tranSales:revRecEndDate>
          </tranSales:item>
        </tranSales:itemList>
        <tranSales:location internalId="1" type="location"/>
      </platformMsgs:record>
    </platformMsgs:add>
  </env:Body>
</env:Envelope>

D, [2014-12-19T16:48:04.091365 #13995] DEBUG -- : HTTPI POST request to webservices.sandbox.netsuite.com (net_http)
I, [2014-12-19T16:48:05.738270 #13995]  INFO -- : SOAP response (status 200)
D, [2014-12-19T16:48:05.738785 #13995] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
    <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2013_2.platform.webservices.netsuite.com">
      <platformMsgs:nsId>WEBSERVICES_[REDACTED]_121920141668476805866012724_a7c7c427c826</platformMsgs:nsId>
    </platformMsgs:documentInfo>
  </soapenv:Header>
  <soapenv:Body>
    <addResponse xmlns="urn:messages_2013_2.platform.webservices.netsuite.com">
      <writeResponse>
        <platformCore:status xmlns:platformCore="urn:core_2013_2.platform.webservices.netsuite.com" isSuccess="false">
          <platformCore:statusDetail type="ERROR">
            <platformCore:code>INSUFFICIENT_PERMISSION</platformCore:code>
            <platformCore:message>You do not have permissions to set a value for element location due to one of the following reasons: 1) The field is read-only; 2) An associated feature is disabled; 3) The field is available either when a record is created or updated, but not in both cases.</platformCore:message>
          </platformCore:statusDetail>
        </platformCore:status>
      </writeResponse>
    </addResponse>
  </soapenv:Body>
</soapenv:Envelope>

=> false
[4] pry(main)>

1 个答案:

答案 0 :(得分:1)

查看&#34; invoice.location&#34; JSON数据([2] pry(main)&gt; invoice.location = ottawa)发布在你的问题中,我看到你有&#34; make_inventory_available&#34;在NetSuite内部的位置记录中将字段设置为false。

你可以试试下面的内容,让我知道它是否有效:

  1. 在NetSuite用户界面中,导航至设置 - &gt;公司 - &gt;地点(分类下)。
  2. 使用内部ID编辑位置&#34; 1&#34;即&#34;渥太华&#34;。
  3. 设置复选框字段&#34; MAKE INVENTORY AVAILABLE&#34;真实。
  4. 现在尝试通过在第一个soap xml请求([1] pry(main)&gt; invoice.add)中设置的项目级别上设置位置字段来执行invoice.add操作。