Query Builder

TsgcHTMLComponent_QueryBuilder: görsel bir sorgu ve filtre oluşturucu. Kullanıcılar koşulları (alan, işleç, değer) VE ve VEYA gruplarında elle ya da yapay zeka asistanının yanıtladığı düz dilde bir sorudan birleştirir; sunucu sonucu parametreli bir SQL koşuluna, bir satır eşleşmesine veya bir Grid filtresine dönüştürür, Delphi, C++ Builder ve .NET ile.

TsgcHTMLComponent_QueryBuilder

Bir kuralın adlandırabileceği alanları ekleyin ya da sütunlarını kullanmak için bir TsgcHTMLComponent_Grid bağlayın ve oluşturun. Her düğme bir sunucu olayı gönderir, bileşen o isteğin ağacını doğrular ve OnApply verilerinizi sorgulamanız için ağacı size verir.

Bileşen sınıfı

TsgcHTMLComponent_QueryBuilder, koşul ağacı için TsgcHTMLQueryNode ile

İşler

Bootstrap 5 işaretlemesi olarak koşul ve grup ağacı, sunucuda oluşturulur ve betiksizdir

Diller

Delphi, C++ Builder, .NET

Alanları tanımlayın, kuralları verileriniz üzerinde çalıştırın

Alanlar bir kuralın adlandırabileceği alanları listeler. OnApply isteğin doğrulanmış ağacını alır, GetSQLWhere bunu adlandırılmış parametrelerle bir SQL koşulu olarak yazar ve ToJSON kullanıcının oturumu için saklar.

uses
  sgcHTML_AI, sgcHTML_Component_QueryBuilder;

// Bir kez oluşturulur: kendi sunucu olaylarını yanıtlar
oQB := TsgcHTMLComponent_QueryBuilder.Create(Self);
oQB.ElementName := 'orders';
oField := oQB.Fields.Add;
oField.Name := 'customer';
oField.Caption := 'Customer';
oField := oQB.Fields.Add;
oField.Name := 'amount';
oField.Caption := 'Amount';
oField.DataType := aidtInteger;
oField.SQLName := 'o.amount';
oField := oQB.Fields.Add;
oField.Name := 'status';
oField.Caption := 'Status';
oField.Options.Add('open=Open');
oField.Options.Add('paid=Paid');
oQB.HTMXEngine := HTMXEngine1;
oQB.AIAssistant := sgcHTMLAIAssistant1;
oQB.OnApply := QueryBuilderApply;
Result := oQB.HTML;

// aRules bu isteğin ağacıdır, Rules'a dokunulmaz
procedure TForm1.QueryBuilderApply(Sender: TObject;
  const aRules: TsgcHTMLQueryNode; var aResponse: string);
var
  oQB: TsgcHTMLComponent_QueryBuilder;
  oParams: TStringList;
  vWhere: string;
  i: Integer;
begin
  oQB := TsgcHTMLComponent_QueryBuilder(Sender);
  oParams := TStringList.Create;
  try
    vWhere := oQB.GetSQLWhere(oParams, aRules);
    FDQuery1.Close;
    FDQuery1.SQL.Text := 'select * from orders';
    if vWhere <> '' then
      FDQuery1.SQL.Add('where ' + vWhere);
    for i := 0 to oParams.Count - 1 do
      FDQuery1.Params.ParamByName(oParams.Names[i]).AsString :=
        oParams.ValueFromIndex[i];
    FDQuery1.Open;
    DoSaveFilter(oQB.ToJSON(aRules));      // oturum depolamanız
    aResponse := DoOrdersHTML(FDQuery1);   // hx-swap-oob ile işaretlenmiş satırlar
  finally
    oParams.Free;
  end;
end;
// includes: sgcHTML_AI.hpp, sgcHTML_Component_QueryBuilder.hpp
oQB = new TsgcHTMLComponent_QueryBuilder(this);
oQB->ElementName = "orders";
TsgcHTMLQueryField *oField = oQB->Fields->Add();
oField->Name = "customer";
oField->Caption = "Customer";
oField = oQB->Fields->Add();
oField->Name = "amount";
oField->Caption = "Amount";
oField->DataType = aidtInteger;
oField->SQLName = "o.amount";
oQB->HTMXEngine = HTMXEngine1;
oQB->OnApply = QueryBuilderApply;
html = oQB->HTML;

void __fastcall TForm1::QueryBuilderApply(TObject *Sender,
  TsgcHTMLQueryNode* const aRules, UnicodeString &aResponse)
{
  TsgcHTMLComponent_QueryBuilder *oQB = (TsgcHTMLComponent_QueryBuilder *)Sender;
  TStringList *oParams = new TStringList();
  try
  {
    UnicodeString vWhere = oQB->GetSQLWhere(oParams, aRules);
    FDQuery1->Close();
    FDQuery1->SQL->Text = "select * from orders";
    if (vWhere != "")
      FDQuery1->SQL->Add("where " + vWhere);
    for (int i = 0; i < oParams->Count; i++)
      FDQuery1->Params->ParamByName(oParams->Names[i])->AsString =
        oParams->ValueFromIndex[i];
    FDQuery1->Open();
    DoSaveFilter(oQB->ToJSON(aRules));
    aResponse = DoOrdersHTML(FDQuery1);
  }
  __finally
  {
    delete oParams;
  }
}
using esegece.sgcWebSockets;

var qb = new TsgcHTMLComponent_QueryBuilder();
qb.ElementName = "orders";
var field = qb.Fields.Add();
field.Name = "customer";
field.Caption = "Customer";
field = qb.Fields.Add();
field.Name = "amount";
field.Caption = "Amount";
field.DataType = TsgcHTMLAIDataType.aidtInteger;
field.SQLName = "o.amount";
qb.HTMXEngine = htmxEngine;
qb.AIAssistant = aiAssistant;

// aRules bu isteğin ağacıdır
qb.OnApply += (object sender, TsgcHTMLQueryNode aRules, ref string aResponse) =>
{
    var parameters = new List<string>();
    string where = qb.GetSQLWhere(parameters, aRules);
    using var cmd = connection.CreateCommand();
    cmd.CommandText = "select * from orders" + (where != "" ? " where " + where : "");
    foreach (var p in parameters)
    {
        var kv = p.Split(new[] { '=' }, 2);
        cmd.Parameters.AddWithValue(":" + kv[0], kv[1]);
    }
    DoSaveFilter(qb.ToJSON(aRules));
    aResponse = DoOrdersHTML(cmd.ExecuteReader());
};

string html = qb.HTML;

Kullanıcılarınızın elde ettikleri

SQL yazmayan kişiler için bir filtre ekranı ve kodunuzun herhangi bir veritabanında güvenle çalıştırabileceği bir koşul.

VE ve VEYA grupları

Her koşul bir alanı, bir işleci ve bir ya da iki değeri adlandırır; her grup alt öğelerini VE veya VEYA ile birleştirir. Gruplar en fazla MaxDepth düzeye kadar iç içe geçer ve bir ağaç en çok MaxRules kural içerir. Koşul ekle ve Grup ekle, geçerli ilk alanla başlar.

Veri türüne göre işleçler

Bir alanın DataType değeri, kullanıcının hangi işleçleri seçebileceğine karar verir: eşittir, eşit değildir, içerir, ile başlar, ile biter, büyüktür, küçüktür, arasında, listede, boştur ve boş değildir. Kapalı bir değer listesi olan Options içeren bir alan daha kısa bir listeye izin verir.

Düz dilde sorun

Bir AIAssistant ile ve AIPrompt True iken, Sor kutusu bir soruyu geçerli alanlar üzerinde VE kurallarına dönüştürür. Kurallar oluşturucuya yerleşir; kullanıcı uygulamadan önce bunları değiştirebilir ve yanıtın açıklaması kutunun altında görünür.

API anahtarı olmadan çalışır

Sağlayıcısı yapılandırılmamış bir asistan kural tabanlı ayrıştırıcısıyla yanıt verir, böylece Sor kutusu çevrimdışı çalışır. Bir sağlayıcı çağrısı başarısız olduğunda, UseRuleBasedFallback (varsayılan olarak True) aynı ayrıştırıcının yanıt vermesini sağlar.

Grid'e bağlı

Bir TsgcHTMLComponent_Grid bağlayın; Alanlar boş olduğunda oluşturucu alanlarını grid sütunlarından alır. ApplyToGrid gridin satırlarını RowFilter üzerinden filtreler ve LoadFromGridOps bir ağacı, bir grid işlem kümesinin her filtresi için bir kuralla doldurur.

Düz formlar da

Her denetim <ElementName>.<path>.<key> olarak adlandırılır; burada path düğümün dizin yolu, key ise birleştiriciyi, alanı, işleci veya değeri adlandırır. LoadFromRequest bu adları geri okur, böylece oluşturucu htmx olmadan gönderilen düz bir form içinde de çalışır.

Temel özellikler, yöntemler & olaylar

En sık başvuracağınız üyeler.

Alanlar

Alanlar bir kuralın adlandırabileceği alanları tutar; her biri Caption, DataType, SQLName ve satır başına bir değer veya value=caption biçiminde isteğe bağlı Options içerir. Öğe yoksa Grid sütunları geçerli alanlardır. FindField, GetFieldCount ve IsOperatorAllowed bunlarla ilgili soruları yanıtlar.

OnApply

OnApply(Sender, aRules, aResponse), Uygula, Temizle ve yanıtlanmış bir Sor işleminden sonra isteğin doğrulanmış ağacıyla tetiklenir. aResponse içinde döndürdüğünüz, yanıta eklenir; örneğin hx-swap-oob ile işaretlenmiş satırlarınız. OnApply yoksa ApplyToGrid ağacı Rules içine kopyalar ve bağlı Grid'i filtreler.

GetSQLWhere

Koşulu WHERE anahtar sözcüğü olmadan döndürür; ağaç boşsa boş bir dize döndürür. Değerler yalnızca :qb1, :qb2 gibi adlandırılmış parametreler olarak yazılır ve her biri aParams içine qb1=<value> olarak eklenir, böylece kullanıcı metni deyimi değiştiremez. Sütun, alanın SQLName değeridir veya Name değeridir.

Doğrulanır, asla güvenilmez

Bir ağacı dışarıdan dolduran her şey, yani JSON, bir yapay zeka yanıtı veya gönderilmiş bir form, aynı doğrulamadan geçer. Geçerli olmayan alanlardaki kurallar, türün izin vermediği işleçler, MaxRules sınırını aşan kurallar ve MaxDepth sınırından derin gruplar atılır, değerler 200 karaktere kesilir ve boş alt gruplar kaldırılır. SQLName SQL'e olduğu gibi girer, bu yüzden onu kodda ayarlayın, asla bir istekten almayın.

JSON biçimi

ToJSON bir grubu {"c":"and","r":[...]}, bir kuralı {"f":"field","o":"operator","v":"value"} olarak yazar; between için ayrıca "v2" ekler. ParseJSON ve LoadFromJSON bunu geri okur ve doğrular.

Matches

Matches, bellekteki satırlar için Name=Value çiftleri olarak verilen tek bir satır üzerinde ağacı değerlendirir. Her yardımcı isteğe bağlı bir ağaç alır ve nil Rules anlamına gelir, böylece bir OnApply işleyicisi paylaşılan bileşene dokunmadan isteğin ağacı üzerinde çalışır.

Birden çok kullanıcı

Sunucu olayı isteğin ağacı üzerinde çalıştığı için tek bir bileşen her oturuma hizmet verir. Birden çok kullanıcının paylaştığı bir sayfada OnApply atayın, ToJSON(aRules) çıktısını oturumda tutun ve her kullanıcının oluşturucusunu ParseJSON ve GetBuilderHTML ile oluşturun.

Sunucu olayı

Her düğme ve değiştiklerinde alan ile işleç seçimleri, qb sunucu olayını HTMX motorunun bileşen olayları uç noktasına veya ActionURL adresine gönderir. Yanıt, hx-swap-oob="true" ile işaretlenmiş oluşturucudur ve htmx bunu kimliğiyle değiştirir: QueryBuilderID veya qb_ artı ElementName.

Demo

Demos\60.HTML\01.RunTime\25.QueryBuilder, 8127 numaralı bağlantı noktasında bir sipariş sayfasıdır; oluşturucu gridin üzerindedir ve bir SQL kartı aynı kuralların bir veritabanında çalıştıracağı parametreli WHERE yan tümcesini gösterir. Yapay zeka asistanının API anahtarı yoktur, bu yüzden Sor kutusu çevrimdışı yanıt verir ve her ziyaretçi kendi kurallarını oturumunda tutar. Tasarım zamanı, Lazarus ve .NET sürümleri bunu yansıtır.

Keşfetmeye devam edin

Online DeneyinSorgu Oluşturucu demosunda görün, eSeGeCe demo sunucusunda canlı çalışıyor.
Çevrimiçi yardımBu bileşenin tam API başvurusu ve kullanım kılavuzu.
Grid BileşeniOluşturucunun filtrelediği ve sütunlarını aldığı grid.
AI AssistantDüz dildeki bir soruyu Sor kutusunun kurallarına dönüştürür.
Tüm sgcHTML Bileşenleri80'den fazla bileşenin tüm özellik matrisine göz atın.
Ücretsiz Deneme Sürümünü İndirin30 günlük deneme sürümü 60.HTML demo projelerini içerir.
FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

Başlamaya Hazır mısınız?

Ücretsiz deneme sürümünü indirin ve Delphi, C++ Builder ve .NET'te web arayüzleri oluşturmaya başlayın.