• Zuletzt bearbeitet am: 05 August 2021

Rechnungen Integration in Ihr ERP

Schritt-für-Schritt-Anleitungen zur Integration Ihrer Coupa-Rechnungen in Ihr ERP.

Einleitung

Sie können dieses Dokument auch als Microsoft Word-Dokument herunterladen: Coupa Invoices an ERP.docx

Allgemeine Überlegungen zur API-Einrichtung

Begrenzte Nutzlast: Felder & API-Filter

Die API von Coupa gibt standardmäßig viele Daten zurück (z. B. vollständige Objekte für zugehörige Objekte). Die API-Rückgabe-Nutzlasten können sehr groß und daher langsam sein. Dies kann ein Problem für Kunden sein, die die Fremddaten nicht benötigen, ganz zu schweigen vom unnötigen Ressourcenverbrauch.

Um die Dinge zu vereinfachen, hat Coupa das Konzept der „Felder“ -Parameter und API-Filter, die eine begrenzte JSON- oder XML-Antwort anstelle des gesamten Schemas und aller Zuordnungen für ein Objekt zurückgeben.

In diesem Artikel beschriebene Anwendungsfälle

Die Rechnungen haben in der Regel eine interne Nummer im ERP. In diesem Dokument gehen wir davon aus, dass diese ERP-Belegnummer ein benutzerdefiniertes Feld im Coupa-Rechnungskopf ist. In unserem Beispiel wurde das benutzerdefinierte Feld cf_erp_invoice_number mit dem Namen ERP-Rechnungsnummer erstellt. Dieser Artikel beschreibt die 3 verschiedenen Optionen zur Integration von Coupa-Rechnungen in Ihr ERP(sowohl für die Erstellung als auch für Aktualisierungen).

Diese Optionen ändern die Art und Weise, wie Sie Ihre Integrationen von Coupa aus überwachen können:

  • Option 1: Einfache Überwachung basierend auf benutzerdefinierten Feldern, die Sie im Rechnungskopf definieren
  • Alternative 2: Erweiterte Überwachung mit Integrationsverlaufsdatensätzen
  • Option 3: Vollständige Coupa-Integrationsüberwachung nutzen

Für die 3 Optionen werden die Coupa-Rechnungen basierend auf dem Export-Flag in das ERP gepusht. Im Fehlerfall ist bei der Integration einer Rechnung eine manuelle Änderung der Rechnung in der Coupa-UI erforderlich: Diese Änderung setzt das Export-Flag zurück und die Rechnung wird daher im nächsten Durchlauf berücksichtigt.

Tipp

Coupa schlägt vor, dass Sie sich an den Coupa-Support wenden, um diese Option zu aktivieren: Datum für zuletzt exportierte Rechnung bei jeder Änderung zurücksetzen. Diese Einstellung gilt nur für die Benutzeroberfläche. Änderungen, die mit API vorgenommen werden, ändern den Exportstatus nicht.

Dedizierte Integration und Kontakt für API erstellen

Für Option 2 & 3 müssen Sie Folgendes erstellen:

  1. Eine dedizierte Integration für jede API-Orchestrierung, die Sie implementieren
    invoice-integration-01.png
  2. Ein oder mehrere Integrationskontakt (e) für jede Integration, der/die bei fehlgeschlagener Integration benachrichtigt wird/werden
    invoice-integration-contact.png
Tipp

Coupa schlägt vor, dass Sie sich an den Coupa-Support wenden, um diese Option zu aktivieren: Link zu Integrationsverlauf nach Dokumenttyp aktivieren. Diese Einstellung fügt einen Link auf der Einrichtungsseite hinzu, um den vollständigen Integrationsverlauf pro Dokumenttyp anzuzeigen.

Option 1: Einfache Überwachung basierend auf benutzerdefinierten Feldern

Beschreibung

In diesem Szenario fügen wir für jede Rechnung den aktuellen Integrationsstatus in ein oder mehrere benutzerdefinierte Felder für den Rechnungskopf ein. Wir haben hinzugefügt, dass das benutzerdefinierte Feld cf-integration-status mit dem Namen Integrationsstatus erstellt wurde. Verwenden Sie die Standard-Rechnungsdatentabelle, um den Integrationsstatus Ihrer Dokumente unter dieser URL zu verfolgen: https://<your instance hostname>/invoices.

invoices-01.png

Orchestrierungsdiagramm

orchestration-01.png

Details zu Schritten / API-Aufrufen

Schritt 1

Rufen Sie die Liste und Details der Coupa-Rechnungen ab, die im ERP erstellt/aktualisiert werden sollen.

Zu den Auswahlkriterien gehören das Exportkennzeichen und der Rechnungsstatus.

Methode

ABFRAGEN

API

https://<your instance hostname>/api/invoices/

Query-Parameter

fields=<your API filter name>
offset=10
exported=false
status[in]=approved,voided

Beispiel-URL

https://<your instance hostname>/api/invoices?filter=<your API filter name>&offset=10&exportiert= false&status[in]=genehmigt,für ungültig erklärt

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe

response-01.png

Schritt 2

Einzelrechnung als exportiert markieren

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

exportiert=true
fields=["id","exportiert"]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>?exported=true&fields=["id","exportiert"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



{

		"id":<Invoice id>,

		"exportiert": wahr

}

Schritt 3

Aktualisieren von benutzerdefinierten Feldern für Reporting und ERP-Dokumentennummer

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

fields=["id","exportiert",{ "custom_fields": {} }]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>?fields=["id","exportiert",{ "custom_fields": {} }]

Abfrage Hauptteilmuster



{ 

		"id":<Invoice_id>,

		"exported": wahr,

		"custom-fields": {

		"cf-erp-invoice-number": "<Invoice number in the ERP>",

		„cf-integration-status“: "Erfolg: Die Rechnung wurde in Ihrem ERP repliziert "

			}

	}

oder



{

		"custom-fields": {

		„cf-integration-status“: "Fehler: Die Rechnung konnte nicht in Ihrem ERP repliziert werden "

	}

}

Antwort Körperprobe



{ 

		"id":<Invoice_id>,

		"exported": wahr,

		"custom-fields": {

				"cf-erp-invoice-number": "<Invoice number in the ERP>",

				„cf-integration-status“: "Erfolg: Die Rechnung wurde in Ihrem ERP repliziert "

		}

}

oder



{

		"id":<Invoice id>,

		"exported": wahr,

		"custom-fields": {

				"cf-erp-invoice-number": Null,

				„cf-integration-status“: „Fehler[2] : Die Rechnung wurde ordnungsgemäß in Ihrem ERP-System repliziert "

		}

}

Alternative 2: Erweiterte Überwachung mit Integrationsverlauf

Beschreibung

In diesem Szenario müssen wir für jede Rechnung:

  • Den vorherigen Integrationsverlaufsdatensatz für das Dokument auflösen
  • Einen Integrationsverlaufsdatensatz erstellen
  • Eine Warnung an den Integrationskontakt im Fehlerfall erstellen

Jedes Dokument enthält die Details des Integrationsverlaufsinvoice-int-hist-02.png

invoice-int-hist-01.png

Verwenden Sie die Standard-Integrationsverlaufsdatentabelle für Rechnungen, um den Integrationsstatus Ihrer Dokumente zu verfolgen. Sie finden es unter: https://<your instance hostname>/integration_history_records/invoices.

invoice-int-records-01.png

Sie können einen Filter nach Antwortcode verwenden, um zwischen erfolgreich replizierten und fehlgeschlagenen Dokumenten zu unterscheiden.

invoice-int-records-02.png

Orchestrierungsdiagramm

orchestration-02.png

Details zu Schritten / API-Aufrufen

Schritt 1

Rufen Sie die Liste und Details der Coupa-Rechnungen ab, die im ERP erstellt/aktualisiert werden sollen.Zu den
Auswahlkriterien gehören das Exportkennzeichen und der Rechnungsstatus.

Methode

ABFRAGEN

API

https://<your instance hostname>/api/invoices/

Query-Parameter

filter=<your API filter name>
offset=10
exported=false
status[in]=approved,voided

Beispiel-URL

https://<your instance hostname>/api/invoices?filter=<your API filter name>&offset=10&exportiert= false&status[in]=genehmigt,für ungültig erklärt

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe

response-02.png

Schritt 2

Einzelrechnung als exportiert markieren

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

exportiert=true
fields=["id","exportiert"]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>?exported=true&fields=["id","exportiert"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



{

		"id":<Invoice id>,

		"exportiert": wahr

}

Hier erfolgt die Erstellung/Aktualisierung der Rechnung im ERP.

Schritt 3a

Ungelösten Integrationsverlaufsdatensatz abrufen

Methode

ABFRAGEN

API

https://<your instance hostname>/api/integration_history_records

Query-Parameter

resolved=false
document-type=InvoiceHeader
document-id=<Invoice id>
fields=["id","document-id","status","resolved"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records?resolved=false&document-type=InvoiceHeader&document-id=<Invoice id>&fields=["id","document-id","status","resolved"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration History Record id>,

				"document-id":<Invoice id>,

				"status": "Fehler",

				"Resolved": false

		}

]

Schritt 3b

Vorherigen Integrationsverlaufsdatensatz auflösen

Methode

PUT

API

https://<your instance hostname>/api/integration_history_records/<Old Integration History Record id>/lösen

Query-Parameter

fields=["id","document-id","status","aufgelöst"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records/<Old Integration History Record id>/resolve?fields=["id","document-id","status","aufgelöst"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration History Record id>,

				"document-id":<Invoice id>,

				"Status": "Fehler",

				"Resolved": wahr

		}

]

Schritt 4a

Aktualisieren Sie ein benutzerdefiniertes Feld für die ERP-Dokumentennummer (Erfolg)

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

fields=["id","exportiert",{ "custom_fields": {} }]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>&fields=["id","exportiert",{ "custom_fields": {} }]

Abfrage Hauptteilmuster



{

		"custom-fields": {

		"cf-erp-invoice-number": "<Invoice number in the ERP>"

		}

}

Antwort Körperprobe



{

		"id":<Invoice id>,

		"exported": wahr,

		"custom-fields": {

		"cf-erp-invoice-number": "<Invoice number in the ERP>"

		}

}

Schritt 4b

Integrationsverlauf erstellen (erfolgreich)

Methode

PUT

API

https://<your instance hostname>/api/integration_history_records

Query-Parameter

fields=["id","document-id","status"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records?fields=["id","document-id","status"]

Abfrage Hauptteilmuster



{

		"document-type": "Rechnungsüberschrift",

		"document-id":<Invoice id>,

		"document-status":"<Invoice status>",

		"contact-alert-type": "Funktional",

		"Status": "Erfolgreich",

		"integration": {"code":"<Customer Integration id>"},

		"responses": [

				{

						"response-code": "Erfolg-1234",

						"response-message": „Die Integration in das ERP ist gut gelaufen“

				}

		]

}

Antwort Körperprobe



{

		"id":<New Integration History Record id>,

		"document-id":<Invoice id>,

		"Status": "Erfolg"

}

Schritt 4c

Integrationsverlauf erstellen (Fehler) und Warnung an Integrationskontakt

Methode

PUT

API

https://<your instance hostname>/api/integration_history_records/create_alert

Query-Parameter

fields=["id","document-id","status"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records/create_alert?fields=["id","document-id","status"]

Abfrage Hauptteilmuster



{

		"document-type": "Rechnungsüberschrift",

		"document-id":<Invoice id>,

		"document-status":"<Invoice status>",

		"contact-alert-type": "Funktional",

		"Status": "Fehler",

		"integration": {"code":"<Customer Integration id>"},

		"responses": [

				{

						"response-code": "Fehler-CC",

						"response-message": "Kopfzeile: Zeitraum ist derzeit für die Buchung geschlossen "

				},

				{

				"response-code": "Fehler-CC",

				"response-message": "Strasse 1: Die Kostenstelle CA234 ist für die Rechnungsstellung geschlossen "

				}

		]

}

Antwort Körperprobe



{

		"id":<New Integration History Record id>,

		"document-id":<Invoice id>,

		"status": „Fehler“

}

Option 3: Vollständige Coupa-Integrationsüberwachung nutzen

Beschreibung

In diesem Szenario erstellen wir einen Integrationslauf, der

  • Ausschreibungsstatus (ausstehend/gestartet/fehlerhaft/erfolgreich/fehlgeschlagen)
  • Die totale Anzahl von verarbeiteten Rechnungen
  • Die Anzahl von Erfolgen und Fehlern
  • Die Liste von Integrationsfehlern und deren Status (behoben oder nicht)

Für jede Rechnung:

  • Den vorherigen Integrationsverlaufsdatensatz für das Dokument auflösen
  • Einen Integrationsverlaufsdatensatz erstellen
  • Erstellen Sie im Fehlerfall einen Integrationsfehler und eine Warnung an den Integrationskontakt

Sie können alle Integrationsläufe für Ihre Integration mit dieser URL überwachen: https://<your instance hostname>/integrations/<your integration id>/integration_runs.

po-api-integration-01.png

Sie verwenden die Standard-Rechnungsintegrationsfehlertabelle, um alle Rechnungen mit ausstehender Lösung für Integrationsfehler aufzulisten. Sie finden es unter: https://<your instance hostname>/integration_errors.

inoice-int-records-03.png

Orchestrierungsdiagramm

orchestration-03.png

Details zu Schritten / API-Aufrufen

Schritt 1

Integrationsausführung erstellen

Methode

BEITRAG

API

https://<your instance hostname>/api/integration_runs

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster



{

		"integration": {

				"code": "{{integration_code}}"

		}

}

Antwort Körperprobe



{

		"id":<Integration Run ID>,

		...

}

Schritt 2

Rufen Sie die Liste und Details der Coupa-Rechnungen ab, die im ERP erstellt/aktualisiert werden sollen.Zu den
Auswahlkriterien gehören das Exportkennzeichen und der Rechnungsstatus.

Methode

ABFRAGEN

API

https://<your instance hostname>/api/invoices/

Query-Parameter

filter=<your API filter name>
offset=10
exported=false
status[in]=approved,voided

Beispiel-URL

https://<your instance hostname>/api/invoices?filter=<your API filter name>&offset=10&exportiert= false&status[in]=genehmigt,für ungültig erklärt

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe

response-03.png

Schritt 3

Integrationsausführung starten

Methode

PUT

API

https://<your instance hostname>/api/integration_runs/<Integration Run ID>/ausführen

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster



{

		"total_records": <Total Number of Invoices from Step 2>

}

Antwort Körperprobe



{

		"id":<Integration Run ID>,

		...

}

Schritt 4

Einzelrechnung als exportiert markieren

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

exportiert=true
fields=["id","exportiert"]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>?exported=true&fields=["id","exportiert"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



{

		"id":<Invoice id>,

		"exportiert": wahr

}

Hier erfolgt die Erstellung/Aktualisierung der Rechnung im ERP.

Schritt 5a

Ungelösten Integrationsverlaufsdatensatz abrufen

Methode

ABFRAGEN

API

https://<your instance hostname>/api/integration_history_records

Query-Parameter

resolved=false
document-type=InvoiceHeader
document-id=<Invoice id>
fields=["id","document-id","status","resolved"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records?resolved=false&document-type=InvoiceHeader&document-id=<Invoice id>&fields=["id","document-id","status","resolved"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration History Record id>,

				"document-id":<Invoice id>,

				"status": "Fehler",

				"Resolved": false

		}

]

Schritt 5b

Vorherigen Integrationsverlaufsdatensatz auflösen

Methode

PUT

API

https://<your instance hostname>/api/integration_history_records/<Old Integration History Record id>/lösen

Query-Parameter

fields=["id","document-id","status","aufgelöst"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records/<Old Integration History Record id>/resolve?fields=["id","document-id","status","aufgelöst"]

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration History Record id>,

				"document-id":<Invoice id>,

				"Status": "Fehler",

				"Resolved": wahr

		}

]

Schritt 6a

Ungelösten Integrationsfehlerdatensatz abrufen

Methode

ABFRAGEN

API

https://<your instance hostname>/api/integration_errors

Query-Parameter

aufgelöst=falscher
Dokumententyp=InvoiceHeader
document-id=<Invoice id>

Beispiel-URL

https://<your instance hostname>/api/integration_errors?resolved=false&document-type=InvoiceHeader&document-id=<Invoice id>

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration Error Record id>,

				"document-type": "Rechnungsüberschrift",

				"document-id":<Invoice id>,

				"status": "Fehler",

				"Resolved": false

				...

		}

]

Schritt 6b

Vorherigen Integrationsverlaufsdatensatz auflösen

Methode

PUT

API

https://<your instance hostname>/api/integration_errors/<Old Integration Error Record id>/lösen

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



[

		{

				"id":<Old Integration Error Record id>,

				"document-id":<Invoice id>,

				"Status": "Fehler",

				"Resolved": wahr

				...

		}

]

Schritt 7a

Aktualisieren Sie ein benutzerdefiniertes Feld für die ERP-Dokumentennummer (Erfolg)

Methode

PUT

API

https://<your instance hostname>/api/invoices/<Invoice id>

Query-Parameter

fields=["id","exportiert",{ "custom_fields": {} }]

Beispiel-URL

https://<your instance hostname>/api/invoices/<Invoice id>?fields=["id","exportiert",{ "custom_fields": {} }]

Abfrage Hauptteilmuster



{

		"custom-fields": {

		"cf-erp-invoice-number": "<Invoice number in the ERP>"

		}

}

Antwort Körperprobe



{

		"id":<Invoice id>,

		"exported": wahr,

		"custom-fields": {

				"cf-erp-invoice-number": "<Invoice number in the ERP>"

		}

}

Schritt 7b

Integrationsverlauf erstellen (Erfolg)
Er muss auf den Integrationslauf verweisen

Methode

PUT

API

https://<your instance hostname>/api/integration_history_records

Query-Parameter

fields=["id","document-id","status"]

Beispiel-URL

https://<your instance hostname>/api/integration_history_records?fields=["id","document-id","status"]

Abfrage Hauptteilmuster



{

		"document-type": "Rechnungsüberschrift",

		"document-id":<Invoice id>,

		"document-status":"<Invoice status>",

		"contact-alert-type": "Funktional",

		"status": "Erfolgreich",

		"integration": {"code":"<Customer Integration id>"},

		"integration-run": {"id":<Integration Run ID>},

		"responses": [

				{

						"response-code": "Erfolg-1234",

						"response-message": „Die Integration in das ERP ist gut gelaufen“

				}

		]

}

Antwort Körperprobe



{

		"id":<New Integration History Record id>,

		"document-id":<Invoice id>,

		"status": "Erfolg"

}

Schritt 7c

Integrationsfehler erstellen und Benachrichtigung an den Integrationskontakt
Es muss auf den Integrationslauf verwiesen werden

Methode

PUT

API

https://<your instance hostname>/api/integration_errors/create_alert

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster



{

		"document-type": "Rechnungsüberschrift",

		"document-id":<Invoice id>,

		"document-status":"<Invoice status>",

		"contact-alert-type": "Funktional",

		"Status": "Fehler",

		"integration-run-id": "<Integration Run ID>",

		"responses": [

				{

						"response-code": "Fehler-CC",

						"response-message": "Kopfzeile: Zeitraum ist derzeit für die Buchung geschlossen "

				},

				{

						"response-code": "Fehler-CC",

						"response-message": "Strasse 1: Die Kostenstelle CA234 ist für die Rechnungsstellung geschlossen "

				}

		]

}

Antwort Körperprobe



{

		"id":<New Integration Error Record id>,

		"document-id":<Invoice id>,

		"Status": „Fehler“

		...

}

Schritt 8

Integrationsausführung erfolgreich beendet

Methode

PUT

API

https://<your instance hostname>/api/integration_runs/<Integration Run ID>/success

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



{

		"id":<Integration Run ID>,

		"status": "erfolgreich"

		...

}

Wenn während des Integrationslaufs ein allgemeiner Fehler auftritt.

Schritt x

Raise Failure für den Integrationslauf

Methode

PUT

API

https://<your instance hostname>/api/integration_runs/<Integration Run ID>/fehlgeschlagen

Query-Parameter

Nicht zutreffend

Abfrage Hauptteilmuster

Nicht zutreffend

Antwort Körperprobe



{

		"id":<Integration Run ID>,

		"status": "fehlgeschlagen"

		...

}

Vergleichbare Artikel


Die Coupa Core-API

Unsere RESTful-API bietet robusten Zugriff zum Lesen, Bearbeiten oder Integrieren Ihrer Daten mit der Coupa-Plattform.

Erste Schritte mit der API

Allgemeine Informationen zur Verwendung der Coupa-API und wann Sie CSV verwenden sollten.

Übergang zu OAuth 2.0 und OIDC

Coupa veraltet ältere API-Schlüssel und erfordert die Verwendung von OAuth 2.0 / OIDC. Ab R34 werden keine neuen API-Schlüssel ausgegeben und API-Schlüssel werden mit R35 nicht mehr unterstützt.

Bauen Sie auf der Coupa-Plattform auf

Unsere API-basierte offene Integrationsplattform ermöglicht Technologiepartnern und unabhängigen Softwareanbietern (ISVs) die Integration ihrer Produkte in Coupa