mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 02:19:27 +02:00
* Patch from Pascal Riekenberg to allow saving rendered report to JSON (bug ID 36547)
git-svn-id: trunk@43900 -
This commit is contained in:
parent
52c32837d1
commit
8700f1d090
@ -52,10 +52,13 @@ Type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure LoadFromStream(const aStream: TStream);
|
procedure LoadFromStream(const aStream: TStream);
|
||||||
procedure SaveToStream(const aStream: TStream);
|
procedure SaveToStream(const aStream: TStream);
|
||||||
|
procedure SaveRenderToStream(const aStream: TStream);
|
||||||
Procedure LoadFromJSON(aJSON : TJSONObject); virtual;
|
Procedure LoadFromJSON(aJSON : TJSONObject); virtual;
|
||||||
Procedure SavetoJSON(aJSON : TJSONObject); virtual;
|
Procedure SavetoJSON(aJSON : TJSONObject); virtual;
|
||||||
|
Procedure SaveRenderToJSON(aJSON : TJSONObject); virtual;
|
||||||
Procedure LoadFromFile(const aFileName : String);
|
Procedure LoadFromFile(const aFileName : String);
|
||||||
Procedure SaveToFile(const aFileName : String);
|
Procedure SaveToFile(const aFileName : String);
|
||||||
|
procedure SaveRenderToFile(const aFileName: String);
|
||||||
Property LoadErrors : TStrings Read FLoadErrors;
|
Property LoadErrors : TStrings Read FLoadErrors;
|
||||||
Property DataManager : TFPCustomReportDataManager Read FDataManager Write SetDataManager;
|
Property DataManager : TFPCustomReportDataManager Read FDataManager Write SetDataManager;
|
||||||
Property DesignDataName : String Read GetDesignDataName Write SetDesignDataName Stored StoreDesignDataName;
|
Property DesignDataName : String Read GetDesignDataName Write SetDesignDataName Stored StoreDesignDataName;
|
||||||
@ -242,6 +245,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFPJSONReport.SaveRenderToJSON(aJSON: TJSONObject);
|
||||||
|
|
||||||
|
Var
|
||||||
|
R : TFPReportJSONStreamer;
|
||||||
|
|
||||||
|
begin
|
||||||
|
DoWriteJSON(aJSON);
|
||||||
|
R:=TFPReportJSONStreamer.Create(Nil);
|
||||||
|
try
|
||||||
|
R.OwnsJSON:=False;
|
||||||
|
R.JSON:=aJSON;
|
||||||
|
WriteRTElement(R);
|
||||||
|
finally
|
||||||
|
R.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TFPJSONReport.LoadFromStream(const aStream : TStream);
|
procedure TFPJSONReport.LoadFromStream(const aStream : TStream);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
@ -275,6 +295,23 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFPJSONReport.SaveRenderToStream(const aStream: TStream);
|
||||||
|
|
||||||
|
Var
|
||||||
|
O : TJSONObject;
|
||||||
|
S : TJSONStringType;
|
||||||
|
|
||||||
|
begin
|
||||||
|
O:=TJSONObject.Create;
|
||||||
|
try
|
||||||
|
SaveRendertoJSON(O);
|
||||||
|
S:=O.AsJSON;
|
||||||
|
aStream.WriteBuffer(S[1],Length(S));
|
||||||
|
finally
|
||||||
|
O.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TFPJSONReport.LoadFromFile(const aFileName: String);
|
procedure TFPJSONReport.LoadFromFile(const aFileName: String);
|
||||||
|
|
||||||
Var
|
Var
|
||||||
@ -302,5 +339,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFPJSONReport.SaveRenderToFile(const aFileName: String);
|
||||||
|
Var
|
||||||
|
F : TFileStream;
|
||||||
|
|
||||||
|
begin
|
||||||
|
F:=TFileStream.Create(aFileName,fmCreate);
|
||||||
|
try
|
||||||
|
SaveRenderToStream(F);
|
||||||
|
finally
|
||||||
|
F.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ unit fpreport;
|
|||||||
// Global debugging
|
// Global debugging
|
||||||
{ $define gdebug}
|
{ $define gdebug}
|
||||||
// Separate for aggregate variables
|
// Separate for aggregate variables
|
||||||
{$define gdebuga}
|
{ $define gdebuga}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
@ -1676,6 +1676,7 @@ type
|
|||||||
Procedure SaveDataToNames;
|
Procedure SaveDataToNames;
|
||||||
Procedure RestoreDataFromNames;
|
Procedure RestoreDataFromNames;
|
||||||
procedure WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
|
procedure WriteElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil); override;
|
||||||
|
procedure WriteRTElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement = nil);
|
||||||
procedure ReadElement(AReader: TFPReportStreamer); override;
|
procedure ReadElement(AReader: TFPReportStreamer); override;
|
||||||
procedure AddPage(APage: TFPReportCustomPage);
|
procedure AddPage(APage: TFPReportCustomPage);
|
||||||
procedure RemovePage(APage: TFPReportCustomPage);
|
procedure RemovePage(APage: TFPReportCustomPage);
|
||||||
@ -3305,9 +3306,9 @@ begin
|
|||||||
if (aNode is TFPExprVariable) then
|
if (aNode is TFPExprVariable) then
|
||||||
begin
|
begin
|
||||||
DS:=ExtractWord(1,TFPExprVariable(ANode).Identifier.Name,['.']);
|
DS:=ExtractWord(1,TFPExprVariable(ANode).Identifier.Name,['.']);
|
||||||
If AData.FindReportData(DS)<>Nil then
|
If AData.FindReportData(DS)<>Nil then
|
||||||
FDataName:=DS;
|
FDataName:=DS;
|
||||||
end
|
end
|
||||||
else if (ANode is TFPExprFunction) then
|
else if (ANode is TFPExprFunction) then
|
||||||
begin
|
begin
|
||||||
I:=0;
|
I:=0;
|
||||||
@ -3643,7 +3644,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
WriteString('Name',Self.Name);
|
WriteString('Name',Self.Name);
|
||||||
WriteString('DataType',ResultTypeName(DataType));
|
WriteString('DataType',ResultTypeName(DataType));
|
||||||
WriteString('Value',Value);
|
// WriteString('Value',Value);
|
||||||
WriteString('Expression',Expression);
|
WriteString('Expression',Expression);
|
||||||
WriteString('ResetValueExpression',ResetValueExpression);
|
WriteString('ResetValueExpression',ResetValueExpression);
|
||||||
WriteString('ResetType',GetEnumName(TypeInfo(TFPReportResetType),Ord(ResetType)));
|
WriteString('ResetType',GetEnumName(TypeInfo(TFPReportResetType),Ord(ResetType)));
|
||||||
@ -3668,7 +3669,7 @@ begin
|
|||||||
DataType:=rtString
|
DataType:=rtString
|
||||||
else
|
else
|
||||||
DataType:=TResultType(I);
|
DataType:=TResultType(I);
|
||||||
Value:=ReadString('Value','');
|
// Value:=ReadString('Value','');
|
||||||
Expression:=ReadString('Expression','');
|
Expression:=ReadString('Expression','');
|
||||||
ResetValueExpression:=ReadString('ResetValueExpression','');
|
ResetValueExpression:=ReadString('ResetValueExpression','');
|
||||||
S:=ReadString('ResetType','');
|
S:=ReadString('ResetType','');
|
||||||
@ -8726,6 +8727,39 @@ begin
|
|||||||
// TODO: Implement writing OnRenderReport, OnBeginReport, OnEndReport
|
// TODO: Implement writing OnRenderReport, OnBeginReport, OnEndReport
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TFPCustomReport.WriteRTElement(AWriter: TFPReportStreamer; AOriginal: TFPReportElement);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
begin
|
||||||
|
// ignore AOriginal here as we don't support whole report diffs, only element diffs
|
||||||
|
AWriter.PushElement('Report');
|
||||||
|
try
|
||||||
|
inherited WriteElement(AWriter, AOriginal);
|
||||||
|
// local properties
|
||||||
|
AWriter.WriteString('Title', Title);
|
||||||
|
AWriter.WriteString('Author', Author);
|
||||||
|
AWriter.WriteBoolean('TwoPass',TwoPass);
|
||||||
|
AWriter.WriteDateTime('DateCreated', DateCreated);
|
||||||
|
// now the pages
|
||||||
|
AWriter.PushElement('Pages');
|
||||||
|
try
|
||||||
|
for i := 0 to RTObjects.Count - 1 do
|
||||||
|
begin
|
||||||
|
AWriter.PushElement(IntToStr(i)); // use page index as identifier
|
||||||
|
try
|
||||||
|
TFPReportComponent(RTObjects[i]).WriteElement(AWriter);
|
||||||
|
finally
|
||||||
|
AWriter.PopElement;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
AWriter.PopElement;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
AWriter.PopElement;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TFPCustomReport.ReadElement(AReader: TFPReportStreamer);
|
procedure TFPCustomReport.ReadElement(AReader: TFPReportStreamer);
|
||||||
var
|
var
|
||||||
E: TObject;
|
E: TObject;
|
||||||
|
Loading…
Reference in New Issue
Block a user