Codeunit 3900 Retention Period Impl. in 26
- App
- System Application
- Namespace
- System.DataAdministration
Versions171819202122232425262728latest
Source in 26
src/System Application/App/Retention Policy/src/Retention Period/RetentionPeriodImpl.Codeunit.al113 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 System.DataAdministration;
codeunit 3900 "Retention Period Impl." implements "Retention Period"
{
Access = Internal;
InherentEntitlements = X;
InherentPermissions = X;
var
FutureDateCalcErr: Label 'The date formula (%1) must result in a date that is at least two days before the current date. For example, to calculate a period for the past week, month, or year, use either -1W, -1M, or -1Y.', Comment = '%1 = a date formula';
MaxDateDateFormulaTxt: Label '<+CY+%1Y>', Locked = true;
WrongInterfaceImplementationErr: Label 'This implementation of the interface does not support the enum value selected. Contact your Microsoft partner for assistance. The following information can help them address the issue: Value: %1, Interface: Interface Retention Period, Implementation: codeunit 3900 Retention Period Impl.', Comment = '%1 = a value such as 1 Week, 1 Month, 3 Months, or Custom.';
local procedure RetentionPeriodDateFormula(RetentionPeriod: Enum "Retention Period Enum"; Translated: Boolean): Text;
var
RetentionPolicyLog: Codeunit "Retention Policy Log";
PeriodDateFormula: DateFormula;
begin
case RetentionPeriod of
RetentionPeriod::"Never Delete":
Evaluate(PeriodDateFormula, StrSubstNo(MaxDateDateFormulaTxt, 9999 - Date2DMY(Today(), 3)));
RetentionPeriod::"1 Week":
Evaluate(PeriodDateFormula, '<-1W>');
RetentionPeriod::"28 Days":
Evaluate(PeriodDateFormula, '<-28D>');
RetentionPeriod::"1 Month":
Evaluate(PeriodDateFormula, '<-1M>');
RetentionPeriod::"3 Months":
Evaluate(PeriodDateFormula, '<-3M>');
RetentionPeriod::"6 Months":
Evaluate(PeriodDateFormula, '<-6M>');
RetentionPeriod::"1 Year":
Evaluate(PeriodDateFormula, '<-1Y>');
RetentionPeriod::"3 Years":
Evaluate(PeriodDateFormula, '<-3Y>');
RetentionPeriod::"5 Years":
Evaluate(PeriodDateFormula, '<-5Y>');
else
RetentionPolicyLog.LogError(LogCategory(), StrSubstNo(WrongInterfaceImplementationErr, RetentionPeriod));
end;
if Translated then
exit(Format(PeriodDateFormula, 0, 1))
else
exit(Format(PeriodDateFormula, 0, 2))
end;
procedure RetentionPeriodDateFormula(RetentionPeriod: Record "Retention Period"): Text
begin
exit(RetentionPeriodDateFormula(RetentionPeriod, false));
end;
procedure RetentionPeriodDateFormula(RetentionPeriod: Record "Retention Period"; Translated: Boolean) DateFormulaText: Text
var
RetentionPolicyLog: Codeunit "Retention Policy Log";
begin
DateFormulaText := RetentionPeriodDateFormula(RetentionPeriod."Retention Period", Translated);
if DateFormulaText = '' then
RetentionPolicyLog.LogError(LogCategory(), StrSubstNo(WrongInterfaceImplementationErr, RetentionPeriod."Retention Period"));
end;
procedure CalculateExpirationDate(RetentionPeriod: Record "Retention Period"): Date
begin
exit(CalcDate(RetentionPeriodDateFormula(RetentionPeriod), Today()))
end;
procedure CalculateExpirationDate(RetentionPeriod: Record "Retention Period"; UseDate: Date): Date
begin
exit(CalcDate(RetentionPeriodDateFormula(RetentionPeriod), UseDate))
end;
procedure CalculateExpirationDate(RetentionPeriod: Record "Retention Period"; UseDateTime: DateTime): DateTime
var
UseTime: Time;
begin
if RetentionPeriod."Retention Period" = RetentionPeriod."Retention Period"::"Never Delete" then
UseTime := 235959.999T
else
UseTime := DT2Time(UseDateTime);
exit(CreateDateTime(CalcDate(RetentionPeriodDateFormula(RetentionPeriod), DT2Date(UseDateTime)), UseTime))
end;
procedure ValidateRetentionPeriodDateFormula(DateFormula: DateFormula)
var
RetentionPolicyLog: Codeunit "Retention Policy Log";
begin
if Format(DateFormula) <> '' then
if IsFutureDateFormula(DateFormula) then
RetentionPolicyLog.LogError(LogCategory(), StrSubstNo(FutureDateCalcErr, DateFormula));
end;
local procedure IsFutureDateFormula(DateFormula: DateFormula): Boolean
begin
exit(CalcDate(DateFormula, Today()) >= Yesterday());
end;
local procedure Yesterday(): Date
begin
exit(CalcDate('<-1D>', Today()))
end;
local procedure LogCategory(): Enum "Retention Policy Log Category"
var
RetentionPolicyLogCategory: Enum "Retention Policy Log Category";
begin
exit(RetentionPolicyLogCategory::"Retention Policy - Period");
end;
}Procedures, 6
| Name | Parameters | Returns | Access | Obsolete |
|---|---|---|---|---|
| RetentionPeriodDateFormula | (Record Retention Period) | Text | public | - |
| RetentionPeriodDateFormula | (Record Retention Period, Boolean) | Text | public | - |
| CalculateExpirationDate | (Record Retention Period) | Date | public | - |
| CalculateExpirationDate | (Record Retention Period, Date) | Date | public | - |
| CalculateExpirationDate | (Record Retention Period, DateTime) | DateTime | public | - |
| ValidateRetentionPeriodDateFormula | (DateFormula) | public | - |