logo concrete datastore

Tutoriel

Convertir un fichier Excel en interface web

Dans ce tutoriel nous allons voir comment utiliser les données d’un fichier Excel dans une application Vue JS permettant de rechercher des villes par leur nom ou leur code postal en utilisant Concrete-Manager et Axios .

Prérequis

Pour ce tutoriel, il est nécessaire d'avoir une connaissance de base de Concrete Datastore, rendez-vous sur "Prise en main Concrete Datastore”.

Voici à quoi ressemblera notre application une fois terminée

capture d'ecran
Résultats lors d'une recherche sur le nom de la ville
capture d'ecran
Résultats lors d'une recherche sur le code postal

1 - Création de l'application et de la modélisation

Une fois connecté à la plateforme Concrete Manager vous devez "créer votre application". Vous pouvez alors renseigner le nom de votre application et choisir une couleur ou un logo .
Sur l'onglet "modélisation", "Créer un nouveau modèle" puis ajouter une propriété name et une propriété zip_code de type char au modèle

capture d'ecran
Schéma avec le modèle ayant été ajouté
capture d'ecran
Ajout de la propriété name et zipcode

3 - Gérer les permissions

Pour notre application vous devez définir l'action "Récupérer" pour le modèle City sur "anonymous" afin qu'un utilisateur non authentifié puisse afficher les résultats de votre future requête.

Plus d'informations sur les permissions lien vers la page

4 - Lancement de votre instance et accès à la base de données

Créer une nouvelle instance en choisissant la version de votre modélisation.
Une fois l'instance créée, vérifiez les informations dans la modale qui s'ouvre avant de confirmer le déploiement.

Ouvrez l'interface d'administration de votre base de données.

5 - Effectuer une requête avec axios

Dans le contexte de notre application nous avons un élément input avec un v-model sur une data searchTerms ainsi qu'un bouton qui appelle la méthode sendSearchRequest.


    <template>
        <div class="city-search_card">
            <h1 class="city-search_title">City Finder</h1>
            <input
                class="city-search_input"
                type="text"
                name="city-search"
                placeholder="Recherchez une ville"
                autocomplete="off"
                v-model="searchTerms"
            >
            <button
                class="city-search_btn"
                @click="sendSearchRequest(searchTerms)"
            >
                <Rechercher>
            </button>
            <div v-if="results.length > 0">
                <p class="city-search_result_title">Résulats de la recherche</p>
                <ul>
                    <li
                        v-for="(result, index) in results"
                        :key="index"
                    >
                        <span class="city-search_results">{{result.name}} </span>
                        <span class="city-search_results">{{result.zip_code}}</span>
                    </li>
                </ul>
            </div>
        </div>
    </template>

        

        import axios from 'axios';

        export default {
            name: 'CitySearch',
            data() {
                return {
                    searchTerms: '',
                    results: [],
                }
            },
            methods: {
            }
        }

        

Une fois qu'Axios a été importé, le but sera d'effectuer une requête sur l'url de l'API de l'instance pour récupérer les villes correspondant à la recherche (searchTerms). Vous pouvez retrouver cette url dans "l'onglet instance" de votre application sur Concrete Manager.

Pour récupérer la liste des villes correspondant au terme il faut construire l'URL qui sera passé au GET d'Axios comme ceci :

  1. L'url de l'instance : https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/
  2. Le nom du modèle : city
  3. Le paramètre passé à la méthode SearchTerms : ?search=${userInput}

L'url finale qu'on utilisera dans la méthode sendSearchRequest comme celle-ci :
https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city?search=${userInput}


sendSearchRequest (userInput) {
axios.get(`https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city?search=${userInput}`)
    .then(response => {
        console.log(response)
    })
}

                            

L'objet response affiché par le console.log() aura cette forme et les résultats attendus se trouvent dans la clé data :

{
"data": {
        "objects_count": 2,
        "next": null,
        "previous": null,
        "results": [
            {
                "name": "ARS SUR FORMANS",
                "zip_code": "01480",
                "uid": "1f67cb67-f7c3-422b-98fb-96aba246992e",
                "modification_date": "2022-01-21T14:54:15Z",
                "creation_date": "2022-01-21T14:54:15Z",
                "public": true,
                "url": "https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city/1f67cb67-f7c3-422b-98fb-96aba246992e/",
                "verbose_name": "ARS SUR FORMANS",
                "created_by": "518322e4-2a11-469d-9ee9-ee41ef021ff5",
                "can_admin_users": [],
                "can_view_users": [],
                "can_admin_groups": [],
                "can_view_groups": [],
                "scopes": null
            },
            {
                "name": "APREMONT",
                "zip_code": "01100",
                "uid": "fa7d6089-81af-4f67-bc97-7785cf4dcdba",
                "modification_date": "2022-01-21T14:53:58Z",
                "creation_date": "2022-01-21T14:53:58Z",
                "public": true,
                "url": "https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city/fa7d6089-81af-4f67-bc97-7785cf4dcdba/",
                "verbose_name": "APREMONT",
                "created_by": "518322e4-2a11-469d-9ee9-ee41ef021ff5",
                "can_admin_users": [],
                "can_view_users": [],
                "can_admin_groups": [],
                "can_view_groups": [],
                "scopes": null
            }
        ],
        "objects_count_per_page": 100,
        "num_total_pages": 1,
        "num_current_page": 1,
        "max_allowed_objects_per_page": 100,
        "model_name": "City",
        "model_verbose_name": "City",
        "list_display": [
            "creation_date",
            "modification_date"
        ],
        "list_filter": {
            "name": "char",
            "uid": "Unknow type"
        },
        "total_objects_count": 2,
        "create_url": "https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city/"
    },
    "status": 200,
    "statusText": "OK",
    "headers": {
        "content-language": "fr",
        "content-type": "application/json"
    },
    "config": {
        "transitional": {
            "silentJSONParsing": true,
            "forcedJSONParsing": true,
            "clarifyTimeoutError": false
        },
        "transformRequest": [
            null
        ],
        "transformResponse": [
            null
        ],
        "timeout": 0,
        "xsrfCookieName": "XSRF-TOKEN",
        "xsrfHeaderName": "X-XSRF-TOKEN",
        "maxContentLength": -1,
        "maxBodyLength": -1,
        "headers": {
            "Accept": "application/json, text/plain, /"
        },
        "method": "get",
        "url": "https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city?search=a"
    },
    "request": {}
}
                            

6 - Récupérer et afficher les résultats

chevron icon haut

Dans le ".then()" de notre requête Axios, on utilise la fonction ".map()" sur "response.data.results" pour stocker les résultats dans notre data "this.results`".
La condition sur la div affichera les résultats .Une fois remplis ces derniers s'afficheront dans notre application


sendSearchRequest (userInput) {
    axios.get("https://6dd9b2f3c2c444e3bf48107dee582402.instances.fr1.caas.microservices.rest/api/v1.1/city?search=" + userInput)
    .then(response => {
        this.results = response.data.results.map(result => {
            return result
        });
    })
}


                        
capture d'ecran
Résultats lors d'une recherche sur le nom de la ville
capture d'ecran
Résultats lors d'une recherche sur le code postal

Ne vous arrêtez pas en si bon chemin !

Découvrez d’autres ressources pour optimiser votre utilisation de Concrete Datastore.

image miniature

Débuter avec Concrete Manager

Voir le tutoriel

Remplacer un fichier Excel par une API en moins de 30 minutes

Voir la vidéo
image miniature

Convertir un fichier Excel en interface web

Voir le tutoriel