Page extension 1758 Data Classification Wiz. Ext., source in 29
Source29
src/Layers/W1/BaseApp/DataClassificationWizExt.PageExt.al180 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft;
using System.Privacy;
using System.Reflection;
pageextension 1758 "Data Classification Wiz. Ext." extends "Data Classification Wizard"
{
layout
{
modify(ExportModeSelected)
{
trigger OnAfterValidate()
begin
if IsExportModeSelected() then begin
SetExpertModeSelected(false);
SetImportModeSelected(false);
end;
ShouldNextBeEnabled := ShouldEnableNext();
end;
}
modify(ImportModeSelected)
{
trigger OnAfterValidate()
begin
if IsImportModeSelected() then begin
SetExpertModeSelected(false);
SetExportModeSelected(false);
end;
ShouldNextBeEnabled := ShouldEnableNext();
end;
}
modify(ExpertModeSelected)
{
trigger OnAfterValidate()
begin
if IsExpertModeSelected() then begin
SetExportModeSelected(false);
SetImportModeSelected(false);
end;
ShouldNextBeEnabled := ShouldEnableNext();
end;
}
}
actions
{
addafter(ActionBack)
{
action(ActionNext)
{
ApplicationArea = All;
Caption = 'Next';
Enabled = ShouldNextBeEnabled;
Image = NextRecord;
InFooterBar = true;
trigger OnAction()
begin
GoNext();
end;
}
}
}
trigger OnOpenPage()
begin
ShouldNextBeEnabled := true;
end;
var
StepValues: Option Welcome,"Choose Mode","Set Rules",Apply,Verify,"Verify Related Fields",Finish;
ShouldNextBeEnabled: Boolean;
local procedure GoNext()
begin
case GetStep() of
StepValues::"Choose Mode":
ChooseModeStep();
StepValues::Apply:
ApplyStep();
StepValues::"Set Rules":
SetRulesStep();
else
NextStep(false);
end;
ShouldNextBeEnabled := IsNextEnabled();
end;
local procedure ChooseModeStep()
var
DataSensitivity: Record "Data Sensitivity";
DataClassificationMgt: Codeunit "Data Classification Mgt.";
DataClassifImportExport: Codeunit "Data Classif. Import/Export";
begin
if IsImportModeSelected() then begin
DataClassifImportExport.ImportExcelSheet();
SetStepToFinishAndResetControls();
end;
if IsExportModeSelected() then begin
DataClassifImportExport.ExportToExcelSheet();
SetStepToFinishAndResetControls();
end;
if IsExpertModeSelected() then begin
DataSensitivity.SetRange("Company Name", CompanyName);
if DataSensitivity.IsEmpty() then
DataClassificationMgt.PopulateDataSensitivityTable();
NextStep(false);
end;
end;
local procedure SetStepToFinishAndResetControls()
begin
SetStep(StepValues::Finish);
ResetControls();
end;
local procedure ApplyStep()
var
DataClassificationMgt: Codeunit "Data Classification Mgt.";
begin
DataClassificationMgt.SetDefaultDataSensitivity(Rec);
Rec.SetRange(Include, true);
NextStep(false);
end;
local procedure SetRulesStep()
var
DataSensitivity: Record "Data Sensitivity";
DataClassificationMgt: Codeunit "Data Classification Mgt.";
begin
DataSensitivity.SetRange("Company Name", CompanyName);
DataSensitivity.SetRange("Data Sensitivity", DataSensitivity."Data Sensitivity"::Unclassified);
DataSensitivity.SetFilter("Table No", GetTableNoFilterForTablesWhoseNameContains('Entry'));
DataClassificationMgt.SetSensitivities(DataSensitivity, GetLedgerEntriesDefaultClassification());
DataSensitivity.SetFilter("Table No", GetTableNoFilterForTablesWhoseNameContains('Template'));
DataClassificationMgt.SetSensitivities(DataSensitivity, GetTemplatesDefaultClassification());
DataSensitivity.SetFilter("Table No", GetTableNoFilterForTablesWhoseNameContains('Setup'));
DataClassificationMgt.SetSensitivities(DataSensitivity, GetSetupTablesDefaultClassification());
NextStep(false);
end;
local procedure GetTableNoFilterForTablesWhoseNameContains(Name: Text): Text
var
"Field": Record "Field";
RecRef: RecordRef;
begin
Field.SetRange(DataClassification, Field.DataClassification::CustomerContent);
Field.SetFilter(ObsoleteState, '<>%1', Field.ObsoleteState::Removed);
Field.SetFilter(TableName, StrSubstNo('*%1*', Name));
RecRef.GetTable(Field);
exit(GetFilterTextForFieldValuesInTable(RecRef, Field.FieldNo(TableNo)));
end;
local procedure GetFilterTextForFieldValuesInTable(var RecRef: RecordRef; FieldNo: Integer): Text
var
FilterText: Text;
begin
if RecRef.FindSet() then begin
repeat
FilterText := StrSubstNo('%1|%2', FilterText, RecRef.Field(FieldNo));
until RecRef.Next() = 0;
// remove the first vertical bar from the filter text
FilterText := DelChr(FilterText, '<', '|');
end;
exit(FilterText);
end;
}