• Dernière modification le: 11 August 2022

Créer une application de panneau intégré

Découvrez comment créer des applications Panel pour des pages spécifiques dans Coupa.

Introduction

Les applications Panel permettent aux clients d'afficher des données provenant de sources externes dans un panneau d'interface utilisateur sur une page Coupa donnée. Ces données peuvent être spécifiques au contexte et peuvent être actualisées automatiquement ou manuellement. Par exemple, lorsqu'une page Fournisseur se charge dans Coupa, une application Panel de cette page peut automatiquement obtenir des données d'une source externe via l'API qui concerne ce fournisseur particulier et afficher les données dans Coupa.

Créez une application Panel en accédant à Configuration > Plateforme > Applications installées et cliquez sur Créer puis l'option : Créer une nouvelle application de panneau , La clé pour créer et configurer une application Panel se trouve dans son Descriptor, un ensemble de paramètres au format JSON pour votre application.

Voici un exemple d'application Panel sur la page d'accueil Coupa.

Exemple d'application de panneau sur la page d'accueil Coupa

Vous pouvez créer une application Panel en accédant à Configuration > Plateforme > Applications installées , Cliquez sur le bouton Créer et sélectionnez Créer une nouvelle application de panneau ,

Conditions exigées

À partir de la version R29, les applications Panel nécessitent au moins TLS v1.2 pour établir des connexions sortantes avec des API tierces.

Notions de base des applications Panel

Les applications Panel sont créées à l'aide d'un descripteur d'application qui utilise le format JSON. Le descripteur se compose de deux propriétés principales : les données et les blocs. Les données sont traitées via JQ v1.6 ,

Propriété Description
slot

Spécifie le type de page dans lequel le panneau sera affiché. Les options actuelles sont :

  • user.home (Page d’accueil Coupa : / et /user/home )
  • suppliers.show (page de détails du fournisseur : /suppliers/:id/record )
  • items.show (page des détails de l'article : /items/{id} )
  • contracts.show (page des détails du contrat : /contracts/show/:id )
  • requisition_headers.edit (panier d'achat Coupa : /requisition_headers/{id}/edit )
  • invoices.show (pages de détails des factures, y compris la modification des factures sur l'interface de facturation de nouvelle génération : /invoices/{id} et /invoices/{id}/show_for_approval )

  • receipts.full_receipt (Page de reçu détaillé : /receipts/{id}/full_receipt )

  • expenses.index (Page de destination des dépenses : /expenses )

  • projects.show (page de détails du projet : /projects/{id} )

  • quotes/requests.show (page des détails de l'appel d'offres : /quotes/requests/{id} )

  • asn/headers.show (page de détails ASN : /asn/headers/{id} )

  • receipts.full_receipt (page des détails du reçu : /receipts/{id}/full_receipt )


{
	 "slot": "user.home"
 }

Un seul emplacement peut être spécifié par application de panneau. Pour que l'application apparaisse sur plusieurs pages, créez-la à nouveau avec le nom souhaité slot valeur.

data

L'attribut data décrit comment récupérer les données souhaitées qui sont affichées dans le panneau.  Objet JSON qui décrit les données à récupérer pour le rendu du panneau. Les valeurs de cet objet seront des URL auxquelles Coupa enverra une demande afin de récupérer des données. Les réponses de toutes ces demandes de données seront fusionnées en un seul hachage, avec un alias sous le nom de clé qui leur est donné dans cet objet.


"data": {
		"study_queue": "https://www.wanikani.com/api/user/{user_ID}/study-queue",
		"level_progression": "https://www.wanikani.com/api/user/{user_ID}/level-progression"
	}
}
context


Chacun(e) slot fournit des détails contextuels sur la page sur laquelle elle est affichée. Par exemple, une application de panneau affichée sur une page d'affichage de fournisseur aura accès aux données contextuelles sur ce fournisseur spécifique. Vous pouvez utiliser ces informations contextuelles dans vos objets de données, mais pas dans blocks , Ainsi, lorsqu'une application de panneau s'affiche sur la page d'affichage de « Fournisseur ACME », l'appel API peut être personnalisé en fonction du nom du fournisseur, de l'ID coupa, des valeurs de champ personnalisé et d'autres propriétés de ce fournisseur.

Un appel API à la recherche d'articles du New York Times pour des articles récents sur un fournisseur ressemblerait à ceci :


"data": {
		"nyt_data": {
			"uri": "https://api.nytimes.com/svc/search/v2/articlesearch.json?
			q={context.supplier.name}&api-key={properties.api_key}"
	}
}			

Contactez Coupa pour obtenir une liste actualisée des données contextuelles disponibles pour chaque emplacement.

Paramétrer les appels api (propriétés)

Tableau de propriétés qu'un utilisateur/administrateur doit fournir après avoir activé votre application Panel. Si votre application/API nécessite une clé API unique ou un identifiant/mot de passe pour chaque client Coupa qui l'active, voici comment vous pouvez fournir cette option.

Voici un exemple de bloc :


"properties": {
		"username": {
			"type": "string"
		},
		"password": {
			"type": "string"
		}
	}

Vous référencez ensuite vos propriétés dans les blocs de données comme suit :


"data": {
		"my_data": {
			"method": "post",
			"uri": "https://someurl.com/EVToken",
			"body": "grant_type=password&username={{ properties.username }}&
			password={{ properties.password }}"
		}
	}

Lorsqu'un administrateur Coupa active une nouvelle application de panneau, il est invité à remplir tous les champs de « propriétés » spécifiés dans votre descripteur d'application.

launch

Ajoute un bouton de lancement qui peut être utilisé lorsqu'une application Panel n'a pas besoin d'être affichée immédiatement. Plutôt que d'être transmise automatiquement à un tiers et de restituer les données, l'application ne le fait que si l'utilisateur clique manuellement sur le bouton Lancer.

Cet objet JSON inclut description , button_text et help_text , Par exemple :


"launch": {
		"description": "PretendCo Tax Calculator Service",
		"button_text": "Launch Calculator",
		"help_text": "Tax Calculator integrates with Coupa to help you calculate international 
		taxes, right in the cart."
	}

Comment utiliser launch :

  • Utiliser si les données de l'application Panel ne concernent que des business cases spécifiques de la page
  • Ajouter au même niveau que slot , data , etc., mais pas dans blocks
allow_refresh

Ajoute un bouton Actualiser qui peut être utilisé lorsque les données de la page changent et affecte les données affichées dans l'application Panel. Ceci est pratique pour votre application de panneau de panier lorsqu'une ligne de demande est mise à jour. L'utilisateur peut cliquer sur le bouton Actualiser pour mettre à jour les données dans l'application Panel.

Cette option booléenne est utilisée pour afficher un bouton d'actualisation sur l'application Panel dans le descripteur d'application :

"allow_refresh": true

Comment utiliser allow_ refresh :

  • Utiliser si les données requises par l'application peuvent être mises à jour par l'utilisateur et si l'application a besoin des nouvelles données

Lorsque vous cliquez dessus, le bouton actualise le contenu de cette application. Ce champ doit être ajouté au même niveau que « slot », « data », « lancement », etc., mais pas en blocs. Le bouton Actualiser apparaît en haut de l'application du panneau.

blocks

L'attribut blocs décrit comment afficher les données dans le panneau. Il s'agit d'un tableau d'objets JSON ("blocs") de différents types qui décrivent chacun une visualisation distincte. Les blocs ont accès aux données précédemment envoyées et les utilisent pour créer des visualisations.

error_blocks L'attribut des blocs d'erreur fonctionne de la même manière que l'attribut des blocs, mais il est utilisé pour créer des messages d'erreur lorsqu'il y a un problème pour obtenir ou restituer les données.

Récupération des données

Nous autoriserons les applications à effectuer jusqu'à 5 appels HTTP distincts afin de récupérer les données de l'application. Elles seront spécifiées à l'aide de l'attribut de données dans le descripteur. Les appels API doivent renvoyer JSON (préféré) ou XML.

Types de blocs des applications Panel

Panel App affiche ces données sur une page Coupa existante en utilisant différents types d'éléments d'interface utilisateur connus sous le nom de blocs , Coupa prend en charge les types de blocs suivants :

  • Texte riche (y compris les images)
  • Champs (paires clé-valeur essentiellement)
  • Numéro
  • Argent
  • Graphique à secteurs
  • Graphique ligne/barre/colonne
  • Lancer
  • Actualiser

Configuration des applications

Attribut Description

type

Identifie le type de bloc. Par exemple, fields , text , ou bars , Cela déterminera la façon dont le bloc est rendu dans le panneau de l'interface utilisateur, ainsi que le format requis pour les données.

data

Cet objet JSON aura des propriétés différentes selon la stratégie.

JQ

  • le type doit être égal à "jq"

  • jq est une chaîne qui contient un script JQ. Le script JQ reçoit la structure de données fusionnée de l'attribut de données comme entrée et doit produire une structure JSON qui correspond au format requis pour le type de bloc.

Traitement des données avec JQ

Par exemple, le script JQ suivant peut être utilisé pour extraire plusieurs données spécifiques et les reconditionner dans un autre objet JSON :


{
	 "username": ".study_queue.user_information.username",
	 "radicals": ".level_progression.requested_information.radicals_progress",
	 "kanji": ".level_progression.requested_information.kanji_progress"
}

L'objet JSON suivant est ainsi créé :


{
	 "username": "example_user",
	 "radicals": 0,
	 "kanji": 0
}

Plus d'informations :

other properties

Différents types de blocs peuvent avoir d'autres propriétés spécifiques à ce type de bloc.

Types de blocs des applications Panel

Bloc de texte

Attribut Description

type

Doit être égal à text

template

Le type de bloc de texte utilise un modèle de marquage liquide. Le modèle est d'abord analysé en tant que Liquide pour interpoler les données qui sont retournées par les demandes. Ensuite, le modèle est analysé à nouveau sous Markdown pour générer le code HTML.

Markdown fournit une méthode sûre pour générer du HTML et, pour des raisons de sécurité, Coupa bloque le HTML en ligne dans le modèle. Il n'y a pas de limite de caractères autre que la limite maximale de la colonne de données qui stocke la configuration du bloc.

Le balisage permet de mettre en en-têtes, de mettre en évidence les en-têtes, listes, images, liens et citations. Coupa prend également en charge la coloration syntaxique et les tableaux.

Pour plus d'informations sur l'utilisation de Liquid et Markdown, consultez Langue du modèle liquide et Maîtriser le Markdown ,

data

La stratégie de données doit produire un seul objet JSON. Toutes les clés de l'objet seront disponibles pour le modèle Liquide en tant que variables.


{
	 "foo": "bar",
	 "fizz": {
			"buzz": "buzz"
	 }
}
Conseil

Actuellement, un bloc de texte est le meilleur/le seul moyen d'afficher des données dans un tableau en utilisant kramdown format de tableau.

Bloc de champs

Propriété Description

type

Doit être égal à field

data

La stratégie de données doit produire un tableau d'objets JSON avec des attributs d'étiquette et de valeur. Lors du rendu, l'étiquette sera utilisée comme étiquette de champ et la valeur sera utilisée comme valeur de champ.


[
	 {
			"label": "Foobar",
			"value": "fizzbuzz"
	 },
	 {
			"label": "Lorem Ipsum",
			"value": 42
	 }
]
title Titre facultatif qui apparaîtra au-dessus de la liste des champs.

Bloc de barre/ligne

Propriété Description

type

Doit être égal à bar ou line

data

La stratégie de données doit produire un tableau de tableaux. Contrairement au bloc de tableau, les données des graphiques à barres/courbes seront orientées colonne.

Chaque tableau représente une seule série de données qui seront affichées. Le premier élément est le nom de la série, les autres éléments sont les points de la série.


[{
		"name": "Year 1800",
		"data": [107, 31, 635, 203, 2]
 }, {
		"name": "Year 1900",
		"data": [133, 156, 947, 408, 6]
 }, {
		"name": "Year 2000",
		"data": [814, 841, 3714, 727, 31]
 }, {
		"name": "Year 2016",
		"data": [1216, 1001, 4436, 738, 40]
}]
axis Permet de configurer les étiquettes sur les axes x et y.
title Titre facultatif qui apparaîtra au-dessus du graphique.
description Description des options qui apparaîtra sous le graphique en texte plus petit.

Bloc de secteur

Propriété Description

type

Doit être égal à tarte

data

La stratégie de données doit produire un tableau de tableaux orienté colonne, comme décrit dans la section Bloc de barres/lignes.



[{
		name: 'Chrome',
		y: 20.41,
		sliced: true,
		selected: true
	}, {
		name: 'Internet Explorer',
		y: 11.84
	}, {
		name: 'Firefox',
		y: 10.85
	}, {
		name: 'Edge',
		y: 4.67
	}, {
		name: 'Safari',
		y: 4.18
	}, {
		name: 'Sogou Explorer',
		y: 1.64
	}, {
		name: 'Opera',
		y: 2.8
	}, {
		name: 'Other',
		y: 2.61
}]
title Un titre facultatif qui apparaîtra au-dessus du graphique.
description Description des options qui apparaîtra sous le graphique en texte plus petit.

Bloc monétaire

Propriété Description

type

Doit être égal à argent

data La stratégie de données doit produire un objet JSON avec la structure suivante :
  • Montant d'un JSON Float pour déterminer le montant de la devise.
  • Devise chaîne contenant le code de devise ISO 4217 de la devise.

{
	"amount": 42.0,
	"currency": "USD"
}
Title Titre facultatif qui apparaîtra au-dessus du nombre.
Description Description facultative qui apparaîtra sous le nombre en texte plus petit.

Bloc de nombres

Propriété Description

Type

Doit être égal à nombres

Data

La stratégie de données doit produire un entier JSON unique ou un nombre à virgule flottante.


42.0
Decimal Le nombre de décimales à afficher après la virgule. Valeur par défaut 0.
Title Titre facultatif qui apparaîtra au-dessus du nombre.
Description Description facultative qui apparaîtra sous le nombre en texte plus petit.Exemple d'applications de panneau

Champs personnalisés

L'accès aux champs personnalisés d'un objet contextuel suit ce format général :
context.<object>.custom_fields.<field_name>

<field_name> est le Nom de champ invite lors de la création d'un champ personnalisé :

cf_champs.png

Puisque nous examinons l'objet Fournisseur et que nous avons un champ, Numéro de téléphone, vous pouvez le référencer comme suit :
context.supplier.custom_fields.phone_number

Emplacement Accesseur de champ personnalisé
contrats.afficher context.contract.custom_fields.
projets.afficher context.project.custom_fields.
quotes/requests.show context.quote_request.custom_fields.
requisition_headers.modifier context.requisition_header.custom_fields.
fournisseurs.afficher context.supplier.custom_fields.

Les champs personnalisés ne sont pas applicables aux emplacements qui ne font pas référence à un objet spécifique, comme :

  • user.home
  • expenses.index

Détails API

Authentification

Coupa prend en charge les types d’authentification suivants :

Méthode Exemple
Clé API standard

"data": {
		"nyt_data": {
			"uri": "https://api.nytimes.com/svc/search/v2/articlesearch.json?q={context.supplier.name}
						&api-key={properties.api_key}"
		}
	}
Authentification de base

"data": {
		"trip_data": {
			"uri": "https://someurl.net/trips",
			"headers": {"Authorization":"basic YOUR_BASE64_ENCODED_TOKEN_HERE"}
		}
	}
Demande de jeton à durée de vie courte utilisant la demande « before_data »

"before_data": {
		"auth": {
			"method": "post",
			"uri": "https://someurl.com/MYToken",
			"body": "grant_type=password&username={{ properties.username }}&password={{ properties.password }}"
		}
	},
	"data": {
		"risk_data": {
			"uri": "https://someurl.com/MYData?integration_id=%22ID{context.supplier.id}%22",
			"headers": {
				"Authorization": "bearer {{ before_data.auth.access_token }}"
			}
		}
	}

URL API

  • Les URL doivent être HTTPS
  • Les URL doivent être accessibles par les serveurs Coupa (une demande HEAD doit réussir)
  • Les URL doivent être analysées comme modèles liquides valides. Ceci permet d'activer l'interpolation

Détails de demande API

  • Lors de l'interpolation de données dans les URL à l'aide de Liquid, le résultat doit être une URL valide
  • Le code de réponse doit être 200 ou 204
  • Le serveur distant doit répondre dans un délai de 5 secondes
  • Le type de contenu de la réponse doit être application/json ou application/xml

Boutons

Vous pouvez configurer un Bouton de lancement ( launch ) et une Bouton Actualiser ( allow_refresh ) pour vos applications Panel. Bien que la fonctionnalité ressemble à un bloc, techniquement, les boutons ne sont pas des blocs. Vous trouverez des détails sur les boutons dans la Notions de base des applications Panel de cet article. pour plus d'informations.

Contexte d'application Panel

Vous pouvez créer des applications Panel pour les pages suivantes :

  • Page d'accueil : / et /user/home
  • Page Fournisseurs : /suppliers/:id/record
  • Page Contrats : /contracts/show/:id
  • Panier : /requisition_headers/{id}/edit
  • Page d'accueil des projets : projects.show
  • Page Paramètres de l'appel d'offres : quotes/requests.show

Chaque type d'application Panel possède sa propre charge utile de contexte. Vous trouverez ci-dessous les champs qui seront fournis dans la charge utile API Panel Apps, qui sont utilisés comme contexte pour faire correspondre et rechercher des données.

Page Champs disponibles
Toutes les applications du panneau user_instance (i.e. [nom de domaine].coupahost.com) est inclus dans la charge utile.
Page d'accueil id , email , fullname , login , employee_number
Afficher/modifier la facture

invoice_id , invoice_date , invoice_number , supplier_name , supplier_number , supplier_id

Page du fournisseur

id , name , display_name , duns , number , tax_id , website , status

champs_personnalisés : object.supplier.custom_field_values_hash

Page Contrat id , parent_contract_id , name , number , version , supplier_id , start_date , status
Panier La charge utile de l'application Panel du panier contiendra les mêmes champs que la charge utile de l'API d'en-tête de demande
Projets Tous les champs système et personnalisés du projet
Appel d'offres

id , event_name , event_commodity , project_id , supplier_id et tous les champs et balises personnalisés

Exemples d'applications Panel

Recherche d'article dans le New York Times

Cette application ajoute les informations récentes sur le fournisseur du New York Times sur la page du fournisseur. Vous devez obtenir un numéro d'identification Clé API NYT pour que celle-ci fonctionne.

nyt-article-search.png

Il s'agit du code qui pilote l'application.

{
	"properties": {
		"api_key": {
			"type": "string"
		}
	},
	"slot": "suppliers.show",
	"before_data": {},
	"data": {
		"nyt_data": {
			"uri": "https://api.nytimes.com/svc/search/v2/articlesearch.json?q={context.supplier.name}&api-key={properties.api_key}"
		}
	},
	"blocks": [
		{
			"type": "text",
			"data": {
				"type": "jq",
				"jq": "{ \"docs\": .nyt_data | .response | .docs }"
			},
			"text": "![nyt logo](http://www.transervice.com/wp-content/uploads/2018/06/the-new-york-times-4.png){:height=\"100px\"}"
		},
		{
			"type": "text",
			"data": {
				"type": "jq",
				"jq": "{ \"docs\": .nyt_data | .response | .docs }"
			},
			"text": "1. [{{ docs[0].headline.main }}]({{ docs[0].web_url }}) \n2. [{{ docs[1].headline.main }}]({{ docs[1].web_url }})\n3. [{{ docs[2].headline.main }}]({{ docs[2].web_url }})\n4. [{{ docs[3].headline.main }}]({{ docs[2].web_url }})\n5. [{{ docs[2].headline.main }}]({{ docs[4].web_url }})\n"
		}
	]
}

Application Panneau Météo

Cet exemple d'application montre la représentation graphique des aspects de température d'un emplacement. Vous devez obtenir un numéro d'identification Clé API pour que celle-ci fonctionne.

weather-app-example.png

Il s'agit du code qui pilote l'application.

{
	"properties": {},
	"slot": "suppliers.show",
	"data": {
		"chicago_data": {
			"method": "get",
			"uri": "https://api.openweathermap.org/data/2.5/weather?q=Chicago&appid=155057bc8e3dde82a6482e76bddf9c10&units=imperial"
		}
	},
	"blocks": [
		{
			"type": "bar",
			"title": "Here's the weather in Chicago",
			"data": {
				"type": "jq",
				"jq": "[{name: \"Temp\", data: [.chicago_data.main.temp]}, {name: \"Wind Speed\", data: [.chicago_data.wind.speed]}, {name: \"Humidity\", data: [.chicago_data.main.humidity]}]"
			},
			"axes": {
				"xAxis": {
					"labels": {
						"enabled": false
					}
				},
				"yAxis": {
					"title": {
						"text": ""
					},
					"max": 100
				}
			}
		},
		{
			"type": "line",
			"title": "Here's the weather in Chicago",
			"data": {
				"type": "jq",
				"jq": "[{name: \"Minimum, Current, max temp for Chicago\", data: [[.chicago_data.main.temp_min], [.chicago_data.main.temp], [.chicago_data.main.temp_max]] }, {name: \"Fake data not from API\", data: [44, 52, 130, 87, 74, 88] }]"
			},
			"axes": {
				"xAxis": {
					"labels": {
						"enabled": true
					},
					"categories": [
						"Jan",
						"Feb",
						"Mar",
						"Apr",
						"May",
						"June"
					]
				},
				"yAxis": {
					"title": {
						"text": ""
					},
					"max": 200
				}
			}
		}
	]
}

Exemple d'API Panel App

Vous trouverez ci-dessous le descripteur d'application utilisé pour un test automatisé. Nous avons découpé la réponse API pour renvoyer exactement ceci :

[	
	{	
		"data_title":"Title",
		"data_number":42,
		"second_score":88
	}
]
 
{
	# Here is where you'd setup client specific fields. Like login/password. The customer would be prompted to fill in
	# those values once, when activating the application
	"properties": {},
	# This is the page where the app gets displayed. See the "slot" property for possible values.	
	"slot": "suppliers.show",	 
	# Some APIs require a bearer token, or a 2-step process, this is where you handle that.
	"before_data": {}, 
	"data": {
		"coupa_data": {
			# You can add context specific values to this API call, {{context.contract.supplier_name}} for example
			"uri": "http://fake.test", 
			# This works intuitively, just specify your API headers here, Bearer token, params, etc.
			"headers": {} 
		}
	},
	"blocks": [
		{
			"type": "number",
			# This is hard-coded title for this block, cant use api data, or contextual data here	
			"title": "Title for number block",
			# "coupa_data" was the API response above, .[0] returns the stuff in the {}, ".data_number" gets the value, 
			# in this case "42"
			"data": {
				"type": "jq",
				"jq": ".coupa_data | .[0] | .data_number"	
			}
		}, 
			# So this block renders a specially formatted number block, with the number "42" in large bold font, 
			# and a text label/title of "Title for number block"
		{
			# Fields block has some of the strictest requirements for data, It displays all data in key -> value pairs
			"type": "fields",
			"data": {
				"type": "jq",
				"jq": ".coupa_data | .[] | to_entries | map({ label: .key, value: .value })" 
			}
		},
		{
			# For this block, we are just going to pull the hash out from the [] and use the values inside it
			"type": "text",
			"data": {
				"type": "jq",
				"jq": " .coupa_data | .[0]"
			},
			# Text blocks gives you a lot of flexibility for displaying data from the API response in context.
			# The text can be formatted just like markup, so you can create links, tables, render/resize images, etc.	 
			"text": "{{ data_number }}	is the data_number" 
		},
		{
			# Setting up the bar graph is pretty tricky, maybe work with us if you want to go this route.
			# But this example creates a bar graph with values/labels bar sizes based on the values in the API response
			"type": "bar",
			"title": "Bar graph with fake data",
			"data": {
				"type": "jq",
				"jq": "[{name: \"Overall Score\", data: [.coupa_data | .[0].data_number]}, 
								{name: \"Environment score\", data: [.coupa_data | .[0].second_score]}]" 
			},
			"axes": {"xAxis": {"labels": { "enabled": false}}, "yAxis": {"title": { "text": ""}, "max": 100} }
		}
	]
}

Test dans l'instance du partenaire

Pour tester cette fonctionnalité dans Coupa, vous devez disposer de la version R25.0 ou supérieure.  En fin de compte, votre application fera partie du répertoire App et non d'une application Panel personnalisée, mais en utilisant ces étapes, vous pouvez tester vous-même avant que Coupa ajoute officiellement l'application au répertoire App.

  1. Accéder à la configuration
  2. Sous Plateforme, cliquez sur « Applications installées »
  3. Cliquez sur le bouton « Créer », puis sélectionnez « Créer une nouvelle application Panel »
  4. Créer l'application
  5. Ajouter un nom
  6. Dans la section du descripteur, incluez le code indiqué ci-dessus

Une fois terminé, si aucune erreur ne se produit, une application Panel sera affichée sur chaque page Fournisseur.

Une partie ou la totalité de cette page peut avoir été traduite par machine. Toutes nos excuses pour les inexactitudes.

Articles associés


L'API Coupa Core

Notre API RESTful fournit un accès robuste pour lire, modifier ou intégrer vos données à la plate-forme Coupa.

Ressources

Nous avons organisé nos points de terminaison API par type d'objet : Données de référence, données transactionnelles et ressources partagées.

Ressources de données de référence

Les données de référence sont utilisées pour configurer les composants de base de Coupa tels que les utilisateurs, les fournisseurs, les comptes, et plus encore.

Ressources transactionnelles

Au fur et à mesure que les gens utilisent Coupa, des données transactionnelles telles que des demandes, des bons de commande et des factures sont créées.