Ajouter une pièce jointe codée à une facture cXML

Aperçu

Vous pouvez transmettre les pièces jointes de la facture au format cXML à l'aide de Base64 en plusieurs parties. Vous devrez créer votre propre script qui prend en charge trois entrées et code les pièces jointes et les balayages d'images (mais pas cXML) au format multi-parties Base64. Votre script devra également créer une limite aléatoire, comme indiqué dans l'exemple de facture codée ci-dessous. Il doit également inclureContent-Typeet Content-IDpour chaque fichier.

Entrées de script

Afin de générer une facture cXML avec des pièces jointes codées, vous devez créer un script qui prend des entrées spécifiques et génère une facture cXML avec les pièces jointes codées.

Assurez-vous que votre fichier de facture cXML standard inclut les éléments suivants pour les pièces jointes et le scan d'image extrinsèque :

<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.

Sortie de script

Votre script doit enregistrer la sortie dans un fichier afin que vous puissiez l'AFFICHER sur l'instance de votre client en utilisant curl.

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
Avertissement

Une fois le fichier de sortie généré, NE PAS L'OUVRIR. Sans l'ouvrir, il suffit de l'AFFICHER sur l'instance du client. L'ouverture du fichier de sortie, puis l'auto-test de démarrage (POST) provoquera une erreur 502 Bad Gateway.

Ajouter des pièces jointes aux factures cXML et tester avec Postman

Exemple de facture codée

--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

Veuillez noter que certaines parties de ce contenu peuvent avoir été générées par traduction automatique.