Page 9188 Generic Chart Customization, source in 29
Source29
src/Layers/W1/BaseApp/System/GenericChart/GenericChartCustomization.Page.al967 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Visualization;
using System;
using System.IO;
using System.Reflection;
using System.Utilities;
page 9188 "Generic Chart Customization"
{
Caption = 'Generic Chart Customization';
DeleteAllowed = false;
InsertAllowed = false;
PageType = Card;
ShowFilter = false;
SourceTable = Chart;
layout
{
area(content)
{
group("Measures (Y-Axis)")
{
Caption = 'Measures (Y-Axis)';
//The GridLayout property is only supported on controls of type Grid
//GridLayout = Rows;
grid(Control25)
{
GridLayout = Rows;
ShowCaption = false;
group("Required Measure")
{
Caption = 'Required Measure';
field("DataColumn[1]"; DataColumn[1])
{
ApplicationArea = Basic, Suite;
Caption = 'Data Column';
ColumnSpan = 1;
Editable = DataColumn1Enabled;
Enabled = DataColumn1Enabled;
RowSpan = 1;
ToolTip = 'Specifies the field or query column that the y-axis is based on. The list of values that appears when you choose Data Column field is filtered by the ID of the data source that you select on the Data Source FastTab.';
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[1], DummyCaption, 2, false);
ValidateDataColumn(1);
end;
trigger OnValidate()
begin
ValidateDataColumn(1);
end;
}
field("Aggregation[1]"; Aggregation[1])
{
ApplicationArea = Basic, Suite;
Caption = 'Aggregation';
ColumnSpan = 1;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
RowSpan = 1;
ToolTip = 'Specifies how data on the y-axis is aggregated, such as by the sum or by the maximum values.';
trigger OnValidate()
begin
CheckAggregation(1);
UpdateChartDefinition();
end;
}
field(ChartType; ChartType)
{
ApplicationArea = Basic, Suite;
Caption = 'Graph Type';
OptionCaption = 'Column,Point,Line,ColumnStacked,ColumnStacked100,Area,AreaStacked,AreaStacked100,StepLine,Pie,Doughnut,Range,Radar,Funnel';
ToolTip = 'Specifies how data is shown graphically in the chart, such as column, line, or pie.';
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[1]"; MeasureCaption[1])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Caption';
Editable = DataColumn1Enabled;
Enabled = DataColumn1Enabled;
ToolTip = 'Specifies the caption that is shown next to the y-axis to describe the selected measure. You can enter captions in different languages by creating several lines with different language codes.';
trigger OnAssistEdit()
begin
MeasureCaption[1] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.RequiredMeasureCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.RequiredMeasureCode(), GenericChartMgt.GetUserLanguage(), MeasureCaption[1]);
UpdateChartDefinition();
end;
}
}
group("Optional Measure 1")
{
Caption = 'Optional Measure';
field("DataColumn[2]"; DataColumn[2])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn2Enabled;
ShowCaption = false;
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[2], DummyCaption, 2, false);
ValidateDataColumn(2);
end;
trigger OnValidate()
begin
ValidateDataColumn(2);
end;
}
field("Aggregation[2]"; Aggregation[2])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
ShowCaption = false;
trigger OnValidate()
begin
CheckAggregation(2);
UpdateChartDefinition();
end;
}
field("ChartTypeReduced[2]"; ChartTypeReduced[2])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'Column,Point,Line,ColumnStacked,ColumnStacked100,Area,AreaStacked,AreaStacked100,StepLine,,,Range';
ShowCaption = false;
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[2]"; MeasureCaption[2])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn2Enabled;
ShowCaption = false;
trigger OnAssistEdit()
begin
MeasureCaption[2] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.OptionalMeasure1Code());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.OptionalMeasure1Code(), GenericChartMgt.GetUserLanguage(), MeasureCaption[2]);
UpdateChartDefinition();
end;
}
}
group("Optional Measure 2")
{
Caption = 'Optional Measure';
field("DataColumn[3]"; DataColumn[3])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn3Enabled;
ShowCaption = false;
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[3], DummyCaption, 2, false);
ValidateDataColumn(3);
end;
trigger OnValidate()
begin
ValidateDataColumn(3);
end;
}
field("Aggregation[3]"; Aggregation[3])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
ShowCaption = false;
trigger OnValidate()
begin
CheckAggregation(3);
UpdateChartDefinition();
end;
}
field("ChartTypeReduced[3]"; ChartTypeReduced[3])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'Column,Point,Line,ColumnStacked,ColumnStacked100,Area,AreaStacked,AreaStacked100,StepLine,,,Range';
ShowCaption = false;
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[3]"; MeasureCaption[3])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn3Enabled;
ShowCaption = false;
trigger OnAssistEdit()
begin
MeasureCaption[3] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.OptionalMeasure2Code());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.OptionalMeasure2Code(), GenericChartMgt.GetUserLanguage(), MeasureCaption[3]);
UpdateChartDefinition();
end;
}
}
group("Optional Measure 3")
{
Caption = 'Optional Measure';
field("DataColumn[4]"; DataColumn[4])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn4Enabled;
ShowCaption = false;
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[4], DummyCaption, 2, false);
ValidateDataColumn(4);
end;
trigger OnValidate()
begin
ValidateDataColumn(4);
end;
}
field("Aggregation[4]"; Aggregation[4])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
ShowCaption = false;
trigger OnValidate()
begin
CheckAggregation(4);
UpdateChartDefinition();
end;
}
field("ChartTypeReduced[4]"; ChartTypeReduced[4])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
ShowCaption = false;
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[4]"; MeasureCaption[4])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn4Enabled;
ShowCaption = false;
trigger OnAssistEdit()
begin
MeasureCaption[4] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.OptionalMeasure3Code());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.OptionalMeasure3Code(), GenericChartMgt.GetUserLanguage(), MeasureCaption[4]);
UpdateChartDefinition();
end;
}
}
group("Optional Measure 4")
{
Caption = 'Optional Measure';
field("DataColumn[5]"; DataColumn[5])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn5Enabled;
ShowCaption = false;
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[5], DummyCaption, 2, false);
ValidateDataColumn(5);
end;
trigger OnValidate()
begin
ValidateDataColumn(5);
end;
}
field("Aggregation[5]"; Aggregation[5])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
ShowCaption = false;
trigger OnValidate()
begin
CheckAggregation(5);
UpdateChartDefinition();
end;
}
field("ChartTypeReduced[5]"; ChartTypeReduced[5])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'Column,Point,Line,ColumnStacked,ColumnStacked100,Area,AreaStacked,AreaStacked100,StepLine,,,Range';
ShowCaption = false;
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[5]"; MeasureCaption[5])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn5Enabled;
ShowCaption = false;
trigger OnAssistEdit()
begin
MeasureCaption[5] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.OptionalMeasure4Code());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.OptionalMeasure4Code(), GenericChartMgt.GetUserLanguage(), MeasureCaption[5]);
UpdateChartDefinition();
end;
}
}
group("Optional Measure 5")
{
Caption = 'Optional Measure';
field("DataColumn[6]"; DataColumn[6])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn6Enabled;
ShowCaption = false;
trigger OnLookup(var Text: Text): Boolean
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[6], DummyCaption, 2, false);
ValidateDataColumn(6);
end;
trigger OnValidate()
begin
ValidateDataColumn(6);
end;
}
field("Aggregation[6]"; Aggregation[6])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'None,Count,Sum,Min,Max,Avg';
ShowCaption = false;
trigger OnValidate()
begin
CheckAggregation(6);
UpdateChartDefinition();
end;
}
field("ChartTypeReduced[6]"; ChartTypeReduced[6])
{
ApplicationArea = Basic, Suite;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled;
OptionCaption = 'Column,Point,Line,ColumnStacked,ColumnStacked100,Area,AreaStacked,AreaStacked100,StepLine,,,Range';
ShowCaption = false;
trigger OnValidate()
begin
UpdateChartDefinition();
EnableControls();
end;
}
field("MeasureCaption[6]"; MeasureCaption[6])
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Editable = OptionalMeasuresEnabled;
Enabled = OptionalMeasuresEnabled and DataColumn6Enabled;
ShowCaption = false;
trigger OnAssistEdit()
begin
MeasureCaption[6] := GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.OptionalMeasure5Code());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.OptionalMeasure5Code(), GenericChartMgt.GetUserLanguage(), MeasureCaption[6]);
UpdateChartDefinition();
end;
}
}
}
field("Y-Axis Title"; TempGenericChartSetup."Y-Axis Title")
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Y-Axis Title';
ToolTip = 'Specifies the text that is shown next to the y-axis on the generic chart. To specify y-axis titles in different languages, choose the AssistEdit button to open the Generic Chart Text Editor window.';
trigger OnAssistEdit()
begin
TempGenericChartSetup."Y-Axis Title" :=
GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.YAxisTitleCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.YAxisTitleCode(), GenericChartMgt.GetUserLanguage(),
TempGenericChartSetup."Y-Axis Title");
UpdateChartDefinition();
end;
}
field("Show Y-Axis Title"; TempGenericChartSetup."Y-Axis Show Title")
{
ApplicationArea = Basic, Suite;
Caption = 'Show Y-Axis Title';
ToolTip = 'Specifies if the value in the Y-Axis Title field is shown on the generic chart.';
trigger OnValidate()
var
GenericChartMgt: Codeunit "Generic Chart Mgt";
begin
GenericChartMgt.CheckSourceTypeID(TempGenericChartSetup, true);
UpdateChartDefinition();
end;
}
}
group("<Control35>")
{
Caption = 'Dimensions (X- and Z-Axes)';
field("X-Axis Field"; TempGenericChartSetup."X-Axis Field Name")
{
ApplicationArea = Basic, Suite;
Caption = 'X-Axis Field';
ToolTip = 'Specifies the field in the source object that is shown on the x-axis of the generic chart. The text is shown as a tooltip when you hover over the data element on the chart.';
trigger OnLookup(var Text: Text): Boolean
var
GenericChartMgt: Codeunit "Generic Chart Mgt";
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, TempGenericChartSetup."X-Axis Field ID", TempGenericChartSetup."X-Axis Field Name", TempGenericChartSetup."X-Axis Title", 0, false);
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.XAxisTitleCode(), GenericChartMgt.GetUserLanguage(),
TempGenericChartSetup."X-Axis Title");
ValidateDimension(1);
end;
trigger OnValidate()
begin
ValidateDimension(1);
end;
}
field("X-Axis Title"; TempGenericChartSetup."X-Axis Title")
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'X-Axis Title';
ToolTip = 'Specifies the text that describes the data that is shown on the x-axis. The text is shown as a tooltip when you hover over the data element on the chart. To specify x-axis titles in different languages, choose the AssistEdit button to open the Generic Chart Text Editor window.';
trigger OnAssistEdit()
begin
TempGenericChartSetup."X-Axis Title" :=
GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.XAxisTitleCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.XAxisTitleCode(), GenericChartMgt.GetUserLanguage(),
TempGenericChartSetup."X-Axis Title");
UpdateChartDefinition();
end;
}
field("Show X-Axis Title"; TempGenericChartSetup."X-Axis Show Title")
{
ApplicationArea = Basic, Suite;
Caption = 'Show X-Axis Title';
ToolTip = 'Specifies if the value in the X-Axis Title field is shown on the generic chart.';
trigger OnValidate()
var
GenericChartMgt: Codeunit "Generic Chart Mgt";
begin
GenericChartMgt.CheckSourceTypeID(TempGenericChartSetup, true);
UpdateChartDefinition();
end;
}
field("Data Point X Label"; TempGenericChartSetup."X-Axis Field Caption")
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Data Point X Label';
ToolTip = 'Specifies the text describes the selected x-axis value in a tooltip when you hover over a data point. The data point label is shown in front of the data value.';
trigger OnAssistEdit()
begin
TempGenericChartSetup."X-Axis Field Caption" :=
GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.XAxisCaptionCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.XAxisCaptionCode(), GenericChartMgt.GetUserLanguage(),
TempGenericChartSetup."X-Axis Field Caption");
UpdateChartDefinition();
end;
}
field("Z-Axis Field"; TempGenericChartSetup."Z-Axis Field Name")
{
ApplicationArea = Basic, Suite;
Caption = 'Z-Axis Field';
Editable = ZAxisEnabled;
Enabled = ZAxisEnabled;
ToolTip = 'Specifies the field in the source object that is shown on the z-axis of the generic chart.';
trigger OnLookup(var Text: Text): Boolean
var
GenericChartMgt: Codeunit "Generic Chart Mgt";
begin
GenericChartMgt.RetrieveFieldColumn(TempGenericChartSetup, TempGenericChartSetup."Z-Axis Field ID", TempGenericChartSetup."Z-Axis Field Name", TempGenericChartSetup."Z-Axis Title", 0, false);
ValidateDimension(2);
end;
trigger OnValidate()
begin
ValidateDimension(2);
end;
}
field("Data Point Z Label"; TempGenericChartSetup."Z-Axis Field Caption")
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Data Point Z Label';
ToolTip = 'Specifies the text that describes the z-axis value in a tooltip when you hover over a data point. The data point label is shown in front of the data value.';
trigger OnAssistEdit()
begin
TempGenericChartSetup."Z-Axis Field Caption" :=
GenericChartMgt.TextMLAssistEdit(TempGenericChartCaptionsBuf, GenericChartMgt.ZAxisCaptionCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartCaptionsBuf.SetCaption(GenericChartMgt.ZAxisCaptionCode(), GenericChartMgt.GetUserLanguage(),
TempGenericChartSetup."Z-Axis Field Caption");
UpdateChartDefinition();
end;
}
}
group("Chart Description")
{
Caption = 'Chart Description';
field(Description; ChartDescription)
{
ApplicationArea = Basic, Suite;
AssistEdit = false;
Caption = 'Description';
Editable = TitleEnabled;
MultiLine = true;
ToolTip = 'Specifies a description of the generic chart.';
trigger OnAssistEdit()
begin
ChartDescription := GenericChartMgt.MemoMLAssistEdit(TempGenericChartMemoBuf, GenericChartMgt.DescriptionCode());
UpdateChartDefinition();
end;
trigger OnValidate()
begin
TempGenericChartMemoBuf.SetMemo(GenericChartMgt.DescriptionCode(), GenericChartMgt.GetUserLanguage(), ChartDescription);
UpdateChartDefinition();
end;
}
}
part(PreviewPart; "Generic Chart Type Preview")
{
ApplicationArea = Basic, Suite;
Caption = 'Preview Part';
}
}
}
actions
{
area(processing)
{
action("E&xport Chart")
{
ApplicationArea = Basic, Suite;
Caption = 'E&xport Chart';
Ellipsis = true;
Image = Export;
ToolTip = 'Export a generic chart in XML format. You can rename the file, modify the chart definition using an XML editor, and then import the new chart into another client.';
trigger OnAction()
begin
ExportChartDefinition();
end;
}
action("Copy Chart")
{
ApplicationArea = Basic, Suite;
Caption = 'Copy Chart';
Ellipsis = true;
Image = Copy;
ToolTip = 'Copy an existing chart to create a new generic chart.';
trigger OnAction()
var
CopyGenericChart: Page "Copy Generic Chart";
begin
Rec.CalcFields(BLOB);
CopyGenericChart.SetSourceChart(Rec);
CopyGenericChart.RunModal();
end;
}
}
area(navigation)
{
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process';
actionref("E&xport Chart_Promoted"; "E&xport Chart")
{
}
actionref("Copy Chart_Promoted"; "Copy Chart")
{
}
}
}
}
trigger OnAfterGetRecord()
begin
if not XMLRetrieved then begin
SetFieldValues();
EnableControls();
end;
XMLRetrieved := true;
end;
var
TempGenericChartSetup: Record "Generic Chart Setup" temporary;
TempGenericChartFilter: Record "Generic Chart Filter" temporary;
TempGenericChartYAxis: Record "Generic Chart Y-Axis" temporary;
TempGenericChartCaptionsBuf: Record "Generic Chart Captions Buffer" temporary;
TempGenericChartMemoBuf: Record "Generic Chart Memo Buffer" temporary;
GenericChartMgt: Codeunit "Generic Chart Mgt";
DataColumn: array[6] of Text[50];
MeasureCaption: array[6] of Text[250];
Aggregation: array[6] of Option "None","Count","Sum","Min","Max",Avg;
ChartType: Option Column,Point,Line,ColumnStacked,ColumnStacked100,"Area",AreaStacked,AreaStacked100,StepLine,Pie,Doughnut,Range,Radar,Funnel;
ChartTypeReduced: array[6] of Option Column,Point,Line,ColumnStacked,ColumnStacked100,"Area",AreaStacked,AreaStacked100,StepLine,,,Range;
ChartDescription: Text;
DummyInt: Integer;
DummyCaption: Text[50];
OptionalMeasuresEnabled: Boolean;
#pragma warning disable AA0470
FieldAlreadyAssignedErr: Label 'Field %1 is already assigned to a measure or dimension. Select a different field.';
#pragma warning restore AA0470
ZAxisEnabled: Boolean;
OnlyOneCountAggregationErr: Label 'You can only select one Measure with aggregation type Count.';
AggregationCountChangeQst: Label 'If you select Aggregation Count, the Data Column will be modified for this measure. Do you want to continue?';
TitleEnabled: Boolean;
XMLRetrieved: Boolean;
DataColumn1Enabled: Boolean;
DataColumn2Enabled: Boolean;
DataColumn3Enabled: Boolean;
DataColumn4Enabled: Boolean;
DataColumn5Enabled: Boolean;
DataColumn6Enabled: Boolean;
local procedure SetFieldValues()
begin
ClearAllVariables();
GenericChartMgt.RetrieveXML(
Rec, TempGenericChartSetup, TempGenericChartYAxis, TempGenericChartCaptionsBuf, TempGenericChartMemoBuf, TempGenericChartFilter);
ChartDescription := TempGenericChartMemoBuf.GetMemo(GenericChartMgt.DescriptionCode(), GenericChartMgt.GetUserLanguage());
TempGenericChartSetup."Y-Axis Title" :=
TempGenericChartCaptionsBuf.GetCaption(GenericChartMgt.YAxisTitleCode(), GenericChartMgt.GetUserLanguage());
TempGenericChartSetup."X-Axis Field Caption" :=
TempGenericChartCaptionsBuf.GetCaption(GenericChartMgt.XAxisCaptionCode(), GenericChartMgt.GetUserLanguage());
TempGenericChartSetup."X-Axis Title" :=
TempGenericChartCaptionsBuf.GetCaption(GenericChartMgt.XAxisTitleCode(), GenericChartMgt.GetUserLanguage());
TempGenericChartSetup."Z-Axis Field Caption" :=
TempGenericChartCaptionsBuf.GetCaption(GenericChartMgt.ZAxisCaptionCode(), GenericChartMgt.GetUserLanguage());
TempGenericChartSetup.Insert();
FillMatrixWhenOpenPage();
UpdateTempGenericChartYAXis();
RefreshPreview();
end;
local procedure ValidateDataColumn(Index: Integer)
var
FieldAlreadyExists: Boolean;
i: Integer;
begin
GenericChartMgt.CheckSourceTypeID(TempGenericChartSetup, true);
for i := 1 to ArrayLen(DataColumn) do
if (DataColumn[i] <> '') and (Index <> i) then
FieldAlreadyExists := (DataColumn[Index] = DataColumn[i]) or FieldAlreadyExists;
if FieldAlreadyExists then
Error(FieldAlreadyAssignedErr, DataColumn[Index]);
GenericChartMgt.CheckDataTypeAggregationCompliance(TempGenericChartSetup, DataColumn[Index], Aggregation[Index]);
GenericChartMgt.ValidateFieldColumn(TempGenericChartSetup, DummyInt, DataColumn[1], DummyCaption, 2, false, Aggregation[Index]);
UpdateChartDefinition();
EnableControls();
end;
local procedure ValidateDimension(Index: Integer)
var
DummyAggregation: Option "None","Count","Sum","Min","Max",Avg;
begin
GenericChartMgt.CheckSourceTypeID(TempGenericChartSetup, true);
if (TempGenericChartSetup."X-Axis Field Name" <> '') and (TempGenericChartSetup."Z-Axis Field Name" <> '') and (TempGenericChartSetup."X-Axis Field Name" = TempGenericChartSetup."Z-Axis Field Name") then
Error(FieldAlreadyAssignedErr, DataColumn[Index]);
case Index of
1:
GenericChartMgt.ValidateFieldColumn(
TempGenericChartSetup, TempGenericChartSetup."X-Axis Field ID", TempGenericChartSetup."X-Axis Field Name", TempGenericChartSetup."X-Axis Title", 0, false, DummyAggregation);
2:
GenericChartMgt.ValidateFieldColumn(
TempGenericChartSetup, TempGenericChartSetup."Z-Axis Field ID", TempGenericChartSetup."Z-Axis Field Name", TempGenericChartSetup."Z-Axis Title", 0, false, DummyAggregation);
end;
UpdateChartDefinition();
EnableControls();
end;
local procedure UpdateTempGenericChartYAXis()
var
i: Integer;
"Count": Integer;
begin
TempGenericChartYAxis.DeleteAll();
if ChartCapableOfOptionalMeasures() then
Count := ArrayLen(DataColumn)
else
Count := 1;
for i := 1 to Count do
if AddYAxisMeasure(i) then begin
Clear(TempGenericChartYAxis);
TempGenericChartYAxis.ID := Rec.ID;
TempGenericChartYAxis."Line No." := i * 10000;
TempGenericChartYAxis."Y-Axis Measure Field Name" := DataColumn[i];
TempGenericChartYAxis."Y-Axis Measure Field Caption" := MeasureCaption[i];
GenericChartMgt.RetrieveFieldColumnIDFromName(
TempGenericChartSetup."Source Type", TempGenericChartSetup."Source ID", TempGenericChartYAxis."Y-Axis Measure Field ID",
DataColumn[i]);
TempGenericChartYAxis.Aggregation := Aggregation[i];
if i = 1 then
TempGenericChartYAxis."Chart Type" := ChartType
else
TempGenericChartYAxis."Chart Type" := ChartTypeReduced[i];
TempGenericChartYAxis.Insert();
end;
end;
local procedure FillMatrixWhenOpenPage()
var
i: Integer;
CurrentCaptionCode: Code[10];
begin
Clear(DataColumn);
Clear(MeasureCaption);
Clear(Aggregation);
Clear(ChartType);
i := 0;
if TempGenericChartYAxis.FindSet() then begin
CurrentCaptionCode := GenericChartMgt.RequiredMeasureCode();
repeat
i += 1;
DataColumn[i] := TempGenericChartYAxis."Y-Axis Measure Field Name";
MeasureCaption[i] := TempGenericChartCaptionsBuf.GetCaption(CurrentCaptionCode, GenericChartMgt.GetUserLanguage());
Aggregation[i] := TempGenericChartYAxis.Aggregation;
if i = 1 then
ChartType := TempGenericChartYAxis."Chart Type"
else
ChartTypeReduced[i] := TempGenericChartYAxis."Chart Type";
if CurrentCaptionCode = GenericChartMgt.RequiredMeasureCode() then
CurrentCaptionCode := GenericChartMgt.OptionalMeasure1Code()
else
CurrentCaptionCode := IncStr(CurrentCaptionCode)
until TempGenericChartYAxis.Next() = 0;
end
end;
local procedure UpdateChartDefinition()
begin
UpdateTempGenericChartYAXis();
GenericChartMgt.SaveChanges(Rec, TempGenericChartSetup, TempGenericChartYAxis, TempGenericChartFilter,
TempGenericChartCaptionsBuf, TempGenericChartMemoBuf);
EnableControls();
RefreshPreview();
end;
local procedure RefreshPreview()
var
chartBuilder: DotNet BusinessChartBuilder;
begin
chartBuilder := chartBuilder.Empty();
GenericChartMgt.FillChartHelper(chartBuilder, TempGenericChartSetup, TempGenericChartYAxis, TempGenericChartFilter,
TempGenericChartCaptionsBuf, TempGenericChartMemoBuf);
CurrPage.PreviewPart.PAGE.SetChartDefinition(chartBuilder);
end;
local procedure ClearAllVariables()
begin
TempGenericChartSetup.DeleteAll();
TempGenericChartFilter.DeleteAll();
TempGenericChartYAxis.DeleteAll();
TempGenericChartCaptionsBuf.DeleteAll();
TempGenericChartMemoBuf.DeleteAll();
Clear(TempGenericChartFilter);
Clear(TempGenericChartYAxis);
Clear(TempGenericChartSetup);
Clear(TempGenericChartCaptionsBuf);
Clear(TempGenericChartMemoBuf);
Clear(GenericChartMgt);
Clear(DataColumn);
Clear(MeasureCaption);
Clear(Aggregation);
Clear(ChartType);
Clear(ChartTypeReduced);
Clear(DummyInt);
Clear(DummyCaption);
end;
local procedure ChartCapableOfOptionalMeasures(): Boolean
begin
exit(not (ChartType in [ChartType::Pie, ChartType::Doughnut, ChartType::Funnel, ChartType::Radar]));
end;
local procedure ExportChartDefinition()
var
TempBlob: Codeunit "Temp Blob";
FileMgt: Codeunit "File Management";
begin
TempBlob.FromRecord(Rec, Rec.FieldNo(BLOB));
if TempBlob.HasValue() then
FileMgt.BLOBExport(TempBlob, '*.xml', true);
end;
local procedure EnableControls()
begin
OptionalMeasuresEnabled := ChartCapableOfOptionalMeasures() and (TempGenericChartSetup."Z-Axis Field Name" = '');
ZAxisEnabled :=
ChartCapableOfOptionalMeasures() and
(DataColumn[2] = '') and (DataColumn[3] = '') and (DataColumn[4] = '') and (DataColumn[5] = '') and (DataColumn[6] = '');
TitleEnabled := true;
DataColumn1Enabled := Aggregation[1] <> Aggregation[1] ::Count;
DataColumn2Enabled := Aggregation[2] <> Aggregation[2] ::Count;
DataColumn3Enabled := Aggregation[3] <> Aggregation[3] ::Count;
DataColumn4Enabled := Aggregation[4] <> Aggregation[4] ::Count;
DataColumn5Enabled := Aggregation[5] <> Aggregation[5] ::Count;
DataColumn6Enabled := Aggregation[6] <> Aggregation[6] ::Count;
end;
local procedure AddYAxisMeasure(index: Integer): Boolean
begin
if Aggregation[index] = Aggregation[index] ::Count then
exit(true);
exit(DataColumn[index] <> '');
end;
local procedure CheckAggregation(index: Integer)
var
i: Integer;
FieldOfTypeCountAlreadyExists: Boolean;
CountColumnName: Text[50];
ReplaceDataColumn: Boolean;
begin
for i := 1 to ArrayLen(Aggregation) do
if (Aggregation[i] = Aggregation[i] ::Count) and (index <> i) then
FieldOfTypeCountAlreadyExists := (Aggregation[index] = Aggregation[i]) or FieldOfTypeCountAlreadyExists;
if FieldOfTypeCountAlreadyExists then
Error(OnlyOneCountAggregationErr);
GenericChartMgt.CheckDataTypeAggregationCompliance(TempGenericChartSetup, DataColumn[index], Aggregation[index]);
if Aggregation[index] = Aggregation[index] ::Count then begin
CountColumnName := GenericChartMgt.GetQueryCountColumnName(TempGenericChartSetup);
if DataColumn[index] <> CountColumnName then begin
ReplaceDataColumn := true;
if DataColumn[index] <> '' then
ReplaceDataColumn := Confirm(AggregationCountChangeQst, false);
if ReplaceDataColumn then
DataColumn[index] := CountColumnName
else
Error('');
end;
end;
end;
}