Riferimento
Proprietà e metodi principali
I membri che utilizzerai più spesso.
Adapter
TsgcHTMLCRUDAdapter è il percorso di scrittura, con sei metodi virtuali: Locate, Read, List, Insert, Update e Delete. TsgcHTMLCRUDAdapter_DataSet pilota il dataset collegato, e SetAdapter passa al componente un adapter tuo e ne assume la proprietà. List risponde con una pagina sotto forma di righe separate da tabulazioni, con la chiave come ultima cella, e restituisce quante righe ha l’intero insieme.
In .NET
Non esiste TDataSet, quindi la versione .NET include tre adapter: TsgcHTMLCRUDAdapter_DataTable su un DataTable, TsgcHTMLCRUDAdapter_List<T> su qualsiasi IList<T> e TsgcHTMLCRUDAdapter_DbConnection su una tabella dietro una DbConnection, con ogni valore inviato come parametro. Dichiara le Columns: non vengono lette dalla tabella.
La pagina
ShowList(search, page), ShowNew, ShowEdit(key), Save(key, values, html) e DeleteRecord(key, html) rispondono ciascuno con il markup che l’host inserisce nella pagina. ProcessAction instrada verso di essi le azioni inviate crudList, crudNew, crudEdit, crudSave e crudDelete, e risponde False per qualsiasi altra azione, così una pagina può contenere più componenti.
Opzioni della pagina
Actions è un insieme di caCreate, caEdit, caDelete, caView e caExport, e una pagina con il solo caView è un report. EditMode è cemModal oppure cemPage, ConfirmDelete chiede conferma prima di un’eliminazione, PageSize vale 25 per impostazione predefinita e non supera mai 500, e SearchFields elenca i campi in cui cerca la casella di ricerca, separati da punti e virgola.
Colonne
Un TsgcHTMLCRUDColumn ha FieldName, Caption, Visible, ReadOnly, Required, InList, InForm, Width e MaxLength. Se non ne dichiari nessuna, il componente le legge dal dataset attivo: la didascalia da DisplayLabel, il flag di obbligatorietà e la lunghezza, e la chiave viene mostrata ma mai modificata. LoadColumnsFromDataSet lo fa su richiesta.
Validazione
Vengono rifiutati per primi una colonna obbligatoria vuota e un valore più lungo di MaxLength. Poi viene interpellato OnValidate: aggiungi una riga per ogni problema a aErrors e non viene scritto nulla, il modulo torna indietro con i messaggi. OnApplyUpdates viene eseguito prima dell’adapter e, impostando aHandled, la scrittura diventa tua. OnApplied scatta dopo che una scrittura è andata a buon fine, per registrarla nel log o aggiornare chiunque altro stia guardando l’elenco.
Locking ottimistico
Indica un campo di versione in VersionField. Un salvataggio confronta ciò che invia il browser con ciò che è memorizzato e rifiuta la scrittura se nel frattempo qualcun altro ha modificato il record, così la seconda persona che preme Salva non sovrascrive la prima.
Master e dettaglio
Details contiene gli elenchi figli di un record. Ogni elemento nomina un altro TsgcHTMLComponent_CRUD in CRUD, il campo del figlio che contiene la chiave master in MasterField e una Caption. Vengono renderizzati sotto il modulo mentre un record è in modifica. SetMaster(field, value) restringe un elenco a un solo record master.
Esportazione CSV
Con caExport la barra degli strumenti mostra un link Esporta verso RoutePath('export.csv'). Rispondi a quella route con GetExportCSV(search): esporta la ricerca che l’elenco sta mostrando, fino a 500 righe, non l’intera tabella. Ogni valore è racchiuso tra virgolette, così una virgola o un’interruzione di riga non può rompere il file.
La chiave viene localizzata per prima
Ogni chiave arriva dal browser. ShowEdit, Save e DeleteRecord chiedono all’adapter di eseguire Locate su di essa prima che qualcosa venga modificato o eliminato, così cambiare un numero in un URL non raggiunge mai un altro record. Anche Actions viene applicato: una pagina senza caDelete rifiuta un’eliminazione anche quando un modulo contraffatto ne invia una. Celle e campi vengono sottoposti a escape, così un record che contiene markup viene mostrato come testo.
Socket e HTTP
La casella di ricerca, Nuovo, Modifica, Elimina e il modulo sono moduli contrassegnati con data-sgc-ws-send, ciascuno con i campi nascosti action, crud e key, e l’host li passa a ProcessAction. Un messaggio sul socket non porta con sé alcun percorso e non raggiunge mai il router, quindi autorizzalo tu stesso. In Delphi, TsgcHTMX_Engine_Server.MessageSession risponde con la sessione associata ai cookie dell’handshake, oppure con nil. Per HTTP, RoutePath costruisce i percorsi che un host dichiara sul router dell’engine: /customers, /customers/new, /customers/{id}/edit, /customers/save e /customers/{id}/delete.
Modi per iniziare
Crealo nel codice, come sopra, oppure usa la procedura guidata nell’IDE di Delphi: Tools › New sgcHTML CRUD page elenca i dataset del form aperto, legge i campi di quello che scegli e aggiunge al form un componente già configurato, con le due righe di collegamento negli appunti. Richiede Delphi 10.4 o successivo. Fuori dall’IDE, lo strumento a riga di comando sgcHTMLGen scrive il sorgente della pagina in Object Pascal o in C#, a partire dalla tabella, dal prefisso di route e dai campi, ciascuno scritto come name:flag, ad esempio ID:key oppure NAME:req:60.
Disponibilità
Parte di sgcHTML, che si vende indipendentemente da sgcWebSockets. L’unit compila dove è definito SGC_HTML, cosa che sgcVer.inc fa per il pack HTML su tutte le piattaforme tranne Android e iOS. La demo è Demos\60.HTML\01.RunTime\02.AdminCRUD, dove l’area clienti è costruita su questo componente accanto alla pagina scritta a mano che ha sostituito.