Resolving Codeunit 6303 Azure AD Auth Flow Compilation Error
This article explains how to resolve the compilation error that you get for Codeunit 6303 Azure AD Auth Flow when converting a Microsoft Dynamics NAV 2016 database to Microsoft Dynamics NAV 2018.
To resolve this error, you can update Codeunit 6303 Azure AD Auth Flow in the converted database to support the latest platform changes by replacing its code with the code that follows:
- Copy the code to a text editor, and save it as a .txt file type.
- Use the Microsoft Dynamics NAV Development Environment to import and compile the file to the converted database.
Note
If the Codeunit 6303 Azure AD Auth Flow object in your database includes custom code, then you might have to resolve conflicts with your custom code.
OBJECT Codeunit 6303 Azure AD Auth Flow
{
OBJECT-PROPERTIES
{
Date=;
Time=;
Version List=;
}
PROPERTIES
{
OnRun=BEGIN
END;
}
CODE
{
VAR
AuthFlow@1000 : DotNet "'Microsoft.Dynamics.Nav.Ncl, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Runtime.ALAzureAdCodeGrantFlow";
ProviderNotInitializedErr@1001 : TextConst 'ENU=The Azure AD Authentication Flow provider has not been initialized.';
PROCEDURE CanHandle@11() : Boolean;
VAR
AzureADMgtSetup@1000 : Record 6303;
BEGIN
IF AzureADMgtSetup.GET THEN
EXIT(AzureADMgtSetup."Auth Flow Codeunit ID" = CODEUNIT::"Azure AD Auth Flow");
EXIT(FALSE);
END;
PROCEDURE Initialize@1(SecurityId@1000 : GUID;RedirectUri@1001 : Text);
VAR
Uri@1002 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Uri";
BEGIN
IF CanHandle THEN
AuthFlow := AuthFlow.ALAzureAdCodeGrantFlow(Uri.Uri(RedirectUri))
ELSE
OnInitialize(SecurityId,RedirectUri,AuthFlow);
END;
PROCEDURE AcquireTokenByAuthorizationCode@2(AuthorizationCode@1000 : Text;ResourceName@1001 : Text) AccessToken : Text;
BEGIN
CheckProvider;
IF CanHandle THEN
AccessToken := AuthFlow.ALAcquireTokenByAuthorizationCode(AuthorizationCode,ResourceName)
ELSE
OnAcquireTokenByAuthorizationCode(AuthorizationCode,ResourceName,AccessToken);
END;
PROCEDURE AcquireTokenByAuthorizationCodeWithCredentials@3(AuthorizationCode@1000 : Text;ClientID@1002 : Text;ApplicationKey@1003 : Text;ResourceName@1001 : Text) AccessToken : Text;
BEGIN
CheckProvider;
IF CanHandle THEN
AccessToken := AuthFlow.ALAcquireTokenByAuthorizationCodeWithCredentials(AuthorizationCode,ClientID,ApplicationKey,ResourceName)
ELSE
OnAcquireTokenByAuthorizationCodeWithCredentials(AuthorizationCode,ClientID,ApplicationKey,ResourceName,AccessToken);
END;
PROCEDURE AcquireTokenFromCache@4(ResourceName@1000 : Text) AccessToken : Text;
BEGIN
CheckProvider;
IF CanHandle THEN
AccessToken := AuthFlow.ALAcquireTokenFromCache(ResourceName)
ELSE
OnAcquireTokenFromCache(ResourceName,AccessToken);
END;
PROCEDURE AcquireTokenFromCacheWithCredentials@5(ClientID@1000 : Text;AppKey@1001 : Text;ResourceName@1002 : Text) AccessToken : Text;
BEGIN
CheckProvider;
IF CanHandle THEN
AccessToken := AuthFlow.ALAcquireTokenFromCacheWithCredentials(ClientID,AppKey,ResourceName)
ELSE
OnAcquireTokenFromCacheWithCredentials(ClientID,AppKey,ResourceName,AccessToken);
END;
PROCEDURE GetSaasClientId@15() ClientID : Text;
BEGIN
CheckProvider;
IF CanHandle THEN
ClientID := AuthFlow.ALGetSaasClientId
ELSE
OnGetSaasClientId(ClientID);
END;
PROCEDURE CreateExchangeServiceWrapperWithToken@14(Token@1000 : Text;VAR Service@1002 : DotNet "'Microsoft.Dynamics.Nav.EwsWrapper, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Exchange.ExchangeServiceWrapper");
VAR
ServiceFactory@1003 : DotNet "'Microsoft.Dynamics.Nav.EwsWrapper, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Exchange.ServiceWrapperFactory";
BEGIN
IF CanHandle THEN
Service := ServiceFactory.CreateServiceWrapperWithToken(Token)
ELSE
OnCreateExchangeServiceWrapperWithToken(Token,Service);
END;
LOCAL PROCEDURE CheckProvider@35();
VAR
Initialized@1000 : Boolean;
BEGIN
IF CanHandle THEN
Initialized := NOT ISNULL(AuthFlow)
ELSE
OnCheckProvider(Initialized);
IF NOT Initialized THEN
ERROR(ProviderNotInitializedErr);
END;
[Integration]
LOCAL PROCEDURE OnInitialize@6(SecurityId@1000 : GUID;RedirectUri@1001 : Text;VAR AzureADAuthFlow@1003 : DotNet "'Microsoft.Dynamics.Nav.Ncl, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Runtime.ALAzureAdCodeGrantFlow");
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnAcquireTokenByAuthorizationCode@7(AuthorizationCode@1000 : Text;ResourceName@1001 : Text;VAR AccessToken@1002 : Text);
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnAcquireTokenByAuthorizationCodeWithCredentials@8(AuthorizationCode@1004 : Text;ClientID@1003 : Text;ApplicationKey@1001 : Text;ResourceName@1000 : Text;VAR AccessToken@1002 : Text);
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnAcquireTokenFromCache@9(ResourceName@1000 : Text;VAR AccessToken@1001 : Text);
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnAcquireTokenFromCacheWithCredentials@10(ClientID@1000 : Text;AppKey@1001 : Text;ResourceName@1002 : Text;VAR AccessToken@1003 : Text);
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnGetSaasClientId@16(VAR ClientID@1000 : Text);
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnCreateExchangeServiceWrapperWithToken@13(Token@1000 : Text;VAR Service@1002 : DotNet "'Microsoft.Dynamics.Nav.EwsWrapper, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.Microsoft.Dynamics.Nav.Exchange.ExchangeServiceWrapper");
BEGIN
END;
[Integration]
LOCAL PROCEDURE OnCheckProvider@12(VAR Result@1000 : Boolean);
BEGIN
END;
BEGIN
{
// This codeunit should never be called directly. It should only be called through COD6300.
}
END.
}
}
See Also
Converting a Database
Resolving Compilation Errors When Converting a Dynamics NAV 2017 Database
How to: Import-Objects