Page 565 CrossIntercompany Modify Setup
- App
- Base Application
- Namespace
- Microsoft.Intercompany.DataExchange
- Versions
- 23-28
- Source table
- 413
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Finance/Intercompany/DataExchange/CrossIntercompanyModifySetup.Page.al186 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.Intercompany.DataExchange;
using Microsoft.Intercompany.Partner;
/// <summary>
/// Dialog page for modifying intercompany partner external connection settings and API configuration.
/// Allows users to update connection details, authentication settings, and data exchange parameters for cross-company transactions.
/// </summary>
page 565 "CrossIntercompany Modify Setup"
{
ApplicationArea = Intercompany;
Caption = 'Intercompany External Setup';
PageType = StandardDialog;
SourceTable = "IC Partner";
UsageCategory = None;
layout
{
area(Content)
{
group(DataExchangeInformation)
{
ShowCaption = false;
field("Code"; Rec.Code)
{
Caption = 'IC Partner Code';
ApplicationArea = Intercompany;
ToolTip = 'Specifies the intercompany partner code.';
Enabled = false;
Editable = false;
}
field(ConnectionUrl; ConnectionUrl)
{
Caption = 'IC Partner''s Connection URL';
ApplicationArea = Intercompany;
Importance = Additional;
ToolTip = 'Specifies the connection URL for the intercompany partner''s environment.';
}
field(CompanyId; CompanyId)
{
Caption = 'IC Partner''s Company ID';
ApplicationArea = Intercompany;
Importance = Additional;
ToolTip = 'Specifies the intercompany partner''s company ID in their environment.';
}
field(ClientId; ClientId)
{
Caption = 'Client ID';
ApplicationArea = Intercompany;
Importance = Additional;
ToolTip = 'Specifies the client ID of the Microsoft Entra authentication application.';
}
field(ClientSecret; NewClientSecret)
{
Caption = 'Client Secret';
ApplicationArea = Intercompany;
Importance = Additional;
ExtendedDatatype = Masked;
ToolTip = 'Specifies the client secret of the Microsoft Entra authentication application.';
trigger OnValidate()
begin
if NewClientSecret <> ClientSecretTok then
ClientSecretModified := true;
end;
}
field(TokenEndpoint; TokenEndpoint)
{
Caption = 'Token Endpoint';
ApplicationArea = Intercompany;
Importance = Additional;
ToolTip = 'Specifies the OAuth 2.0 token endpoint of the Microsoft Entra authentication application.';
}
field(RedirectUrl; RedirectUrl)
{
Caption = 'Redirect URL';
ApplicationArea = Intercompany;
Importance = Additional;
ToolTip = 'Specifies the OAuth 2.0 redirect URL of the Microsoft Entra authentication application.';
// The connector always uses the environment's default redirect URL, so this field is hidden to avoid promising configurable behavior.
Visible = false;
}
}
}
}
trigger OnOpenPage()
begin
PopulatePartnerSensibleDetails();
ClientSecretModified := false;
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean
var
TempICPartner: Record "IC Partner" temporary;
begin
if CloseAction <> CloseAction::OK then
exit(true);
SaveConfigurationToTemporaryPartner(TempICPartner);
if not AreNewConnectionDetailsValid(TempICPartner) then begin
Message(GetLastErrorText());
exit(false);
end;
Rec."Connection Url Key" := TempICPartner."Connection Url Key";
Rec."Company Id Key" := TempICPartner."Company Id Key";
Rec."Client Id Key" := TempICPartner."Client Id Key";
Rec."Client Secret Key" := TempICPartner."Client Secret Key";
Rec."Token Endpoint Key" := TempICPartner."Token Endpoint Key";
Rec."Redirect Url Key" := TempICPartner."Redirect Url Key";
Rec.Modify(true);
exit(true);
end;
[TryFunction]
local procedure AreNewConnectionDetailsValid(var TempICPartner: Record "IC Partner" temporary)
var
CrossIntercompanyConnector: Codeunit "CrossIntercompany Connector";
begin
CrossIntercompanyConnector.TestICPartnerSetup(TempICPartner);
CrossIntercompanyConnector.FinishICPartnerSetup(TempICPartner);
end;
var
[NonDebuggable]
NewClientSecret: Text;
ClientSecretModified: Boolean;
ConnectionUrl, TokenEndpoint, RedirectUrl : Text;
CompanyId, ClientId : Guid;
ClientSecretTok: Label '*********', Locked = true;
[NonDebuggable]
local procedure PopulatePartnerSensibleDetails()
var
ICPartnerChangeMonitor: Codeunit "IC Partner Change Monitor";
begin
ICPartnerChangeMonitor.CheckHasPermissionsToChangeSensitiveFields();
ConnectionUrl := Rec.GetSecret(Rec."Connection Url Key").Unwrap();
if not Rec.GetSecret(Rec."Company Id Key").IsEmpty() then
CompanyId := Rec.GetSecret(Rec."Company Id Key").Unwrap();
if not Rec.GetSecret(Rec."Client Id Key").IsEmpty() then
ClientId := Rec.GetSecret(Rec."Client Id Key").Unwrap();
NewClientSecret := ClientSecretTok;
TokenEndpoint := Rec.GetSecret(Rec."Token Endpoint Key").Unwrap();
RedirectUrl := Rec.GetSecret(Rec."Redirect Url Key").Unwrap();
end;
local procedure SaveConfigurationToTemporaryPartner(var TempICPartner: Record "IC Partner" temporary)
var
ICPartnerChangeMonitor: Codeunit "IC Partner Change Monitor";
CompanyIdentification, Auth2ClientId : SecretText;
begin
ICPartnerChangeMonitor.CheckHasPermissionsToChangeSensitiveFields();
TempICPartner.Reset();
CompanyIdentification := Format(CompanyId);
Auth2ClientId := Format(ClientId);
TempICPartner.Code := Rec.Code;
TempICPartner.Name := Rec.Name;
TempICPartner."Inbox Details" := Rec."Inbox Details";
TempICPartner."Connection Url Key" := TempICPartner.SetSecret(TempICPartner."Connection Url Key", ConnectionUrl);
TempICPartner."Company Id Key" := TempICPartner.SetSecret(TempICPartner."Company Id Key", CompanyIdentification);
TempICPartner."Client Id Key" := TempICPartner.SetSecret(TempICPartner."Client Id Key", Auth2ClientId);
TempICPartner."Token Endpoint Key" := TempICPartner.SetSecret(TempICPartner."Token Endpoint Key", TokenEndpoint);
TempICPartner."Redirect Url Key" := TempICPartner.SetSecret(TempICPartner."Redirect Url Key", RedirectUrl);
TempICPartner."Token Expiration Time" := CurrentDateTime;
if ClientSecretModified then
TempICPartner."Client Secret Key" := TempICPartner.SetSecret(TempICPartner."Client Secret Key", NewClientSecret)
else
TempICPartner."Client Secret Key" := Rec."Client Secret Key";
TempICPartner."Inbox Type" := Enum::Microsoft.Intercompany.Partner."IC Partner Inbox Type"::Database;
TempICPartner."Data Exchange Type" := Enum::"IC Data Exchange Type"::API;
TempICPartner.Insert();
end;
}