Codeunit 8704 Feature Telemetry Impl. in 25
- App
- System Application
- Namespace
- System.Telemetry
Versions171819202122232425262728latest
Source in 25
src/System Application/App/Telemetry/src/Feature Telemetry/FeatureTelemetryImpl.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.Telemetry;
using System.Environment;
using System.Globalization;
codeunit 8704 "Feature Telemetry Impl."
{
Access = Internal;
InherentEntitlements = X;
InherentPermissions = X;
var
FeatureUptakeStatusImpl: Codeunit "Feature Uptake Status Impl.";
UptakeLbl: Label 'Feature %1 is %2', Locked = true, Comment = '%1 - feature name; %2 - uptake status, for example, Discovered';
procedure LogUsage(EventId: Text; FeatureName: Text; EventName: Text; CallerCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo)
var
UsageCustomDimensions: Dictionary of [Text, Text];
begin
UsageCustomDimensions.Add('Category', 'FeatureTelemetry');
UsageCustomDimensions.Add('SubCategory', 'Usage');
UsageCustomDimensions.Add('FeatureName', FeatureName);
UsageCustomDimensions.Add('EventName', EventName);
LogMessage(EventId, EventName, Verbosity::Normal, CallerCustomDimensions, UsageCustomDimensions, CallerModuleInfo);
end;
procedure LogUsage(EventId: Text; FeatureName: Text; EventName: Text; CallerCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo; CallerCallStackModuleInfos: List of [ModuleInfo])
var
UsageCustomDimensions: Dictionary of [Text, Text];
begin
UsageCustomDimensions.Add('Category', 'FeatureTelemetry');
UsageCustomDimensions.Add('SubCategory', 'Usage');
UsageCustomDimensions.Add('FeatureName', FeatureName);
UsageCustomDimensions.Add('EventName', EventName);
LogMessage(EventId, EventName, Verbosity::Normal, CallerCustomDimensions, UsageCustomDimensions, CallerModuleInfo, CallerCallStackModuleInfos);
end;
procedure LogError(EventId: Text; FeatureName: Text; EventName: Text; ErrorText: Text; ErrorCallStack: Text; CallerCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo)
var
ErrorCustomDimensions: Dictionary of [Text, Text];
begin
ErrorCustomDimensions.Add('Category', 'FeatureTelemetry');
ErrorCustomDimensions.Add('SubCategory', 'Error');
ErrorCustomDimensions.Add('FeatureName', FeatureName);
ErrorCustomDimensions.Add('EventName', EventName);
ErrorCustomDimensions.Add('ErrorText', ErrorText);
ErrorCustomDimensions.Add('ErrorCallStack', ErrorCallStack);
LogMessage(EventId, ErrorText, Verbosity::Error, CallerCustomDimensions, ErrorCustomDimensions, CallerModuleInfo);
end;
procedure LogError(EventId: Text; FeatureName: Text; EventName: Text; ErrorText: Text; ErrorCallStack: Text; CallerCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo; CallerCallStackModuleInfos: List of [ModuleInfo])
var
ErrorCustomDimensions: Dictionary of [Text, Text];
begin
ErrorCustomDimensions.Add('Category', 'FeatureTelemetry');
ErrorCustomDimensions.Add('SubCategory', 'Error');
ErrorCustomDimensions.Add('FeatureName', FeatureName);
ErrorCustomDimensions.Add('EventName', EventName);
ErrorCustomDimensions.Add('ErrorText', ErrorText);
ErrorCustomDimensions.Add('ErrorCallStack', ErrorCallStack);
LogMessage(EventId, ErrorText, Verbosity::Error, CallerCustomDimensions, ErrorCustomDimensions, CallerModuleInfo, CallerCallStackModuleInfos);
end;
procedure LogUptake(EventId: Text; FeatureName: Text; FeatureUptakeStatus: Enum "Feature Uptake Status"; IsPerUser: Boolean; CallerCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo)
var
EnvironmentInformation: Codeunit "Environment Information";
Language: Codeunit Language;
UptakeCustomDimensions: Dictionary of [Text, Text];
FeatureUptakeStatusText: Text;
EventName: Text;
CurrentLanguage: Integer;
IsExpectedUpdate: Boolean;
begin
CurrentLanguage := GlobalLanguage();
GlobalLanguage(Language.GetDefaultApplicationLanguageId());
FeatureUptakeStatusText := Format(FeatureUptakeStatus);
EventName := StrSubstNo(UptakeLbl, FeatureName, FeatureUptakeStatusText);
UptakeCustomDimensions.Add('Category', 'FeatureTelemetry');
UptakeCustomDimensions.Add('SubCategory', 'Uptake');
UptakeCustomDimensions.Add('FeatureName', FeatureName);
UptakeCustomDimensions.Add('EventName', EventName);
UptakeCustomDimensions.Add('FeatureUptakeStatus', FeatureUptakeStatusText);
UptakeCustomDimensions.Add('IsPerUser', Format(IsPerUser));
if EnvironmentInformation.CanStartSession() then begin
IsExpectedUpdate := FeatureUptakeStatusImpl.UpdateFeatureUptakeStatus(FeatureName, FeatureUptakeStatus, IsPerUser, true, CallerModuleInfo.Publisher);
UptakeCustomDimensions.Add('IsExpectedUpdate', Format(IsExpectedUpdate));
end;
GlobalLanguage(CurrentLanguage);
LogMessage(EventId, EventName, Verbosity::Normal, CallerCustomDimensions, UptakeCustomDimensions, CallerModuleInfo);
end;
local procedure LogMessage(EventId: Text; Message: Text; Verbosity: Verbosity; CallerCustomDimensions: Dictionary of [Text, Text]; EventCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo)
var
TelemetryImpl: Codeunit "Telemetry Impl.";
begin
TelemetryImpl.AddCustomDimensionsSafely(EventCustomDimensions, CallerCustomDimensions);
TelemetryImpl.LogMessage(EventId, Message, Verbosity, DataClassification::SystemMetadata, TelemetryScope::All, EventCustomDimensions, CallerModuleInfo);
end;
local procedure LogMessage(EventId: Text; Message: Text; Verbosity: Verbosity; CallerCustomDimensions: Dictionary of [Text, Text]; EventCustomDimensions: Dictionary of [Text, Text]; CallerModuleInfo: ModuleInfo; CallerCallStackModuleInfos: List of [ModuleInfo])
var
TelemetryImpl: Codeunit "Telemetry Impl.";
begin
TelemetryImpl.AddCustomDimensionsSafely(EventCustomDimensions, CallerCustomDimensions);
TelemetryImpl.LogMessage(EventId, Message, Verbosity, DataClassification::SystemMetadata, Enum::"AL Telemetry Scope"::All, EventCustomDimensions, CallerModuleInfo, CallerCallStackModuleInfos);
end;
}Procedures, 5
| Name | Parameters | Returns | Access | Obsolete |
|---|---|---|---|---|
| LogUsage | (Text, Text, Text, Dictionary, ModuleInfo) | public | - | |
| LogError | (Text, Text, Text, Text, Text, Dictionary, ModuleInfo) | public | - | |
| LogUptake | (Text, Text, Enum Feature Uptake Status, Boolean, Dictionary, ModuleInfo) | public | - | |
| LogUsage | (Text, Text, Text, Dictionary, ModuleInfo, List) | public | - | |
| LogError | (Text, Text, Text, Text, Text, Dictionary, ModuleInfo, List) | public | - |