Just because I always forget this link:
https://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/user-interface/general-form-guidelines
13 February 2019
07 December 2018
D365 F&O | UserInfo script to update networkDomain, IdentityProvider and SID for all users after DB copy
This runable class is really helpful when you copy a DB between environments with different tenants, different ADFS instances or if you messed up the SIDs
using Microsoft.Dynamics.ApplicationPlatform.Environment;
class TWIXUserInfoUpdate
{
public static void main(Args _args)
{
UserInfo updateUserInfo;
NetworkDomain updatedNetworkDomain;
// Get network domain
updatedNetworkDomain = EnvironmentFactory::GetApplicationEnvironment().get_Provisioning().get_AdminIdentityProvider();
ttsbegin;
TWIXUserInfoUpdate::callInsertUpdateRelatedSkipMethods(updateUserInfo);
// Update network alias and network domain for all non admin users
update_recordset updateUserInfo
setting
networkDomain = updatedNetworkDomain,
IdentityProvider = updatedNetworkDomain
where updateUserInfo.id != 'Admin'
&& updateUserInfo.isMicrosoftAccount == 0
&& updateUserInfo.accountType == UserAccountType::ClaimsUser;
// Update SID
while select forupdate updateUserInfo
where updateUserInfo.id != 'Admin'
&& updateUserInfo.networkAlias
&& updateUserInfo.networkDomain == updatedNetworkDomain
&& updateUserInfo.isMicrosoftAccount == 0
&& updateUserInfo.accountType == UserAccountType::ClaimsUser
{
AxaptaUserManager manager = new AxaptaUserManager();
xAxaptaUserDetails userDetails =
manager.getSIDFromName(updateUserInfo.networkAlias, updatedNetworkDomain, updateUserInfo.accountType);
updateUserInfo.sid = userDetails.getUserSid(0);
updateUserInfo.update();
}
ttscommit;
}
public static void callInsertUpdateRelatedSkipMethods(Common _buffer)
{
//BP deviation documented
_buffer.skipAosValidation(true);
_buffer.skipDatabaseLog(true);
_buffer.skipDataMethods(true);
//needed in case of crossCompany
_buffer.skipEvents(true);
}
}
using Microsoft.Dynamics.ApplicationPlatform.Environment;
class TWIXUserInfoUpdate
{
public static void main(Args _args)
{
UserInfo updateUserInfo;
NetworkDomain updatedNetworkDomain;
// Get network domain
updatedNetworkDomain = EnvironmentFactory::GetApplicationEnvironment().get_Provisioning().get_AdminIdentityProvider();
ttsbegin;
TWIXUserInfoUpdate::callInsertUpdateRelatedSkipMethods(updateUserInfo);
// Update network alias and network domain for all non admin users
update_recordset updateUserInfo
setting
networkDomain = updatedNetworkDomain,
IdentityProvider = updatedNetworkDomain
where updateUserInfo.id != 'Admin'
&& updateUserInfo.isMicrosoftAccount == 0
&& updateUserInfo.accountType == UserAccountType::ClaimsUser;
// Update SID
while select forupdate updateUserInfo
where updateUserInfo.id != 'Admin'
&& updateUserInfo.networkAlias
&& updateUserInfo.networkDomain == updatedNetworkDomain
&& updateUserInfo.isMicrosoftAccount == 0
&& updateUserInfo.accountType == UserAccountType::ClaimsUser
{
AxaptaUserManager manager = new AxaptaUserManager();
xAxaptaUserDetails userDetails =
manager.getSIDFromName(updateUserInfo.networkAlias, updatedNetworkDomain, updateUserInfo.accountType);
updateUserInfo.sid = userDetails.getUserSid(0);
updateUserInfo.update();
}
ttscommit;
}
public static void callInsertUpdateRelatedSkipMethods(Common _buffer)
{
//BP deviation documented
_buffer.skipAosValidation(true);
_buffer.skipDatabaseLog(true);
_buffer.skipDataMethods(true);
//needed in case of crossCompany
_buffer.skipEvents(true);
}
}
30 November 2018
D365 F&O | Sync DB timeout error
When the db sync of a D365 environment fails with a timeout error like the following:
AOS database sync failed. Microsoft.Dynamics.AX.Framework.Database.TableSyncException: Full sync did not complete successfully. Error: One or more errors occurred.
...
SqlException:Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
You should check if the environment has enough ressources. Monitor the availbale CPU, RAM and disk speed. In some cases a simple reboot might help. If you are facind this error in a VM running on your laptop assign more than one core to the VM ;)
AOS database sync failed. Microsoft.Dynamics.AX.Framework.Database.TableSyncException: Full sync did not complete successfully. Error: One or more errors occurred.
...
SqlException:Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
You should check if the environment has enough ressources. Monitor the availbale CPU, RAM and disk speed. In some cases a simple reboot might help. If you are facind this error in a VM running on your laptop assign more than one core to the VM ;)
28 November 2018
D365 F&O | Change DevOps Build Agent
When you are managing more than one Microsoft Dynamics 365 for Finance and Operations environment throught DevOps (alias VSTS) it is a good idea to seperate the build agents into different build agent pools.
Creating a new agentpool in DevOps is quite simple but how do we change the link between the VSTSAgent which is running on the D365 box and the agent pool.
First of all create an AccessToken within DevOps as shown below:
After that connect to the D365 F&O server and navigate to C:\DynamicsSDK. There you will find a file named SetupBuildAgent.ps1. Create a copy of this file and open it in your favorite editor. Here we need to change two parameters:
AgentPoolName = "YourAgentPoolName"
VSOAccessToken = "YourNewlyCreatedToken"
Creating a new agentpool in DevOps is quite simple but how do we change the link between the VSTSAgent which is running on the D365 box and the agent pool.
First of all create an AccessToken within DevOps as shown below:
After that connect to the D365 F&O server and navigate to C:\DynamicsSDK. There you will find a file named SetupBuildAgent.ps1. Create a copy of this file and open it in your favorite editor. Here we need to change two parameters:
AgentPoolName = "YourAgentPoolName"
VSOAccessToken = "YourNewlyCreatedToken"
After that we need a PowerShell which is running in admin mode. Execute your SetupBuildAgentXYZ.ps1 file and provide the base URL of the DevOps project collection
Finally you can check the agent pools in DevOps and you'll see that the Agent is now part of the agentPool you defined.
14 November 2018
Technical Reference Reports for Microsoft Dynamics 365 for Finance and Operations
This site provides some good technical informations regarding Microsoft Dynamics 365 for Finance and Operations
22 October 2018
D365 F&O: DB Sync - Failed to create a session; confirm that the user has the proper privileges to log on to Microsoft Dynamics 365 for Finance and Operation
After a DB copy I tried to sync the new DB using the cmd:
Microsoft.Dynamics.AX.Deployment.Setup.exe -bindir "K:\AOSService\PackagesLocalDirectory" -metadatadir "K:\AOSService\PackagesLocalDirectory" -sqluser "axdbadmin" -sqlserver "localhost" -sqldatabase "AxDB" -setupmode servicesync -syncmode fullall -isazuresql "false" -logfilename "C:\Temp\dbsync.log"
but this always failed with the following error message:
Microsoft.Dynamics.Ax.Xpp.ErrorException: Failed to create a session; confirm that the user has the proper privileges to log on to Microsoft Dynamics 365 for Finance and Operation
Looking at the event log I found the corresponding info:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
that was confusing. So it was not a wrong entry in the userInfo table. After some checks on the DB I found out that the sysglobalconfiguration was set to azuresql even though I was working with a local sql server
So after changing the configuration the DBSync was working again:
update sysglobalconfiguration
set value = 'SQLSERVER'
where name = 'BACKENDDB'
update sysglobalconfiguration
set value = 0
where name = 'TEMPTABLEINAXDB'
Microsoft.Dynamics.AX.Deployment.Setup.exe -bindir "K:\AOSService\PackagesLocalDirectory" -metadatadir "K:\AOSService\PackagesLocalDirectory" -sqluser "axdbadmin" -sqlserver "localhost" -sqldatabase "AxDB" -setupmode servicesync -syncmode fullall -isazuresql "false" -logfilename "C:\Temp\dbsync.log"
but this always failed with the following error message:
Microsoft.Dynamics.Ax.Xpp.ErrorException: Failed to create a session; confirm that the user has the proper privileges to log on to Microsoft Dynamics 365 for Finance and Operation
Looking at the event log I found the corresponding info:
A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The certificate chain was issued by an authority that is not trusted.)
that was confusing. So it was not a wrong entry in the userInfo table. After some checks on the DB I found out that the sysglobalconfiguration was set to azuresql even though I was working with a local sql server
So after changing the configuration the DBSync was working again:
update sysglobalconfiguration
set value = 'SQLSERVER'
where name = 'BACKENDDB'
update sysglobalconfiguration
set value = 0
where name = 'TEMPTABLEINAXDB'
01 August 2018
D365 F&O | Oh AOS why have you forbidden me
Just another great post from Tariq Bell: Thank you so much ;)
https://blogs.msdn.microsoft.com/axsa/2018/04/17/oh-aos-why-have-you-forbidden-me/
https://blogs.msdn.microsoft.com/axsa/2018/04/17/oh-aos-why-have-you-forbidden-me/
Subscribe to:
Posts (Atom)