Table 7121 Contact Sync User
- App
- Base Application
- Namespace
- Microsoft.CRM.Outlook
- Versions
- 28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/CRM/Outlook/ContactSyncUser.Table.al128 lines, Copyright (c) Microsoft Corporation. MIT
namespace Microsoft.CRM.Outlook;
using System.Security.AccessControl;
using System.Utilities;
table 7121 "Contact Sync User"
{
Caption = 'Contact Sync User';
DataClassification = CustomerContent;
fields
{
field(1; "ID"; Integer)
{
Caption = 'ID';
DataClassification = SystemMetadata;
AutoIncrement = true;
}
field(2; "User ID"; Code[50])
{
Caption = 'User ID';
DataClassification = EndUserIdentifiableInformation;
NotBlank = true;
TableRelation = User."User Name";
ValidateTableRelation = false;
}
field(3; "Last Sync Date Time"; DateTime)
{
Caption = 'Last Sync Date Time';
DataClassification = SystemMetadata;
Editable = false;
}
field(4; "Folder ID"; Text[250])
{
DataClassification = SystemMetadata;
Caption = 'Folder ID';
}
field(5; "Delta Url"; Text[2048])
{
DataClassification = SystemMetadata;
Caption = 'Delta URL';
}
field(6; "Folder Name"; Text[250])
{
DataClassification = SystemMetadata;
Caption = 'Folder Name';
}
}
keys
{
key(PK; "ID")
{
Clustered = true;
}
key(UserFolder; "User ID", "Folder ID")
{
}
key(FolderEmail; "Folder ID")
{
}
key(UserFolderSync; "User ID", "Folder ID", "Last Sync Date Time")
{
}
}
procedure SetDeltaUrl(NewDeltaUrl: Text)
begin
if "ID" = 0 then
exit;
if not ValidateApprovedGraphDeltaUrl(NewDeltaUrl) then
exit;
"Delta Url" := CopyStr(NewDeltaUrl, 1, MaxStrLen("Delta Url"));
if StrLen(NewDeltaUrl) > MaxStrLen("Delta Url") then
Session.LogMessage('0000SET', StrSubstNo(DeltaUrlTruncatedTelemetryMsg, StrLen(NewDeltaUrl)), Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', 'Contact Sync');
Modify();
end;
procedure GetDeltaUrl(): Text
begin
exit("Delta Url");
end;
internal procedure EnforceRecordOwnership()
begin
if Session.GetExecutionContext() in [ExecutionContext::Install, ExecutionContext::Upgrade] then
exit;
if "User ID" <> CopyStr(UserId(), 1, MaxStrLen("User ID")) then
Error(CannotModifyOtherUsersSyncErr);
end;
internal procedure EnforceRecordOwnershipOnModify(OriginalUserId: Code[50])
begin
if Session.GetExecutionContext() in [ExecutionContext::Install, ExecutionContext::Upgrade] then
exit;
if "User ID" <> OriginalUserId then
Error(CannotChangeRecordOwnerErr);
if OriginalUserId <> CopyStr(UserId(), 1, MaxStrLen("User ID")) then
Error(CannotModifyOtherUsersSyncErr);
end;
internal procedure ValidateApprovedGraphDeltaUrl(DeltaUrlToValidate: Text): Boolean
var
Uri: Codeunit Uri;
IsApproved: Boolean;
begin
if DeltaUrlToValidate = '' then
exit(true);
IsApproved := Uri.ValidateIntegrationURL(LowerCase(DeltaUrlToValidate), LowerCase(GraphUrlPrefixLbl)) = LowerCase(DeltaUrlToValidate);
if not IsApproved then
Session.LogMessage('0000V1Y', StrSubstNo(DeltaUrlValidationTelemetryMsg, DeltaUrlToValidate, IsApproved, InvalidDeltaUrlErr), Verbosity::Warning, DataClassification::SystemMetadata, TelemetryScope::ExtensionPublisher, 'Category', 'Contact Sync');
exit(IsApproved);
end;
var
DeltaUrlTruncatedTelemetryMsg: Label 'Delta URL was truncated for user Original length: %1', Locked = true, Comment = '%1 = original Delta URL length';
CannotModifyOtherUsersSyncErr: Label 'You can only modify Contact Sync settings for your own user.';
CannotChangeRecordOwnerErr: Label 'You cannot change the owner of an existing Contact Sync record.';
InvalidDeltaUrlErr: Label 'The Delta URL must be an HTTPS Microsoft Graph URL.';
GraphUrlPrefixLbl: Label 'https://graph.microsoft.com/v1.0/', Locked = true;
DeltaUrlValidationTelemetryMsg: Label 'Contact Sync delta URL validation. URL: %1; Approved: %2; context : %3', Locked = true, Comment = '%1 = delta URL, %2 = whether URL is approved, %3 = invalid delta url';
}