Codeunit 9087 Microsoft 365 License Impl., source in 27
Source242526272829metadata in 27
src/System Application/App/Azure AD Plan/src/Plan Configuration/Microsoft365LicenseImpl.Codeunit.al121 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.Azure.Identity;
using System.Environment;
using System.Security.AccessControl;
using System.Telemetry;
codeunit 9087 "Microsoft 365 License Impl."
{
Access = Internal;
InherentEntitlements = X;
InherentPermissions = X;
Permissions = tabledata "Aggregate Permission Set" = r,
tabledata "Custom Permission Set In Plan" = r,
tabledata "Plan Configuration" = rm,
tabledata "Company" = r;
procedure ShowM365ConfigurationNotification()
var
M365ConfigurationNotification: Notification;
begin
M365ConfigurationNotification.Id := CreateGuid();
M365ConfigurationNotification.Message(M365ConfigurationNotificationTxt);
M365ConfigurationNotification.AddAction(AddPermissionsTok, Codeunit::"Microsoft 365 License Impl.", 'AssignD365ReadPermission');
M365ConfigurationNotification.AddAction(LearnMoreTok, Codeunit::"Microsoft 365 License Impl.", 'OpenM365LicenseDocumentation');
M365ConfigurationNotification.Scope := NotificationScope::LocalScope;
M365ConfigurationNotification.Send();
end;
procedure AssignMicrosoft365ReadPermission(ShowNotification: Boolean)
var
AggregatePermissionSet: Record "Aggregate Permission Set";
CustomPermissionSetInPlan: Record "Custom Permission Set In Plan";
PlanConfigurationRec: Record "Plan Configuration";
PlanConfiguration: Codeunit "Plan Configuration";
PlanIds: Codeunit "Plan Ids";
begin
AggregatePermissionSet.SetRange("Role ID", D365ReadTok);
AggregatePermissionSet.FindFirst();
PlanConfigurationRec.SetRange("Plan ID", PlanIds.GetMicrosoft365PlanId());
PlanConfigurationRec.FindFirst();
// Transfer Default Permission Set to Custom (and set license Customized)
TransferDefaultPermissions(PlanConfigurationRec, ShowNotification);
// Insert 'M365 Read' in Custom Permission Plan
PlanConfiguration.AddCustomPermissionSetToPlan(PlanIds.GetMicrosoft365PlanId(),
AggregatePermissionSet."Role ID",
AggregatePermissionSet."App ID",
AggregatePermissionSet.Scope,
CopyStr(CompanyName(), 1, MaxStrLen(CustomPermissionSetInPlan."Company Name")));
end;
procedure OpenBCAdminCenter()
begin
PlanConfigurationImpl.OpenBCAdminCenter();
end;
procedure OpenM365AdminCenter()
begin
PlanConfigurationImpl.OpenM365AdminCenter();
end;
local procedure TransferDefaultPermissions(var Rec: Record "Plan Configuration"; ShowNotification: Boolean)
var
FeatureTelemetry: Codeunit "Feature Telemetry";
TelemetryDimensions: Dictionary of [Text, Text];
begin
Rec.Customized := true;
Rec.Modify();
TelemetryDimensions.Add('Customized', Format(Rec.Customized));
TelemetryDimensions.Add('PlanId', Format(Rec."Plan ID", 0, 4));
FeatureTelemetry.LogUptake('0000GLS', PlanConfigurationFeatureNameTok, Enum::"Feature Uptake Status"::"Set up", TelemetryDimensions);
Session.LogSecurityAudit(PlanConfigurationFeatureNameTok, SecurityOperationResult::Success,
StrSubstNo(PlanConfigurationUpdatedLbl, Rec."Plan ID", Rec.Customized), AuditCategory::UserManagement);
PlanConfigurationImpl.TransferPermissions(Rec."Plan ID");
if ShowNotification then
PlanConfigurationImpl.ShowCustomPermissionsEffectNotification(Rec);
end;
[EventSubscriber(ObjectType::Page, Page::"Plan Configuration Card", OnOpenPageEvent, '', false, false)]
local procedure ShowM365LicenseNotification(var Rec: Record "Plan Configuration")
var
Company: Record "Company";
PlanIds: Codeunit "Plan Ids";
begin
if Rec."Plan ID" = PlanIds.GetMicrosoft365PlanId() then begin
Company.Get(CompanyName());
if (not Rec.Customized) and Company."Evaluation Company" then
ShowM365ConfigurationNotification();
end;
end;
internal procedure AssignD365ReadPermission(Notification: Notification)
begin
AssignMicrosoft365ReadPermission(true);
end;
internal procedure OpenM365LicenseDocumentation(Notification: Notification)
begin
Hyperlink(M365LicenseDocumentationLinkTxt);
end;
var
PlanConfigurationImpl: Codeunit "Plan Configuration Impl.";
D365ReadTok: Label 'D365 READ', Locked = true;
M365LicenseDocumentationLinkTxt: Label 'https://go.microsoft.com/fwlink/?linkid=2209653', Locked = true;
PlanConfigurationFeatureNameTok: Label 'Custom Permissions Assignment Per Plan', Locked = true;
PlanConfigurationUpdatedLbl: Label 'Plan Configuration was modified for plan %1. Customized: %2.', Locked = true;
M365ConfigurationNotificationTxt: Label 'Just trying this out? Start by adding ''D365 READ'' permissions to all objects to experience how employees across the organization can read Business Central data in Microsoft Teams using only their Microsoft 365 license.', Comment = 'Do not translate ''D365 READ'', ''Business Central'', ''Microsoft Teams'' and ''Microsoft 365''';
LearnMoreTok: Label 'Learn more';
AddPermissionsTok: Label 'Add permissions to all objects';
}