Les écrans
Les APIs de table qui servent les données et les quatre écrans de l'app — tableau de bord, liste de comptes, fiche de compte et tableau des opportunités.
C'est l'étape la plus longue du guide, et celle qui donne un visage à l'app. À la fin, vous avez quatre écrans dessinés et fonctionnels sur les vraies données du modèle : un Início avec des indicateurs et un graphique, une liste de Contas, une Ficha de Conta qui enregistre, et un tableau d'Oportunidades avec des cartes que l'on fait glisser.
Avant les écrans, cependant, il y a une courte étape qui les rend possibles.
D'abord les APIs de table
Un écran ne parle pas à la base de données. Il parle à des datastores — les conteneurs de données de chaque écran — et les datastores lisent et écrivent à travers les APIs de table de l'app. Une API de table pointe vers une entité du modèle et génère toute seule les opérations de lecture et d'écriture.
Nous allons en créer trois, une par entité :
- Choisissez le panneau Code dans la barre latérale.
- Sur la ligne APIs, cliquez sur le + (Nouvelle API).
- Dans Nom, écrivez
contas. Le nom est la base des opérations (getContas,addContas,updateContas,deleteContas) — ne lui mettez donc pas de préfixes commegetoulistar. - Cliquez sur Créer une API. Le constructeur s'ouvre sur l'onglet Construire.
- Dans la section Pipeline, choisissez le bloc Table.
- Dans le champ Table, choisissez
Dados CRM ▸ Contas. - Dans Actions exposées, laissez Select, Insert, Update et Delete cochés — le CRM a besoin des quatre.
- Laissez Accès public (sans session) entièrement désactivé : cette app est faite pour des gens qui ont ouvert une session.
- Dans Champs inclus, vérifiez que les champs que les écrans vont utiliser sont cochés. Pour les comptes, ce sont tous.
- Activez l'interrupteur Publiée et cliquez sur Enregistrer.

Répétez pour les deux autres :
| API | Entité | Actions | Notes |
|---|---|---|---|
contas |
Contas | Select, Insert, Update, Delete | Tous les champs. |
contactos |
Contactos | Select, Insert, Update, Delete | Inclut le navigator conta (seulement le champ nome). |
oportunidades |
Oportunidades | Select, Insert, Update, Delete | Inclut le navigator conta (seulement le champ nome). |
Les Navigators sont ce qui permet d'afficher le nom du compte à côté d'une
opportunité sans écrire une ligne de SQL : cochez-les dans la liste des champs
inclus, et le champ conta.nome devient disponible dans les écrans.
Nota
Une API en brouillon n'est visible que pour ceux qui construisent. Si vous oubliez de la publier, les datastores des écrans ne la trouvent pas — c'est la cause numéro un du « l'écran ne charge rien ». Le chapitre Le constructeur d'APIs traite des APIs en profondeur.
Créer les quatre écrans
Les écrans vivent dans le panneau UI, dans la section Écrans.
- Choisissez le panneau UI dans la barre latérale.
- Sur la ligne Écrans, cliquez sur le bouton Nouvel écran.
- Écrivez le nom et confirmez avec Créer. L'écran s'ouvre aussitôt dans l'espace de travail.

Créez les quatre d'un coup, dans cet ordre :
| Nom de l'écran | Route | Ce que ce sera |
|---|---|---|
Início |
/inicio |
Le tableau de bord commercial, avec indicateurs et graphique. |
Contas |
/contas |
La liste des comptes. |
Ficha de Conta |
/ficha-de-conta |
Le formulaire d'un compte. |
Oportunidades |
/oportunidades |
Le tableau kanban. |
La Route est dérivée du nom et se voit (et se modifie) dans l'inspecteur, quand aucun widget n'est sélectionné. Laissez-les telles quelles — le guide s'y réfère plus loin.
Dica
Travaillez toujours sur l'appareil Web (1280px) tout au long de ce guide. Les deux autres — Tablette (768px) et Mobile (390px) — ont leur propre design, indépendant ; on s'en occupe ensuite, quand le design web sera stable.
L'écran Início — le tableau de bord commercial
Ouvrez l'écran Início. Le design a quatre pièces : un titre, une bande d'indicateurs, un graphique et une table.
Le titre
- Faites glisser un Libellé de la palette vers le haut du canvas.
- Dans la catégorie Contenu de l'inspecteur, écrivez le texte
Painel comercial. - Dans la catégorie Apparence, augmentez la Taille du texte — c'est le titre de la page.
La bande d'indicateurs
Quatre nombres côte à côte se font avec un widget KPI à quatre indicateurs, pas avec quatre widgets : l'alignement et l'espacement sont garantis.
- Faites glisser un KPI sous le titre et étirez-le sur toute la largeur.
- Dans la catégorie Données, la section Indicateurs commence avec un seul. Utilisez Ajouter un indicateur jusqu'à en avoir quatre.
- Chaque indicateur a un Libellé, une icône, un Jeu de données dédié (son datastore) et une valeur avec une Agrégation.
Configurez-les ainsi :
| Libellé | Datastore (API de table) | Filtre | Valeur |
|---|---|---|---|
Contas ativas |
contas |
— | Comptage de id |
Oportunidades abertas |
oportunidades |
fase ≠ fechada_ganha et fase ≠ fechada_perdida |
Comptage de id |
Valor em pipeline |
oportunidades |
le même filtre | Somme de valor |
Fechado este trimestre |
oportunidades |
fase = fechada_ganha |
Somme de valor |
Sur les deux indicateurs monétaires, ouvrez le Format et choisissez la devise EUR avec zéro décimale — 475 850 se lit mieux que 475850.
Le graphique
- Faites glisser un Graphique sur la moitié gauche, sous le KPI.
- Dans la catégorie Données, créez le datastore de liste sur l'API
oportunidades. - Dans Type de graphique, choisissez Barres.
- Dans Champ de catégorie (axe X / parts), choisissez
fase. - Dans Champs de valeur, ajoutez
valor. - Dans la catégorie Apparence, activez Afficher le titre et écrivez
Pipeline por fase.
La table des prochaines clôtures
- Faites glisser une Table sur la moitié droite, à côté du graphique.
- Dans la catégorie Données, créez le datastore de liste sur
oportunidades, avec le filtre des phases ouvertes (le même que celui des indicateurs), trié pardata_fechocroissant et Par page à 8. - Dans la catégorie Données, section Colonnes, définissez quatre colonnes :
| Champ | En-tête |
|---|---|
titulo |
Oportunidade |
conta.nome |
Conta |
valor |
Valor (€) |
data_fecho |
Fecho |
- Activez Afficher le titre et écrivez
Próximos fechos.

L'écran Contas — la liste
Ouvrez l'écran Contas. Ce sont trois widgets.
- Un Libellé en haut, avec le texte
Contas. - Un Bouton dans le coin supérieur droit : dans la catégorie
Contenu, texte
Nova contaet icôneplus. - Une Table occupant le reste de l'écran. Dans la catégorie Données,
créez le datastore de liste sur l'API
contas, trié parnomecroissant, et définissez les colonnes :
| Champ | En-tête |
|---|---|
nome |
Nome |
sector |
Sector |
cidade |
Cidade |
telefone |
Telefone |
email |
Email |
estado |
Estado |
Il reste à brancher les deux gestes qui font que cette liste sert à quelque chose. Tous deux s'écrivent dans la catégorie Événements, en TypeScript :
Sur le Bouton, dans l'événement onClick — ouvrir la fiche vierge, pour
créer :
keplin.nav.go("/ficha-de-conta");
Sur la Table, dans l'événement onRowClick — ouvrir la fiche de la ligne
cliquée :
keplin.nav.go("/ficha-de-conta/" + keplin.event.row.id);

Nota
keplin.event.row est la ligne sur laquelle l'utilisateur a cliqué, avec
tous les champs du datastore. C'est pour cela que row.id suffit à monter
l'adresse de la fiche.
L'écran Ficha de Conta — le formulaire
C'est l'écran qui a le plus de pièces, et celui qui montre le mieux comment les données fonctionnent. Ouvrez l'écran Ficha de Conta.
Le paramètre de la route
- Cliquez sur une zone vide du canvas — l'inspecteur affiche alors l'écran.
- Dans la section Paramètres de route, cliquez sur
+ ajouter un paramètre et écrivez
id. - Laissez Obligatoire désactivé. C'est délibéré : sans
idl'écran s'ouvre vierge, et c'est ainsi que le même formulaire sert à créer un nouveau compte.
La Route devient /ficha-de-conta/:id.

Les deux datastores de l'écran
Toujours avec l'écran sélectionné, dans la catégorie Données :
- Cliquez sur + enregistrement. Cliquez sur le datastore créé pour ouvrir la fenêtre Configurer le datastore.
- Dans Nom du datastore, écrivez
conta. - Dans API de table, choisissez
contas. - Dans Quel enregistrement charger (clé), cliquez sur
+ champ de la clé et montez la condition : champ
id, opérateureq, valeur Param ▸id. - Laissez Charger automatiquement activé et fermez avec Terminé.

Maintenant le second, pour les contacts du compte :
- Cliquez sur + liste et ouvrez-le.
- Nom
contactosConta, API de tablecontactos. - Dans Filtres (where), ajoutez : champ
conta_id, opérateureq, valeur Param ▸id. - Triez par
nomecroissant.
Dica
Sans conditions dans la clé, un datastore d'enregistrement charge un
nouvel enregistrement, vide. C'est ce comportement qui dispense d'un
second écran pour « créer un compte » : ouvert sans id, le formulaire
commence vierge et l'enregistrement fait une insertion.
Le formulaire
- Faites glisser un Panneau vers la gauche du canvas. Dans la catégorie
Apparence, activez Afficher le titre et écrivez
Dados da empresa. - Faites glisser les Champs de texte à l'intérieur du panneau — lâcher un
widget dans un panneau en fait son enfant. Pour chacun, dans la catégorie
Contenu écrivez le libellé et, dans la catégorie Données, section
Liaison de données, choisissez le datastore
contaet le champ :
| Libellé | Champ | Obligatoire |
|---|---|---|
Nome |
nome |
oui |
NIF |
nif |
non |
Sector |
sector |
non |
Cidade |
cidade |
non |
Telefone |
telefone |
non |
Email |
email |
non |
- Pour l'état, utilisez une Liste plutôt qu'un champ de texte : libellé
Estado, relié àconta▸estado, Obligatoire activé, et options statiques :
| Valeur | Libellé |
|---|---|
ativo |
Ativo |
prospeto |
Prospeto |
inativo |
Inativo |
- Faites glisser une Table à droite du panneau, reliée au datastore
contactosConta, avec les colonnesnome(Nome),cargo(Cargo) ettelefone(Telefone), et le titreContactos desta conta.
Enregistrer et revenir
Deux Boutons sous le panneau, avec leur événement onClick respectif :
Enregistrer (icône save) :
const ok = await keplin.data.store("conta").save();
if (ok) {
keplin.ui.toast("Compte enregistré");
keplin.nav.go("/contas");
}
Revenir (icône arrow-left) :
keplin.nav.go("/contas");
save() valide d'abord — obligatoires et règles — et n'enregistre que si tout
passe ; il renvoie true quand l'enregistrement a eu lieu. C'est pour cela que
l'avertissement et la navigation sont à l'intérieur du if.
L'écran Oportunidades — le tableau kanban
Ouvrez l'écran Oportunidades.
- Un Libellé en haut, avec le texte
Oportunidades. - Faites glisser un Kanban en dessous, sur toute la largeur.
- Dans la catégorie Données, créez le datastore de liste sur l'API
oportunidades(sans filtre — le tableau montre tout), avec Par page à - Dans Champ d'état (colonne), choisissez
fase. C'est ce champ qui dit dans quelle colonne vit chaque carte — et c'est lui qui est écrit quand quelqu'un fait glisser une carte. - Dans Source des colonnes, choisissez Statique et utilisez + ajouter une colonne six fois :
| Valeur | Libellé | Couleur |
|---|---|---|
prospecao |
Prospeção |
gris |
qualificacao |
Qualificação |
bleu |
proposta |
Proposta |
ambre |
negociacao |
Negociação |
violet |
fechada_ganha |
Ganha |
vert |
fechada_perdida |
Perdida |
rouge |
- Activez Autoriser le glisser-déposer des cartes et Nombre de cartes ; laissez Colonne pour les non catégorisés désactivée.
- Dans Template de la carte, dites ce que chaque carte affiche :
| Champ | Rôle |
|---|---|
titulo |
Titre |
conta.nome |
Légende |
valor |
Valeur |
- Sous le tableau, ajoutez une Table avec le titre
Todas as oportunidades, reliée à un datastore de liste suroportunidades, avec les colonnestitulo,conta.nome,valor,fase,data_fechoetresponsavel.

Nota
Faire glisser une carte d'une colonne à l'autre enregistre la nouvelle
valeur de fase dans l'enregistrement, à travers l'API de table — le
glissement ne fonctionne donc que si le datastore a une clé primaire et si
l'API a l'action Update active.
Voir le résultat
Il n'y a pas de bouton d'enregistrement dans les écrans : les modifications s'enregistrent toutes seules, et le coin supérieur droit dit où elles en sont (Enregistrement…, Enregistré).
Pour voir l'écran pour de vrai, cliquez sur Prévisualiser : la plateforme enregistre ce qui est en attente et ouvre l'écran dans l'app réelle, dans un nouvel onglet du navigateur. Vous passez par la connexion comme n'importe quel utilisateur — les comptes qui entrent dans l'app se créent à l'étape Publier et utiliser, et d'ici là vous pouvez utiliser celui qui existe déjà.
Pourquoi pas… ?
- Pourquoi mon API n'apparaît-elle pas dans la liste des datastores ? L'API est en brouillon. Ouvrez-la et activez Publiée.
- Pourquoi une fiche vide s'ouvre-t-elle toujours ? Le datastore
d'enregistrement n'a pas de conditions dans
Quel enregistrement charger (clé), ou le paramètre
idn'arrive pas par la route. Vérifiez que la route est/ficha-de-conta/:id. - Pourquoi je ne vois pas la colonne
conta.nome? Le navigator n'est pas inclus dans les Champs inclus de l'API de table — ou le datastore a été configuré avant que vous ne le cochiez. Rouvrez Configurer le datastore et choisissez à nouveau l'API pour rafraîchir le portrait des champs. - Pourquoi le kanban ne laisse-t-il pas glisser ? Il manque la clé primaire dans le datastore, ou l'action Update dans l'API de table.
- Pourquoi le graphique est-il vide ? Le Champ de catégorie ou les Champs de valeur ne sont pas choisis — ou le filtre du datastore ne laisse passer aucune ligne.
Les écrans existent, mais il n'y a pas encore moyen de sauter de l'un à l'autre. Prochaine étape : navigation et thème.