Codierten Anhang zu einer cXML-Rechnung hinzufügen
Übersicht
Mit Base64 Multipart können Sie Rechnungsanhänge im Rahmen der Rechnung cXML übertragen. Sie müssen Ihr eigenes Skript erstellen, das drei Eingaben benötigt und die Anhänge und Bildscans (aber nicht cXML) im mehrteiligen Base64-Format codiert. Ihr Skript muss auch eine zufällige Grenze erstellen, die in der beispielhaften kodierten Rechnung unten angezeigt wird. Es muss auch Content-Type
und Content-ID
für jede Datei enthalten.
Skripteingaben
Um eine cXML-Rechnung mit darin codierten Anhängen zu erstellen, müssen Sie ein Skript erstellen, das bestimmte Eingaben übernimmt und eine cXML-Rechnung mit den codierten Anhängen generiert.
Stellen Sie sicher, dass Ihre reguläre cXML-Rechnungsdatei die folgenden Elemente für Anhänge und den extrinsischen Bildscan enthält:
<Comments>
<Attachment>
<URL>https://www.google.com/images/srpr/logo11w.png</URL>
//Wenn Ihr Anhang über eine URL öffentlich zugänglich ist, geben Sie die URL an.
</Attachment>
<Attachment>
<URL>cid:test.pdf</URL>
//Wenn wir den Anhang lokal haben, dann geben Sie die Content-ID in URL an.
</Attachment>
</Comments>
<Extrinsic name="ImageScanAttachmentUrl">cid:test.csv</Extrinsic>
//ImageScans mit der Content-ID angeben.
Skriptausgabe
Ihr Skript sollte die Ausgabe in einer Datei speichern, damit Sie sie mit curl in die Instanz Ihres Kunden POSTEN können.
curl -X POST -H 'Accept: application/xml' -H 'Content-Type: multipart/related; boundary=<boundary_value_that_you_have>; type=text/xml; start=<cXML_Invoice_content_id>' --data-binary @<output_file_name>.xml https://<customer_name>.coupahost.com/cxml/invoices
Sobald die Ausgabedatei generiert wurde, ÖFFNEN Sie sie NICHT mehr. Ohne es zu öffnen, POSTEN Sie es einfach in der Kundeninstanz. Das Öffnen der Ausgabedatei und das anschließende POSTing führt zu einem 502 Bad Gateway-Fehler.
Anhänge zu cXML-Rechnungen hinzufügen und mit Postman testen
Beispiel codierte Rechnung
--ec6xAZMGCwZhdyY0 //Random Boundary
Inhalt-Typ: text/xml; charset=UTF-8 //Inhalt-Typ
Inhalts-ID:<payload.xml>//Inhalts-ID für cXML-Rechnungsdatei
<?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 Beschaffung 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" />
//Zeilen 35-43 sind für Anhänge
//Dateinamen als Content-IDs verwenden, damit leicht erkannt werden kann, welche Content-ID auf welches verschlüsselte Format verweist
<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">prüfgegenstände</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>
--ec6xAZMGCwZhdyY0 //Grenze wird hier angezeigt, da die cXML-Rechnung endet
Inhaltstyp: text/plain; charset=utf-8 //Dieser Inhaltstyp verweist auf den Test in der Datei
Content-Disposition: inline; filename="test.pdf" //Angeben des Dateinamens und der Content-Disposition bleibt smae
Content-Transfer-Encoding: base64 //Eingabe ist in base64 foramt codiert
Inhalts-ID:<test.pdf>//welche Datei unten kodiert ist
//Die mehrteilige Base64-Codierung beginnt hier
...
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAg
UiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHlnGuPJbdxhr/3
r+gYWO+ZxNvb94u/SSsntmzBEjxOsIgNYz0z8trZ0UozUja+6L/7KRZZTZ6+
...
--ec6xAZMGCwZhdyY0 //Grenze wird angezeigt, wenn die obige Eingabe der Datei abgeschlossen ist
Inhaltstyp: text/plain; charset=utf-8 //Dieser Inhaltstyp verweist auf den Text/die Details in der Datei
Content-Disposition: inline; filename="test.csv" //Geben Sie den Dateinamen an und die Content-Disposition bleibt gleich
Content-Transfer-Encoding: base64 //Eingabe ist in base64 foramt codiert
Inhalts-ID:<test.csv>//welche Dateien unten kodiert sind
...
CjAwMDAxOTQ0MjkgMDAwMDAgbiAKMDAwMDE5NDk1NiAwMDAwMCBuIAowMDAw
MTk1MjE4IDAwMDAwIG4gCjAwMDAyMjAyMTQgMDAwMDAgbiAKMDAwMDIyMDY4
NyAwMDAwMCBuIAowMDAwMjIwOTU2IDAwMDAwIG4gCjAwMDAyMzc3OTYgMDAw
...
--ec6xAZMGCwZhdyY0--
//Base64 Mehrteilige Codierung endet hier