CRUD
TsgcHTMLComponent_CRUD: tek bir tablonun listesi, araması, sayfalaması, oluşturma ve düzenleme formu, silme onayı ve yazma yolu, bir TDataSet ya da kendi SQL'iniz üzerinde tek bir bileşen olarak, Delphi, C++ Builder ve .NET'te.
TsgcHTMLComponent_CRUD: tek bir tablonun listesi, araması, sayfalaması, oluşturma ve düzenleme formu, silme onayı ve yazma yolu, bir TDataSet ya da kendi SQL'iniz üzerinde tek bir bileşen olarak, Delphi, C++ Builder ve .NET'te.
Her iş uygulamasının her tablo için yeniden yazdığı sayfa, tek bir bileşen olarak. Ona bir anahtar alan ve bir rota öneki verin, ardından bir TDataSet bağlayın ya da kendi SQL'iniz üzerinde altı yöntemden oluşan bir adaptör verin. ShowList işaretlemeyi döndürür, sayfanın geri gönderdiği ise ProcessAction üzerinden geçer.
TsgcHTMLComponent_CRUD, aynı birimdeki TsgcHTMLCRUDAdapter ve TsgcHTMLCRUDAdapter_DataSet ile birlikte
Arama ve sayfalayıcı içeren liste, oluşturma ve düzenleme formu ve silme onayı
Delphi, C++ Builder, .NET
KeyField ve RoutePrefix değerlerini ayarlayın, etkin bir DataSet bağlayın ve ShowList(search, page) çağırın. Kendi SQL'iniz için bunun yerine bileşene SetAdapter ile bir adaptör verin. Sayfanın geri gönderdiklerini ProcessAction üzerinden yönlendirin.
uses
Classes, sgcHTML_Component_CRUD;
var
oCRUD: TsgcHTMLComponent_CRUD;
vHTML: string;
begin
oCRUD := TsgcHTMLComponent_CRUD.Create(nil);
try
oCRUD.CRUDID := 'customers';
oCRUD.Title := 'Customers';
oCRUD.RoutePrefix := '/customers';
oCRUD.KeyField := 'ID';
oCRUD.PageSize := 15;
oCRUD.Actions := [caCreate, caEdit, caDelete, caView, caExport];
oCRUD.VersionField := 'UPDATED_AT'; // optimistic locking
oCRUD.OnValidate := CustomersValidate;
// an active dataset: the columns are read off it
oCRUD.DataSet := qryCustomers;
vHTML := oCRUD.ShowList('', 1); // search text, page number
finally
oCRUD.Free;
end;
end;
// The rules that are about your data. Add a line per problem: nothing is
// written and the form comes back with the messages.
procedure TServer.CustomersValidate(Sender: TObject;
aOperation: TsgcHTMLCRUDOperation; const aKey: string;
aValues, aErrors: TStrings);
begin
if Length(Trim(aValues.Values['NAME'])) < 3 then
aErrors.Add('The name needs at least three characters.');
end;
// A message from the browser carries action, crud and key with the form fields
if oCRUD.ProcessAction(vAction, vKey, oFields, vHTML) then
aResponse := vHTML; // the markup to swap into the page
// Or over your own SQL: an adapter of six methods
type
TCustomersAdapter = class(TsgcHTMLCRUDAdapter)
public
function Locate(const aKey: string): Boolean; override;
function Read(const aKey: string; aValues: TStrings): Boolean; override;
function List(const aSearch: string; aPage, aPageSize: Integer;
aRows: TStrings): Integer; override;
function Insert(aValues: TStrings; var aKey: string;
aErrors: TStrings): Boolean; override;
function Update(const aKey: string; aValues, aErrors: TStrings): Boolean;
override;
function Delete(const aKey: string; aErrors: TStrings): Boolean; override;
end;
oCRUD.SetAdapter(TCustomersAdapter.Create(oCRUD)); // the component owns it
// includes: sgcHTML_Component_CRUD.hpp
TsgcHTMLComponent_CRUD *oCRUD = new TsgcHTMLComponent_CRUD(NULL);
try
{
oCRUD->CRUDID = "customers";
oCRUD->Title = "Customers";
oCRUD->RoutePrefix = "/customers";
oCRUD->KeyField = "ID";
oCRUD->PageSize = 15;
oCRUD->Actions = TsgcHTMLCRUDActions() << caCreate << caEdit << caDelete
<< caView << caExport;
oCRUD->VersionField = "UPDATED_AT"; // optimistic locking
oCRUD->OnValidate = CustomersValidate;
// an active dataset: the columns are read off it
oCRUD->DataSet = qryCustomers;
String html = oCRUD->ShowList("", 1); // search text, page number
}
__finally
{
delete oCRUD;
}
// The rules that are about your data. Add a line per problem: nothing is
// written and the form comes back with the messages.
void __fastcall TServer::CustomersValidate(TObject *Sender,
TsgcHTMLCRUDOperation aOperation, const String aKey,
TStrings *aValues, TStrings *aErrors)
{
if (aValues->Values["NAME"].Trim().Length() < 3)
aErrors->Add("The name needs at least three characters.");
}
// A message from the browser carries action, crud and key with the form fields
String html;
if (oCRUD->ProcessAction(action, key, fields, html))
response = html; // the markup to swap into the page
// For your own SQL, derive from TsgcHTMLCRUDAdapter, override its six methods
// (Locate, Read, List, Insert, Update, Delete) and call oCRUD->SetAdapter().
using System.Collections.Generic;
using esegece.sgcWebSockets;
var crud = new TsgcHTMLComponent_CRUD();
crud.CRUDID = "customers";
crud.Title = "Customers";
crud.RoutePrefix = "/customers";
crud.KeyField = "ID";
crud.PageSize = 15;
crud.Actions = TsgcHTMLCRUDActions.caCreate | TsgcHTMLCRUDActions.caEdit
| TsgcHTMLCRUDActions.caDelete | TsgcHTMLCRUDActions.caView
| TsgcHTMLCRUDActions.caExport;
crud.VersionField = "UPDATED_AT"; // optimistic locking
// The key travels with the page: it is in neither the list nor the form
var id = crud.Columns.Add();
id.FieldName = "ID";
id.InList = false;
id.InForm = false;
var name = crud.Columns.Add();
name.FieldName = "NAME";
name.Caption = "Name";
name.Required = true;
name.MaxLength = 120;
// There is no TDataSet: read a DataTable, an IList<T> or a table behind a DbConnection
crud.SetAdapter(new TsgcHTMLCRUDAdapter_DataTable(crud, customersTable));
// The rules that are about your data
crud.OnValidate += (object sender, TsgcHTMLCRUDOperation op, string recordKey,
List<string> values, List<string> errors) =>
{
if (TsgcHTMLComponent_CRUD.ValueOf(values, "NAME").Trim().Length < 3)
errors.Add("The name needs at least three characters.");
};
string html = crud.ShowList("", 1); // search text, page number
// A message from the browser carries action, crud and key with the form fields
if (crud.ProcessAction(action, key, fields, out string reply))
response = reply; // the markup to swap into the page
En sık başvurduğunuz üyeler.
TsgcHTMLCRUDAdapter yazma yoludur ve altı sanal yöntemi vardır: Locate, Read, List, Insert, Update ve Delete. TsgcHTMLCRUDAdapter_DataSet bağlı veri kümesi üzerinde çalışır, SetAdapter ise bileşene kendi adaptörünüzü verir ve sahipliğini devralır. List bir sayfayı sekmeyle ayrılmış satırlar olarak, anahtarı son hücre olarak döndürür ve tüm kümenin kaç satırı olduğunu geri verir.
TDataSet yoktur, bu yüzden .NET portu üç adaptörle gelir: TsgcHTMLCRUDAdapter_DataTable (bir DataTable üzerinde), TsgcHTMLCRUDAdapter_List<T> (herhangi bir IList<T> üzerinde) ve TsgcHTMLCRUDAdapter_DbConnection (bir DbConnection arkasındaki tablo üzerinde); her değer parametre olarak gönderilir. Columns koleksiyonunu bildirin: sütunlar tablodan okunmaz.
ShowList(search, page), ShowNew, ShowEdit(key), Save(key, values, html) ve DeleteRecord(key, html) her biri, host'un yerine koyduğu işaretlemeyi döndürür. ProcessAction, gönderilen crudList, crudNew, crudEdit, crudSave ve crudDelete eylemlerini bunlara yönlendirir ve başka herhangi bir eylem için False döndürür, böylece bir sayfa birden çok bileşen barındırabilir.
Actions, caCreate, caEdit, caDelete, caView ve caExport değerlerinden oluşan bir kümedir ve yalnızca caView içeren bir sayfa bir rapordur. EditMode cemModal ya da cemPage olur, ConfirmDelete silmeden önce sorar, PageSize varsayılan olarak 25'tir ve hiçbir zaman 500'ü aşmaz, SearchFields ise arama kutusunun baktığı alanları noktalı virgülle ayırarak listeler.
Bir TsgcHTMLCRUDColumn öğesinin FieldName, Caption, Visible, ReadOnly, Required, InList, InForm, Width ve MaxLength özellikleri vardır. Hiçbiri bildirilmemişse bileşen bunları etkin veri kümesinden okur: başlık DisplayLabel üzerinden, zorunlu bayrağı ve uzunluk da alandan alınır; anahtar gösterilir ama hiçbir zaman düzenlenmez. LoadColumnsFromDataSet bunu istek üzerine yapar.
Boş bırakılmış zorunlu bir sütun ve MaxLength değerinden uzun bir değer önce reddedilir. Ardından OnValidate olayına sorulur: her sorun için aErrors içine bir satır ekleyin, hiçbir şey yazılmaz ve form iletilerle geri döner. OnApplyUpdates adaptörden önce çalışır ve aHandled ayarlandığında yazma işlemi size kalır. OnApplied, bir yazma işlemi tamamlandıktan sonra tetiklenir; günlüğe kaydetmek ya da listeye bakan diğer kişileri yenilemek için kullanılır.
VersionField içinde bir sürüm alanı belirtin. Kaydetme işlemi tarayıcının gönderdiği ile saklanan değeri karşılaştırır ve arada başka biri kaydı değiştirmişse yazmayı reddeder; böylece Kaydet düğmesine ikinci basan kişi ilkinin üzerine yazmaz.
Details bir kaydın alt listelerini tutar. Her öğe başka bir TsgcHTMLComponent_CRUD bileşenini CRUD içinde, alt kayıtta ana anahtarı tutan alanı MasterField içinde ve bir Caption belirtir. Bir kayıt düzenlenirken bunlar formun altında işlenir. SetMaster(field, value) bir listeyi tek bir ana kayda daraltır.
caExport ile araç çubuğu, RoutePath('export.csv') adresine giden bir Dışa Aktar bağlantısı gösterir. Bu rotayı GetExportCSV(search) ile yanıtlayın: liste hangi aramayı gösteriyorsa onu, en fazla 500 satır olarak dışa aktarır, tablonun tamamını değil. Her değer tırnak içine alınır, bu yüzden bir virgül ya da satır sonu dosyayı bozamaz.
Her anahtar tarayıcıdan gelir. ShowEdit, Save ve DeleteRecord, herhangi bir şey düzenlenmeden ya da silinmeden önce adaptörden anahtarı Locate ile bulmasını ister; böylece bir URL'deki sayıyı değiştirmek hiçbir zaman başka bir kayda ulaşmaz. Actions da uygulanır: caDelete içermeyen bir sayfa, sahte bir form silme gönderse bile silmeyi reddeder. Hücre ve alan değerleri kaçışlanır, bu yüzden işaretleme içeren bir kayıt metin olarak gösterilir.
Arama kutusu, Yeni, Düzenle, Sil ve form, data-sgc-ws-send ile işaretlenmiş formlardır; her birinde gizli action, crud ve key alanları bulunur ve host bunları ProcessAction yöntemine verir. Soket üzerinden gelen bir ileti yol taşımaz ve yönlendiriciye hiçbir zaman ulaşmaz, bu yüzden yetkilendirmeyi kendiniz yapın. Delphi'de TsgcHTMX_Engine_Server.MessageSession, el sıkışma çerezlerinin arkasındaki oturumu ya da nil döndürür. HTTP için RoutePath, bir host'un motor yönlendiricisinde bildirdiği yolları oluşturur: /customers, /customers/new, /customers/{id}/edit, /customers/save ve /customers/{id}/delete.
Yukarıdaki gibi kodla oluşturun ya da Delphi IDE'deki sihirbazı kullanın: Tools › New sgcHTML CRUD page açık formdaki veri kümelerini listeler, seçtiğiniz veri kümesinin alanlarını okur ve forma yapılandırılmış bir bileşen ekler; iki bağlantı satırı panoya kopyalanır. Delphi 10.4 veya üstünü gerektirir. IDE dışında sgcHTMLGen komut satırı aracı, tablodan, rota önekinden ve name:flag biçiminde yazılan alanlardan sayfanın kaynağını Object Pascal ya da C# olarak yazar, örneğin ID:key veya NAME:req:60.
sgcHTML'in bir parçasıdır ve sgcHTML, sgcWebSockets'ten bağımsız olarak satılır. Birim, SGC_HTML tanımlı olduğu yerde derlenir; sgcVer.inc bunu HTML paketi için Android ve iOS dışındaki tüm platformlarda tanımlar. Demo Demos\60.HTML\01.RunTime\02.AdminCRUD klasörüdür; müşteriler alanı burada, yerine geçtiği elle yazılmış sayfanın yanında bu bileşenle oluşturulmuştur.
| Çevrimiçi yardımCRUD sayfaları, adaptör ve yazma yolu için kullanım kılavuzu. | Aç | |
| Tüm sgcHTML Bileşenleri80'den fazla bileşenin tam özellik matrisine göz atın. | Aç | |
| Ücretsiz Deneme Sürümünü İndirin30 günlük deneme, 60.HTML demo projeleriyle birlikte gelir. | Aç | |
| FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları. | Aç |