Référence
Propriétés & méthodes clés
Les membres que vous utilisez le plus souvent.
Adaptateur
TsgcHTMLCRUDAdapter est le chemin d'écriture, avec six méthodes virtuelles : Locate, Read, List, Insert, Update et Delete. TsgcHTMLCRUDAdapter_DataSet pilote le jeu de données lié, et SetAdapter donne au composant votre propre adaptateur et en prend possession. List renvoie une page sous forme de lignes séparées par des tabulations, la clé dans la dernière cellule, et retourne le nombre de lignes de l'ensemble complet.
En .NET
Il n'existe pas de TDataSet, la version .NET fournit donc trois adaptateurs : TsgcHTMLCRUDAdapter_DataTable sur un DataTable, TsgcHTMLCRUDAdapter_List<T> sur n'importe quelle IList<T> et TsgcHTMLCRUDAdapter_DbConnection sur une table derrière une DbConnection, chaque valeur étant envoyée comme paramètre. Déclarez les Columns : elles ne sont pas lues depuis la table.
La page
ShowList(search, page), ShowNew, ShowEdit(key), Save(key, values, html) et DeleteRecord(key, html) renvoient chacun le balisage que l'hôte insère dans la page. ProcessAction aiguille vers elles les actions crudList, crudNew, crudEdit, crudSave et crudDelete envoyées par la page, et répond False pour toute autre action, afin qu'une page puisse contenir plusieurs composants.
Options de la page
Actions est un ensemble de caCreate, caEdit, caDelete, caView et caExport, et une page avec seulement caView est un rapport. EditMode vaut cemModal ou cemPage, ConfirmDelete demande confirmation avant une suppression, PageSize vaut 25 par défaut et ne dépasse jamais 500, et SearchFields liste les champs dans lesquels la zone de recherche cherche, séparés par des points-virgules.
Colonnes
Une colonne TsgcHTMLCRUDColumn possède FieldName, Caption, Visible, ReadOnly, Required, InList, InForm, Width et MaxLength. Si aucune n'est déclarée, le composant les lit depuis le jeu de données actif : le libellé depuis DisplayLabel, l'indicateur « obligatoire » et la longueur, et la clé est affichée mais jamais modifiée. LoadColumnsFromDataSet le fait à la demande.
Validation
Une colonne obligatoire vide et une valeur plus longue que MaxLength sont refusées en premier. Ensuite, OnValidate est appelé : ajoutez une ligne par problème à aErrors et rien n'est écrit, le formulaire revient avec les messages. OnApplyUpdates s'exécute avant l'adaptateur, et si vous affectez aHandled, l'écriture est à vous. OnApplied se déclenche après qu'une écriture a abouti, pour la journaliser ou rafraîchir les autres utilisateurs qui consultent la liste.
Verrouillage optimiste
Nommez un champ de version dans VersionField. Une sauvegarde compare ce que le navigateur envoie avec ce qui est stocké, et refuse l'écriture lorsque quelqu'un d'autre a modifié l'enregistrement entre-temps, de sorte que la deuxième personne qui clique sur Enregistrer n'écrase pas la première.
Maître et détail
Details contient les listes filles d'un enregistrement. Chaque élément nomme un autre TsgcHTMLComponent_CRUD dans CRUD, le champ de la table fille qui contient la clé maître dans MasterField, et un Caption. Elles s'affichent sous le formulaire pendant qu'un enregistrement est en cours de modification. SetMaster(field, value) restreint une liste à un seul enregistrement maître.
Export CSV
Avec caExport, la barre d'outils affiche un lien Exporter vers RoutePath('export.csv'). Répondez à cette route avec GetExportCSV(search) : elle exporte la recherche affichée par la liste, jusqu'à 500 lignes, et non la table entière. Chaque valeur est entre guillemets, de sorte qu'une virgule ou un saut de ligne ne peut pas casser le fichier.
La clé est d'abord localisée
Chaque clé arrive du navigateur. ShowEdit, Save et DeleteRecord demandent à l'adaptateur de la localiser avec Locate avant toute modification ou suppression, de sorte que changer un numéro dans une URL n'atteint jamais un autre enregistrement. Actions est également appliqué : une page sans caDelete refuse une suppression même si un formulaire falsifié en envoie une. Les cellules et les champs sont échappés, de sorte qu'un enregistrement contenant du balisage est affiché comme du texte.
Socket et HTTP
La zone de recherche, Nouveau, Modifier, Supprimer et le formulaire sont des formulaires marqués data-sgc-ws-send, chacun avec des champs cachés action, crud et key, et l'hôte les remet à ProcessAction. Un message envoyé par le socket ne porte aucun chemin et n'atteint jamais le routeur, autorisez-le donc vous-même. En Delphi, TsgcHTMX_Engine_Server.MessageSession renvoie la session associée aux cookies du handshake, ou nil. Pour HTTP, RoutePath construit les chemins qu'un hôte déclare sur le routeur du moteur : /customers, /customers/new, /customers/{id}/edit, /customers/save et /customers/{id}/delete.
Façons de démarrer
Créez-le dans le code, comme ci-dessus, ou utilisez l'assistant de l'IDE Delphi : Tools › New sgcHTML CRUD page liste les jeux de données du formulaire ouvert, lit les champs de celui que vous choisissez et ajoute un composant configuré au formulaire, avec les deux lignes de câblage dans le presse-papiers. Il requiert Delphi 10.4 ou une version ultérieure. En dehors de l'IDE, l'outil en ligne de commande sgcHTMLGen écrit le code source de la page en Object Pascal ou en C#, à partir de la table, du préfixe de route et des champs, chacun écrit sous la forme name:flag, par exemple ID:key ou NAME:req:60.
Disponibilité
Fait partie de sgcHTML, qui est vendu indépendamment de sgcWebSockets. L'unité se compile là où SGC_HTML est défini, ce que sgcVer.inc fait pour le pack HTML sur toutes les plateformes sauf Android et iOS. La démo est Demos\60.HTML\01.RunTime\02.AdminCRUD, où l'espace clients est construit sur ce composant, à côté de la page écrite à la main qu'il a remplacée.