Codierten Anhang zu cXML-hinzufügen

Revised: 28 June 2022

Übersicht

Sie können Rechnungsanhänge als Teil der Rechnungs-cXML mithilfe von Base64 Multipart übertragen. Sie müssen Ihr eigenes Skript erstellen, das drei Eingaben verwendet und die Anhänge und Bildscans (aber nicht cXML) im Base64-Multipart-Format codiert. Ihr Skript muss auch eine zufällige Begrenzung erstellen, wie in der codierten Beispielrechnung unten gezeigt. Außerdem muss es Content-Type und Content-ID für jede Datei enthalten.

Skripteingaben

Um eine cXML-Rechnung mit darin codierten Anhängen zu generieren, müssen Sie ein Skript erstellen, das bestimmte Eingaben verwendet 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>
		//If your attachment is publicly accessible by a URL, specify the URL.
	</Attachment>
	<Attachment>
		<URL>cid:test.pdf</URL>
		//If we have the attachment locally, then specify the content-ID in URL.
	</Attachment>
</Comments>
<Extrinsic name="ImageScanAttachmentUrl">cid:test.csv</Extrinsic>
//Specify ImageScans with the content-ID.

Skriptausgabe

Ihr Skript sollte die Ausgabe in einer Datei speichern, damit Sie sie mit curl an die Instanz Ihres Kunden senden können (mit POST).

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
Warnung

Nachdem die Ausgabedatei generiert wurde, ÖFFNEN SIE DIESE NICHT. Senden Sie sie einfach per POST an die Kundeninstanz, ohne sie zu öffnen. Wenn Sie die Ausgabedatei öffnen und dann POSTen, tritt der Fehler „502 Bad Gateway“ auf.

Anhänge zu cXML-Rechnungen hinzufügen und mit Postman testen

Beispiel für eine codierte Rechnung

--ec6xAZMGCwZhdyY0 //Random Boundary
Content-type: text/xml; charset=UTF-8	//Content type
Content-ID: <payload.xml> //content ID for cXML Invoice file

<?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" />
				//Lines 35-43 are for Attachments
				//Use filenames as content-IDs so it's easy to recognizing which content-ID refers to which encoded format
				<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">test items 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>
--ec6xAZMGCwZhdyY0 //Boundary is displayed as the cXML Invoice ends here
Content-Type: text/plain; charset=UTF-8	//This content-type refers the test in file
Content-Disposition: inline; filename="test.pdf" //Specify the filename and content-disposition remains smae
Content-Transfer-Encoding: base64 //input is encoded in base64 foramt
Content-ID: <test.pdf> //which file is encoded below

//Base64 multipart encoding starts here
...
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAg
UiAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PgpzdHJlYW0KeAHlnGuPJbdxhr/3
r+gYWO+ZxNvb94u/SSsntmzBEjxOsIgNYz0z8trZ0UozUja+6L/7KRZZTZ6+
...

--ec6xAZMGCwZhdyY0 //boundary is displayed as above input of file is completed
Content-Type: text/plain; charset=UTF-8 //This content-type refers the text/details in file
Content-Disposition: inline; filename="test.csv" //Specify the filename and content-disposition remains same
Content-Transfer-Encoding: base64 //input is encoded in base64 foramt
Content-ID: <test.csv> //which file's is encoded below

...
CjAwMDAxOTQ0MjkgMDAwMDAgbiAKMDAwMDE5NDk1NiAwMDAwMCBuIAowMDAw
MTk1MjE4IDAwMDAwIG4gCjAwMDAyMjAyMTQgMDAwMDAgbiAKMDAwMDIyMDY4
NyAwMDAwMCBuIAowMDAwMjIwOTU2IDAwMDAwIG4gCjAwMDAyMzc3OTYgMDAw
...

--ec6xAZMGCwZhdyY0--
//Base64 multipart encoding ends here

Parts or all of this page might have been machine-translated. We apologize for any inaccuracies.