Referência
Principais propriedades & métodos
Os membros que você usa com mais frequência.
Adaptador
TsgcHTMLCRUDAdapter é o caminho de escrita, com seis métodos virtuais: Locate, Read, List, Insert, Update e Delete. TsgcHTMLCRUDAdapter_DataSet controla o dataset vinculado, e SetAdapter entrega ao componente um adaptador seu e passa a ser o dono dele. List devolve uma página como linhas separadas por tabulação, com a chave na última célula, e retorna quantas linhas o conjunto inteiro tem.
No .NET
Não existe TDataSet, então a versão .NET traz três adaptadores: TsgcHTMLCRUDAdapter_DataTable sobre um DataTable, TsgcHTMLCRUDAdapter_List<T> sobre qualquer IList<T> e TsgcHTMLCRUDAdapter_DbConnection sobre uma tabela atrás de um DbConnection, com todo valor enviado como parâmetro. Declare as Columns: elas não são lidas da tabela.
A página
ShowList(search, page), ShowNew, ShowEdit(key), Save(key, values, html) e DeleteRecord(key, html) devolvem, cada um, o markup que o host insere na página. ProcessAction encaminha para eles as ações crudList, crudNew, crudEdit, crudSave e crudDelete recebidas no post, e devolve False para qualquer outra ação, de modo que uma página possa conter vários componentes.
Opções da página
Actions é um conjunto de caCreate, caEdit, caDelete, caView e caExport, e uma página só com caView é um relatório. EditMode é cemModal ou cemPage, ConfirmDelete pergunta antes de uma exclusão, PageSize tem 25 como padrão e nunca passa de 500, e SearchFields lista os campos em que a caixa de busca procura, separados por ponto e vírgula.
Colunas
Um TsgcHTMLCRUDColumn tem FieldName, Caption, Visible, ReadOnly, Required, InList, InForm, Width e MaxLength. Sem nenhuma declarada, o componente as lê do dataset ativo: o título a partir de DisplayLabel, o indicador de obrigatório e o tamanho, e a chave é exibida, mas nunca editada. LoadColumnsFromDataSet faz isso sob demanda.
Validação
Uma coluna obrigatória vazia e um valor mais longo que MaxLength são recusados primeiro. Depois OnValidate é consultado: adicione uma linha por problema a aErrors e nada será gravado; o formulário volta com as mensagens. OnApplyUpdates executa antes do adaptador, e definir aHandled torna a gravação responsabilidade sua. OnApplied dispara depois que uma gravação foi concluída, para registrá-la em log ou atualizar quem mais estiver olhando a lista.
Bloqueio otimista
Informe um campo de versão em VersionField. Um salvamento compara o que o navegador envia com o que está armazenado e recusa a gravação quando outra pessoa alterou o registro nesse intervalo, de modo que a segunda pessoa a pressionar Save não sobrescreve a primeira.
Mestre e detalhe
Details guarda as listas filhas de um registro. Cada item nomeia outro TsgcHTMLComponent_CRUD em CRUD, o campo do filho que guarda a chave do mestre em MasterField e uma Caption. Elas são renderizadas abaixo do formulário enquanto um registro está sendo editado. SetMaster(field, value) restringe uma lista a um registro mestre.
Exportação CSV
Com caExport, a barra de ferramentas mostra um link Export para RoutePath('export.csv'). Responda a essa rota com GetExportCSV(search): ele exporta a busca que a lista está mostrando, até 500 linhas, e não a tabela inteira. Todo valor vai entre aspas, de modo que uma vírgula ou uma quebra de linha não consegue quebrar o arquivo.
A chave é localizada primeiro
Toda chave chega do navegador. ShowEdit, Save e DeleteRecord pedem ao adaptador que a localize com Locate antes de qualquer edição ou exclusão, então mudar um número em uma URL nunca alcança outro registro. Actions também é imposto: uma página sem caDelete recusa uma exclusão mesmo quando um formulário forjado a envia. Células e campos são escapados, então um registro que contém markup é exibido como texto.
Socket e HTTP
A caixa de busca, New, Edit, Delete e o formulário são formulários marcados com data-sgc-ws-send, cada um com os campos ocultos action, crud e key, e o host os entrega a ProcessAction. Uma mensagem pelo socket não carrega caminho e nunca chega ao roteador, então autorize-a você mesmo. No Delphi, TsgcHTMX_Engine_Server.MessageSession devolve a sessão por trás dos cookies do handshake, ou nil. Para HTTP, RoutePath monta os caminhos que um host declara no roteador do engine: /customers, /customers/new, /customers/{id}/edit, /customers/save e /customers/{id}/delete.
Crie-o em código, como acima, ou use o assistente da IDE do Delphi: Tools › New sgcHTML CRUD page lista os datasets do formulário aberto, lê os campos do que você escolher e adiciona ao formulário um componente configurado, com as duas linhas de ligação na área de transferência. Exige o Delphi 10.4 ou posterior. Fora da IDE, a ferramenta de linha de comando sgcHTMLGen grava o código-fonte da página em Object Pascal ou em C#, a partir da tabela, do prefixo de rota e dos campos, cada um escrito como name:flag, por exemplo ID:key ou NAME:req:60.
Disponibilidade
Parte do sgcHTML, que é vendido de forma independente do sgcWebSockets. A unit compila onde SGC_HTML está definido, o que o sgcVer.inc faz para o pacote HTML em todas as plataformas, exceto Android e iOS. A demonstração é Demos\60.HTML\01.RunTime\02.AdminCRUD, onde a área de clientes é construída sobre este componente, ao lado da página escrita à mão que ele substituiu.