interface
type
TQuerySetXML = class(TQuerySetSQL) // Non visual sql result set
Checked: TQuerySet.TFieldCheckBox;
[UniqueField]
[DefaultSortField(True)]
[InitField('Id', 64)]
Id: TQuerySet.TFieldInteger;
[InitField('TimeStamp', 'Dato og tid', 120)]
TimeStamp: TQuerySet.TFieldDateTime;
[InitField('ProcessId', 'PID', 64)]
PID: TQuerySet.TFieldInteger;
[InitField('ThreadId', 'TID', 64)]
TID: TQuerySet.TFieldInteger;
[InitField('XLevel', 'Nivå', 70)]
Level: TQuerySet.TFieldEnum<TLogEventLevel>;
[InitField('XCategory', 'Kategori', 70)]
Category: TQuerySet.TFieldEnum<TLogEventCategory>;
[InitField('AppShortName', 'App', 30)]
App: TQuerySet.TFieldString;
[InitField('ClientName', 'Client', 140, hcRightJustify)]
Client: TQuerySet.TFieldString;
[InitField('Title', 'Beskrivelse', 800)]
Title: TQuerySet.TFieldString;
constructor Create; override;
function LevelColorizer(const aValue: TLogEventLevel; var FG, BG: TColor): Boolean;
function AppToIconIndex(const aRow: Integer): Integer;
End;
TQueryGridXML = class(TQueryGridSQL<TQuerySetXML>); // attaches the non-visual query set to a visual grid
// Implementation
{ TQuerySetXML }
constructor TQuerySetXML.Create;
begin
inherited;
Level.Formatter :=
function (const Lvl: TLogEventLevel):String
begin
Result := LogEventLevelToString(Lvl);
end;
Level.SecondaryKeys := [Category, TimeStamp];
Level.ValueColorizer := LevelColorizer;
Category.Formatter :=
function (const Cat: TLogEventCategory):String
begin
Result := LogEventCategoryToString(Cat);
end;
Category.SecondaryKeys := [TimeStamp];
App.SecondaryKeys := [Client, TimeStamp];
App.AddImage(AppToIconIndex, heRight);
Client.SecondaryKeys := [TimeStamp];
PID.SecondaryKeys := [TimeStamp];
Title.SecondaryKeys := [TimeStamp];
end;
function TQuerySetXML.AppToIconIndex(const aRow:Integer):Integer;
var
TLA: String;
begin
TLA := App[aRow];
if TLA = AppId_Server then Result := 0
else if TLA = AppID_DatabaseProc then Result := 1
else if TLA = AppId_TINEAdmin then Result := 2
else if TLA = AppId_PSDTruckTerm then Result := 3
else if TLA = AppId_TMSProdInterface then Result := 4
else if TLA = AppId_ScannerTool then Result := 5
else if TLA = AppId_RouteViewer then Result := 6
else if TLA = AppId_SiteManager then Result := 7
else if TLA = AppId_PickByVoice then Result := 8
else if TLA = AppId_PSDController then Result := 9
else if TLA = AppId_UnitTest then Result := 10
else if TLA = AppId_Utils then Result := 11
else Result := -1;
end;
function TQuerySetXML.LevelColorizer(const aValue:TLogEventLevel; var FG, BG: TColor):Boolean;
begin
Result := True;
case aValue of
lelDebug: FG := clDkGray;
// lelInfo: ;
lelWarning: FG := clBlue;
lelError: FG := clRed;
lelSystem: FG := clGreen;
lelCritical: begin
FG := clYellow;
BG := clMaroon;
end
else Result := False;
end;
end;
// Setting up the grid
procedure TPSDXmlLogViewer3.InitializeViews;
begin
if Assigned(XMLGrid)
then EXIT;
XMLQuery := TXMLLogNonPaged.Create(''); //<-- a SQL query builder
XMLQuery.Reset;
XMLQuery.Subset := 'Id, TimeStamp, ProcessId, ThreadId, XLevel, XCategory, Title, ClientId';
XMLQuery.PageSize := 100;
RefreshInterval := 0;
DaysBack := 2;
dtpDate.Date := Trunc(Now);
XMLGrid := TQueryGridXML.Create;
XMLGrid.MultiSelect := True;
XMLGrid.Grid := sgLog; //<-- Attaching to the TAdvStringGrid from TMS
...
// updating the contents
db := PSD.DatabasePool.Acquire;
try
XMLQuery.UpdateCount(db, XMLQuery.Selection); // a first query to determine number of hits, page count, etc.
XMLGrid.Update(db, XMLQuery.PaginatedSelection); // refresh the grid data from the SQL query
finally
PSD.DatabasePool.Release(db);
end;
Comments
0 B
|👍
/👎
0 B
|👍
/👎