sgcUI 实时 UI 包:面向 Delphi、C++Builder 和 .NET 的在线状态、通知、活动与实时日志

· 组件
sgcUI 实时 UI 包:面向 Delphi 和 .NET 的在线状态、通知、活动与实时日志
全新 · sgcUI 实时 UI 包

让你的应用实时运转。
谁在线,发生了什么,哪里出了问题。

在线状态头像、弹出通知和通知收件箱、铃铛徽章、带审核跟踪的活动源以及实时日志查看器,全部由 WebSocket、MQTT 或 Server Sent Events 驱动。面向 Delphi、C++Builder 和 .NET 的原生控件。

  • VCL
  • FireMonkey
  • C++Builder
  • WinForms
  • WPF
  • Avalonia
实时运维演示:团队在线状态、活动源、通知收件箱和实时日志
4个实时模型
3种实时数据源
6种 UI 框架
12种语言

运维控制台、帮助台、管理面板和交易界面,在数据不断变化的同时,都要回答同样的问题:此刻谁在线,哪些事情需要我关注,谁修改了什么,以及现在哪里出了故障。sgcUI 实时 UI 包用一个模型加一组原生控件来回答每一个问题,并通过同一种 JSON 消息把它们全部连接到实时数据源。

一分钟了解 Realtime UI 包:在线状态、通知、活动和实时日志,全部由同一种 JSON 消息驱动。 YouTube 上也有.

在线状态头像、状态点和在线人员
通知弹出通知、收件箱、偏好设置和铃铛徽章
活动谁做了什么的动态,以及审核跟踪
日志任意 sgcGrid 上的实时日志查看器

实时 UI 包不是一个独立产品。每个部分都位于它所扩展的 sgcUI 产品中,即 sgcUICore、sgcNavigation、sgcToolbar、sgcDashboard 和 sgcGrid,包含在你已在使用的单元、包和 NuGet 包里,并遵循该产品的版本。它运行在面向 Delphi 和 C++Builder 的 VCL 与 FireMonkey 上,以及面向 .NET 的 WinForms、WPF 和 Avalonia 上,支持浅色、深色和高对比度主题、从右到左布局以及 12 种语言。

在线状态:谁在线

TsgcUIPresenceModel 保存应用用户的姓名、首字母、颜色、头像图片、状态(在线、离开、忙碌或离线)、状态文本和最后在线时间。控件读取该模型,状态变化时会自行重绘。

带在线状态指示器的团队名册,以及带 +7 标签的头像组
工具栏中的团队名册和头像组,均取自同一个在线状态模型。
uses
  sgcUICore_Presence, sgcUICore_Presence_VCL;

procedure TfrmMain.LoadTeam;
begin
  // usually set in the Object Inspector
  sgcVCLAvatarGroup1.Model := FPresence;
  sgcVCLAvatarGroup1.MaxVisible := 5;

  FPresence.AddOrUpdate('u1', 'Alex Morgan');
  FPresence.AddOrUpdate('u2', 'Bianca Ruiz', uprAway, 'Back at 3');
  // later, when the status changes
  FPresence.SetStatus('u1', uprBusy, 'In a meeting');
end;

通知:弹出通知、收件箱和铃铛徽章

TsgcNotificationModel 保存当前用户的通知,包含标题、正文、严重程度、时间、已读状态、操作和分组,并维护未读数。由四个部分来展示它:

位于偏好设置编辑器上方的通知收件箱,以及带未读徽章的通知工具栏项
按天分组的收件箱、按类别设置的渠道偏好,以及工具栏上的未读徽章。
uses
  sgcNavigation_Notification, sgcNavigation_Toast_VCL,
  sgcNavigation_Inbox_VCL, sgcToolbar_BadgeLink;

procedure TfrmMain.SetupNotifications;
begin
  sgcVCLToastManager1.Model := FNotifications;
  sgcVCLToastManager1.Preferences := FPreferences;
  sgcVCLNotificationInbox1.Model := FNotifications;
  // the unread count as the badge of the first toolbar item
  sgcToolbarBadgeLink1.Source := FNotifications;
  sgcToolbarBadgeLink1.Target := sgcVCLToolbar1;
  sgcToolbarBadgeLink1.ItemIndex := 0;

  FNotifications.Add('Deployed billing', 'Version 1.8 is live in 3 regions',
    nsvSuccess, 'deploy');
end;

活动源与审核跟踪:谁做了什么

TsgcDashboardActivityModel 记录谁在何时做了什么:操作者、动词、对象、结果,并且为了审核,还记录每个被修改字段的前后值。操作者的名称、颜色和头像来自在线状态模型,因此活动源和名册始终保持一致。

活动源,显示操作者头像、动词、对象和结果
活动源:每一行都显示操作者头像、动词、对象和结果。
uses
  sgcDashboard_Activity, sgcDashboard_Activity_VCL;

procedure TfrmMain.RecordApproval;
var
  oItem: TsgcDashboardActivity;
begin
  FActivity.Presence := FPresence; // actor names, colours and avatars
  sgcVCLActivityFeed1.Model := FActivity;
  sgcVCLAuditTrail1.Model := FActivity;

  oItem := TsgcDashboardActivity.Create;
  oItem.Id := 'a18';
  oItem.Time := FActivity.NowUTC;
  oItem.ActorId := 'u2';
  oItem.Verb := 'approved';
  oItem.ObjectName := 'Change request 102';
  oItem.Outcome := 'success';
  oItem.Changes.Add('status', 'pending', 'approved');
  // the model owns the item and inserts it by Time
  FActivity.AddActivity(oItem);
end;

实时日志查看器:此刻哪里出了问题

TsgcGridLogModel 是线程安全的日志行环形缓冲区,级别从 trace 到 fatal,每行包含来源、消息和属性,支持按级别、来源和文本过滤,并可导出为文本、JSON 和 CSV。任何线程都可以向其追加内容,变更会分批到达屏幕。TsgcGridLogLink 可以把任意 sgcGrid 变成日志查看器。

sgcGrid 中的实时日志,警告和信息行以各自的级别颜色显示
实时日志:带级别颜色、Pause、Resume、级别过滤器和 Copy lines 的 sgcGrid。
uses
  sgcGrid_Log, sgcGrid_LogLink;

procedure TfrmMain.SetupLog;
begin
  FLog.Capacity := 100000;
  sgcGridLogLink1.Model := FLog;
  sgcGridLogLink1.Grid := sgcVCLGrid1;
  sgcGridLogLink1.FollowTail := True;
  sgcGridLogLink1.Active := True;
end;

// from any thread
FLog.Append(gllWarning, 'gateway', 'slow query 668 ms');

实时数据:一条消息供所有数据源使用

四个模型读取同一种 JSON 消息,因此一个连接就能承载全部数据。每条消息都指明自己的 type 和 op,每个模型只取属于自己的消息:

{"type":"presence","op":"upsert","user":{"id":"u7","presence":"away","statusText":"Lunch"}}
{"type":"notification","op":"add","notification":{"id":"n2","title":"Build 812 passed","severity":"success"}}
{"type":"activity","op":"add","item":{"id":"a20","actorId":"u7","verb":"updated","objectName":"Invoice INV-17"}}
{"type":"log","op":"append","entry":{"level":"warning","source":"api","message":"Slow query"}}

三种实时数据源通过 sgcWebSockets 把模型连接到服务器:TsgcUILiveSource_WebSocket、TsgcUILiveSource_MQTT 和 TsgcUILiveSource_SSE。每个数据源都挂接到你已配置好的客户端,沿用其 URL、凭据、TLS 和重新连接设置,并把每条消息交给它的绑定。在工作线程上到达的消息会在主线程中一次批量应用,因此一千行日志的突发只会访问一次用户界面。绑定还可以选择 MQTT 主题、SSE 事件名称、过滤器,或应用信封内的路径。

uses
  sgcWebSocket, sgcUICoreWS_Live, sgcUICoreWS_Live_WebSocket;

procedure TfrmMain.ConnectLive;
var
  oSource: TsgcUILiveSource_WebSocket;
begin
  oSource := TsgcUILiveSource_WebSocket.Create(Self);
  oSource.Client := sgcWebSocketClient1;
  // every message carries its type, so each model takes only its own
  oSource.Bindings.Add.Target := FPresence;
  oSource.Bindings.Add.Target := FNotifications;
  oSource.Bindings.Add.Target := FActivity;
  oSource.Bindings.Add.Target := FLog;
end;

实时数据源属于注册版,并且需要 sgcWebSockets,与 sgcUI 的所有 sgcWebSockets 桥接一样。没有服务器时,或在社区版中,应用改为调用模型 API:AddOrUpdate 和 SetStatus、Add 或 Post、AddActivity 以及 Append。

全平台,浅色与深色

相同的模型和相同的 JSON 可在每个平台上运行。.NET 控件是原生的 WinForms、WPF 和 Avalonia 控件,名称相同,位于 esegece.sgcUICore、esegece.sgcNavigation、esegece.sgcToolbar、esegece.sgcDashboard 和 esegece.sgcGrid 包中,套件的每个主题,包括深色和高对比度,都适用于这些新控件。

WinForms 上的实时运维演示
WinForms
WPF 上的实时运维演示
WPF
Avalonia 上的实时运维演示,右下角显示弹出通知
Avalonia
FireMonkey 上的实时运维演示,浅色主题
FireMonkey,浅色
FireMonkey 上的实时运维演示,深色主题
FireMonkey,深色

实时运维演示

实时运维演示把所有部分放在同一个界面上:团队名册、带收件箱和偏好设置的弹出通知、铃铛徽章、活动源和审核跟踪,以及实时日志,全部由内置模拟器驱动,因此无需服务器即可运行。它随 Delphi 套件演示中的 VCL、FireMonkey 和 C++Builder 版本发布,也随 .NET 套件演示中的 WinForms、WPF 和 Avalonia 版本发布,模拟器在每个平台上产生相同的序列。第二个 VCL 演示 RealtimeLive 通过进程内的 WebSocket 服务器和 TsgcUILiveSource_WebSocket 发送同样的消息,还可以通过 URL 输入框改为连接你自己的服务器。

版本

每个部分都遵循其所属产品的版本。sgcUICore 的在线状态部分和 sgcGrid 的日志部分在所有版本中都有,包括社区版,在线状态消息也是如此。通知和徽章部分需要 sgcNavigation 和 sgcToolbar,即 sgcUI Standard 及以上版本,活动部分需要 sgcDashboard,即 sgcUI Professional 及以上版本。免费的 .NET 社区版包也包含这些部分,而 Delphi 社区版只提供 sgcGrid。实时通知、活动和日志消息、作为徽章目标的功能区,以及三种实时数据源属于注册版。有关各产品的详细信息,请阅读实时 UI 包页面和实时 UI 包帮助。

让你的应用实时运转

一个 Delphi 试用版和一个 C++Builder 试用版即可安装全部 sgcUI 产品,包括实时 UI 包。

有问题或反馈?联系我们,你将得到编写这些代码的人的回复。