NotificationPreferences
TsgcHTMLComponent_NotificationPreferences: kategori başına bir satır ve kanal başına bir onay kutusu (uygulama içi, push, e-posta) içeren bir tablo, Delphi, C++ Builder ve .NET'te. Değerleri uygulamanız yükler ve kaydeder.
TsgcHTMLComponent_NotificationPreferences: kategori başına bir satır ve kanal başına bir onay kutusu (uygulama içi, push, e-posta) içeren bir tablo, Delphi, C++ Builder ve .NET'te. Değerleri uygulamanız yükler ve kaydeder.
Kitaplık hiçbir şey saklamaz. OnLoadPreferences uygulamanızdan bir kullanıcının değerlerini ister, OnSavePreferences kullanıcının işaretlediklerini geri verir ve bunları kalıcı hale getirmek sizin işinizdir. Değerler name=value çiftleridir ve değer 1 ya da 0 olur; sunulan her çift her zaman bulunur. Her sürümde çalışır.
TsgcHTMLComponent_NotificationPreferences (sgcHTML_Component_NotificationPreferences birimi)
Bir tablo: kategori başına bir satır, kanal başına bir onay kutusu ve bir kaydet düğmesi
Delphi, C++ Builder, .NET
Bir kullanıcıya bildirilebilecek her şey için Categories koleksiyonuna bir öğe ekleyin, OnLoadPreferences olayını kendi depolamanızdan yanıtlayın, OnSavePreferences içinde gelenleri kalıcı hale getirin ve gönderilen formu, kullanıcıyı oturumdan alarak ProcessAction yöntemine yönlendirin.
uses
sgcHTML_Session, sgcHTML_Component_NotificationPreferences;
var
oPrefs: TsgcHTMLComponent_NotificationPreferences;
begin
oPrefs := TsgcHTMLComponent_NotificationPreferences.Create(nil);
try
oPrefs.PreferencesID := 'prefs';
oPrefs.Title := 'How you want to hear about it';
oPrefs.SaveCaption := 'Save preferences';
with oPrefs.Categories.Add do
begin
Name := 'orders';
Caption := 'A new order arrives';
end;
with oPrefs.Categories.Add do
begin
Name := 'billing';
Caption := 'A payment fails';
end;
oPrefs.OnLoadPreferences := PrefsLoad;
oPrefs.OnSavePreferences := PrefsSave;
// the user comes from the session, never from the form
oPrefs.LoadPreferences(sgcHTMLRequestSession.UserID);
Response := oPrefs.HTML; // one row per category, one checkbox per channel
finally
oPrefs.Free;
end;
end;
// the application owns the values: one category.channel=1 or =0 per pair
procedure TMain.PrefsLoad(Sender: TObject; const aUserID: string;
aValues: TStrings);
begin
aValues.Add('orders.inapp=1');
aValues.Add('orders.push=0');
aValues.Add('orders.email=1');
end;
procedure TMain.PrefsSave(Sender: TObject; const aUserID: string;
aValues: TStrings);
var
i: Integer;
begin
// every offered pair is here, with 1 or 0
for i := 0 to aValues.Count - 1 do
MyStore.Save(aUserID, aValues.Names[i], aValues.Values[aValues.Names[i]] = '1');
end;
// in the message handler that receives the form the table posts
if oPrefs.ProcessAction(vUser, vAction, vPostedFields) then
oHTMX.PushFragment(vGuid, oPrefs.HTML);
// includes: sgcHTML_Session.hpp, sgcHTML_Component_NotificationPreferences.hpp
TsgcHTMLComponent_NotificationPreferences *oPrefs = new TsgcHTMLComponent_NotificationPreferences(NULL);
try
{
oPrefs->PreferencesID = "prefs";
oPrefs->Title = "How you want to hear about it";
oPrefs->SaveCaption = "Save preferences";
TsgcHTMLPreferenceCategory *orders = oPrefs->Categories->Add();
orders->Name = "orders";
orders->Caption = "A new order arrives";
TsgcHTMLPreferenceCategory *billing = oPrefs->Categories->Add();
billing->Name = "billing";
billing->Caption = "A payment fails";
oPrefs->OnLoadPreferences = PrefsLoad;
oPrefs->OnSavePreferences = PrefsSave;
// the user comes from the session, never from the form
oPrefs->LoadPreferences(sgcHTMLRequestSession()->UserID);
String html = oPrefs->HTML; // one row per category, one checkbox per channel
}
__finally
{
delete oPrefs;
}
// the application owns the values: one category.channel=1 or =0 per pair
void __fastcall TMain::PrefsLoad(TObject *Sender, const String aUserID,
TStrings *aValues)
{
aValues->Add("orders.inapp=1");
aValues->Add("orders.push=0");
aValues->Add("orders.email=1");
}
void __fastcall TMain::PrefsSave(TObject *Sender, const String aUserID,
TStrings *aValues)
{
// every offered pair is here, with 1 or 0
for (int i = 0; i < aValues->Count; i++)
MyStore->Save(aUserID, aValues->Names[i], aValues->Values[aValues->Names[i]] == "1");
}
// in the message handler that receives the form the table posts
if (oPrefs->ProcessAction(vUser, vAction, vPostedFields))
oHTMX->PushFragment(vGuid, oPrefs->HTML);
using esegece.sgcWebSockets;
var prefs = new TsgcHTMLComponent_NotificationPreferences();
prefs.PreferencesID = "prefs";
prefs.Title = "How you want to hear about it";
prefs.SaveCaption = "Save preferences";
var orders = prefs.Categories.Add();
orders.Name = "orders";
orders.Caption = "A new order arrives";
var billing = prefs.Categories.Add();
billing.Name = "billing";
billing.Caption = "A payment fails";
prefs.OnLoadPreferences += PrefsLoad;
prefs.OnSavePreferences += PrefsSave;
// the user comes from the session, never from the form
string user = sgcHTMLSessionHelpers.sgcHTMLRequestSession()?.UserID ?? "";
prefs.LoadPreferences(user);
string html = prefs.HTML; // one row per category, one checkbox per channel
// the application owns the values: one category.channel=1 or =0 per pair
void PrefsLoad(object sender, string userID, List<string> values)
{
values.Add("orders.inapp=1");
values.Add("orders.push=0");
values.Add("orders.email=1");
}
void PrefsSave(object sender, string userID, List<string> values)
{
// every offered pair is here, with 1 or 0
foreach (var line in values)
{
int eq = line.IndexOf('=');
myStore.Save(userID, line.Substring(0, eq), line.Substring(eq + 1) == "1");
}
}
// in the message handler that receives the form the table posts
if (prefs.ProcessAction(user, action, postedFields))
htmx.PushFragment(guid, prefs.HTML);
En sık başvurduğunuz üyeler.
Categories, bir TsgcHTMLPreferenceCategories koleksiyonudur; her TsgcHTMLPreferenceCategory öğesinin değerlerde ve onay kutusunun adı olarak kullanılan sabit anahtar olan bir Name özelliği ve kullanıcının okuduğu, işlenirken kaçışlanan bir Caption özelliği vardır. Boş bir Caption yerine Name kullanılır ve Name değeri boş olan bir kategori atlanır. IndexOfName bir kategoriyi bulur.
Channels, ncInApp, ncPush ve ncEmail değerlerinden hangilerinin bir sütun alacağını belirler, varsayılan olarak üçü de. Kanal adları TsgcHTMLComponent_Notification ile paylaşılır; o bileşen herhangi bir şey teslim etmeden önce bunları uygulamanıza OnGetChannel içinde sorar.
Değerler, sunulan her kategori ve kanal için birer tane olan name=value çiftleridir: orders.inapp=1, orders.push=0, orders.email=1. Anahtar, kategorinin Name değeri, bir nokta ve inapp, push ya da email kanal anahtarından oluşur. Kanal açıkken değer 1, kapalıyken 0 olur. ValueKey(aCategory, aChannel) anahtarı oluşturur.
LoadPreferences(aUserID), Values içeriğini temizler ve OnLoadPreferences(aUserID, aValues) olayını tetikler: aValues listesini o kullanıcının category.channel=1 satırlarıyla doldurun. Values, işlenen ya da en son kaydedilen değerlerin salt okunur bir görünümüdür. Dışarıda bıraktığınız bir çift işaretsiz gösterilir.
OnSavePreferences(aUserID, aValues) sunulan her çifti yeni değeriyle alır, böylece uygulamanız bulunmayan bir anahtarın ne anlama geldiğini hiçbir zaman tahmin etmek zorunda kalmaz. SavePreferences(aUserID, aPosted) formu, yalnızca işaretli kutuların bulunduğu geldiği haliyle alır ve ProcessAction(aUserID, aAction, aPosted) onu yönlendirir ve False döndürür; bunu eylem prefsSave olmadığında yapar.
Kaydedilen form istemcinin gönderdiği veri olarak taşınır, bu yüzden işaretlemeye hiçbir kullanıcı kimliği yazılmaz ve bileşenin sunmadığı bir kategori ya da kanal belirten her şey yok sayılır. Sahte bir form tercih kümesini genişletemez. Bileşen hiçbir yetkilendirme uygulamaz: eylemi yapan kullanıcıyı istek oturumundan (sgcHTMLRequestSession) alın, hiçbir zaman formdan almayın.
IsChecked(aCategory, aChannel) bir çiftin açık olup olmadığını bildirir, SetChecked(aCategory, aChannel, aValue) 1 ya da 0 değerini Values içine yazar ve IsOffered(aCategory, aChannel), kategori varsa ve kanalın bir sütunu varsa True olur.
PreferencesID, kök öğenin kimliğidir ve prefs alanında gönderilen değerdir, böylece birden çok tablosu olan bir sayfa hangisinin yanıt verdiğini bilir. Title, SaveCaption ve EmptyText metinleri belirler, ShowSave (varsayılan olarak açık) ise düğmeyi gösterir. Form, prefsSave eylemini bir data-sgc-ws-send formu olarak gönderir ve işaretli her kutu için bir category.channel alanı ekler, değeri 1 olur.
Birim, SGC_HTML tanımlı olduğunda derlenir; sgcVer.inc bunu Android ve iOS için tanımlamaz. Her sürümde çalışır ve sgcHTML tek başına bir pakettir, sgcWebSockets'ten bağımsız olarak satılır. Push onay kutusu yalnızca bir tercihi kaydeder: bir push iletmek için yalnızca Enterprise ve All-Access sürümlerinde bulunan WebPush gerekir.
Bildirimlerin kendisi NotificationInbox tarafından gösterilir, bir kullanıcıya sayfada mı yoksa push ile mi bildirileceğine ise Notification karar verir.
| Çevrimiçi yardımBu bileşen için tam API referansı ve 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 sürümü, tercihler tablosunu kullanan 17.FieldService dahil olmak üzere 60.HTML demo projelerini içerir. | Aç | |
| FiyatlandırmaTam kaynak kodlu Single, Team ve Site lisansları. | Aç |