CXML請求書にエンコードされた添付ファイルを追加する
概要
Base 64マルチパートを使用して、請求書cXMLの一部として請求書の添付ファイルを送信できます。3つの入力を取り、添付ファイルと画像スキャンをBase 64マルチパート形式でエンコードする独自のスクリプトを作成する必要があります(ただし、cXMLは使用できません)。また、以下のエンコードされた請求書の例に示されているように、スクリプトはランダムな境界を作成する必要があります。また、各ファイルにContent - Type
とContent - IDも
含める必要があります。
スクリプト入力
エンコードされた添付ファイルを含むcXML請求書を生成するには、特定の入力を取り、エンコードされた添付ファイルを含むcXML請求書を生成するスクリプトを作成する必要があります。
通常のcXML請求書ファイルには、添付ファイルと外部画像スキャンの次の要素が含まれていることを確認します。
<Comments>
<Attachment>
<URL>https://www.google.com/images/srpr/logo11w.png</URL>
//添付ファイルがURLで公開されている場合は、URLを指定します。
</Attachment>
<Attachment>
<URL>cid: test.pdf</URL>
//添付ファイルがローカルにある場合は、URLにcontent - IDを指定します。
</Attachment>
</Comments>
<Extrinsic name="ImageScanAttachmentUrl">cid: test.csv</Extrinsic>
//コンテンツIDを持つImageScansを指定します。
Script ouptut
スクリプトは出力をファイルに保存して、curlを使用して顧客のインスタンスに投稿できるようにする必要があります。
curl - X POST - H 'Accept: application/xml' - H 'Content - Type: multipart/related<boundary_value_that_you_have>; boundary =; type = text/xml<cXML_Invoice_content_id>; start ='--<output_file_name> data - binary @.xml https<customer_name> ://.coupahost.com/cxml/invoices
警告
出力ファイルが生成されたら、開かないでください。開かずに、顧客インスタンスにポストするだけです。出力ファイルを開いてからPOSTすると、502 Bad Gatewayエラーが発生します。
CXML請求書に添付ファイルを追加し、Postmanでテスト
例のエンコードされた請求書
-- ec 6 xAZMGCwZhdyY 0 //ランダム境界
Content - type: text/xml; charset = UTF -8 //コンテンツタイプ
Content - ID <payload.xml> :// cXML請求書ファイルのコンテンツID
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd">
<cXML version="1.2.020" xml:lang="en-US" timestamp="2018-03-08T13:08:23-08:00" payloadID="2018-03-08T13:08:23-08:00">
<Header>
<From>
<Credential domain="dwqsdg">
<Identity>vcbv</Identity>
</Credential>
</From>
<To>
<Credential domain="vfdfvb">
<Identity>dbfg</Identity>
</Credential>
</To>
<Sender>
<Credential domain="dwqsdg">
<Identity>vcbv</Identity>
<SharedSecret>fdbgfg</SharedSecret>
</Credential>
<UserAgent>Coupa Procurement 1.0</UserAgent>
</Sender>
</Header>
<Request deploymentMode="production">
<InvoiceDetailRequest>
<InvoiceDetailRequestHeader invoiceDate="2018-03-08T13:08:23-08:00" operation="new" purpose="standard" invoiceOrigin="supplier" invoiceID="COUPATEST21">
<InvoiceDetailHeaderIndicator />
<InvoiceDetailLineIndicator isAccountingInLine="yes" />
<PaymentTerm payInNumberOfDays="30" />
// 35 -43行目は添付書類用です
//ファイル名をコンテンツIDとして使用して、どのコンテンツIDがどのエンコード形式を参照しているかを簡単に認識できるようにします
<Comments>
<Attachment>
<URL>https://www.google.com/images/srpr/logo11w.png</URL>
</Attachment>
<Attachment>
<URL>cid: test.pdf</URL>
</Attachment>
</Comments>
<Extrinsic name="ImageScanAttachmentUrl">cid: test.csv</Extrinsic>
</InvoiceDetailRequestHeader>
<InvoiceDetailOrder>
<InvoiceDetailOrderInfo>
<OrderReference>
<DocumentReference payloadID="2820" />
</OrderReference>
</InvoiceDetailOrderInfo>
<InvoiceDetailItem quantity="1.0" invoiceLineNumber="1">
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">23.34</Money>
</UnitPrice>
<InvoiceDetailItemReference lineNumber="1">
<ItemID>
<SupplierPartID />
<SupplierPartAuxiliaryID />
</ItemID>
<Description xml:lang="en-US">テスト項目s</Description>
</InvoiceDetailItemReference>
<SubtotalAmount>
<Money currency="USD">23.34</Money>
</SubtotalAmount>
</InvoiceDetailItem>
</InvoiceDetailOrder>
<InvoiceDetailSummary>
<SubtotalAmount>
<Money currency="USD">23.34</Money>
</SubtotalAmount>
<Tax>
<Money currency="USD">0</Money>
<Description xml:lang="en-US" />
<TaxDetail purpose="tax" category="USD" percentageRate="0" taxPointDate="2018-03-08T13:08:23-08:00">
<TaxableAmount>
<Money currency="USD">23.34</Money>
</TaxableAmount>
<TaxAmount>
<Money currency="USD">0</Money>
</TaxAmount>
<TaxLocation xml:lang="en">USD</TaxLocation>
</TaxDetail>
</Tax>
<NetAmount>
<Money currency="USD">23.34</Money>
</NetAmount>
</InvoiceDetailSummary>
</InvoiceDetailRequest>
</Request>
</cXML>
-- ec 6 xAZMGCwZhdyY 0 // cXML請求書がここで終了すると、境界が表示されます
Content - Type: text/plain; charset = utf -8 //このcontent - typeはファイル内のテストを参照します
Content - Disposition: inline; filename =" test.pdf "//ファイル名とContent - Dispositionを指定する
Content - Transfer - Encoding: base 64 //入力はbase 64 foramtでエンコードされます
Content - ID <test.pdf> ://以下にエンコードされているファイル
// Base 64マルチパーツエンコーディングはこちらから開始します
...
JVBERi 0 xLjMKJcTl 8 uXrp/Og 0 MTGCjQgMCBvYmoKPDwgL 0 xlbmd 0 aCA 1 IDAg
UiAvRmlsdGVyIC 9 GbGF 0 ZURlY 29 kZSA + PgpzdHJlYW 0 KeAHlnGuPJbdxhr/3
r + gYWO + ZxNvb 94 u/SSsntmzBEjxOsIgNYz 0 z 8 trZ 0 UozUja +6 L/7 KRZZTZ 6 +
...
-- ec 6 xAZMGCwZhdyY 0 //ファイルの上記入力が完了すると境界が表示される
Content - Type: text/plain; charset = utf -8 //このコンテンツタイプは、ファイル内のテキスト/詳細を参照します
Content - Disposition: inline; filename =" test.csv "//ファイル名とコンテンツ配置を同じままにする
Content - Transfer - Encoding: base 64 //入力はbase 64 foramtでエンコードされます
Content - ID <test.csv> ://以下にエンコードされているファイル
...
CjAwMDAxOTQ 0 MjkgMDAwMDAgbiAKMDAwMDE 5 NDk 1 NiAwMDAwMCBuIAowMDAw
MTk 1 MjE 4 IDAwMDAwIG 4 gCjAwMDAyMjAyMTQgMDAwMDAgbiAKMDAwMDIyMDY 4
NyAwMDAwMCBuIAowMDAwMjIwOTU 2 IDAwMDAwIG 4 gCjAwMDAyMzc 3 OTYgMDAw
...
-- ec 6 xAZMGCwZhdyY 0 --
// Base 64マルチパーツエンコーディングはここで終了します