SBS Group’s AXIO Global Core Financial Solution Among First Microsoft Dynamics Solutions Available on Azure Marketplace


I am very glad to share the news that SBS Group, a leading technology solutions and services firm, specializing in extending the Microsoft Dynamics platform with functional and industry specific solutions, announced today the availability AXIO Global Core Financials.

For more information, click here

To know more about AX Core and it’s offerings, click here.

Happy Dax6ng,


Removing a role to all or multiple users using X++ Code [Dynamics AX 2012]


Below is the code snippet to remove a role to all or multiple users using X++ Code. In the below code, I have tried removing System administrator role to all the users except Admin and me. Please test the code before running it in any environments.

static void SR_RemoveRoleAccessToUsers(Args _args)


    SecurityRole        role;

    SecurityUserRole    userRole;

    UserInfo            userInfo;


    void removeFromSelectedUser(UserId  _userId, RecId  _recId)


        fieldName                           userId;

        SysSecTreeRoles                     roleTree;

        SecurityUserRole                    securityUserRole;

        OMUserRoleOrganization              org;

        SecurityUserRoleCondition           condition;

        SecuritySegregationOfDutiesConflict conflict;

        RecId                               recId;


        userId  = _userId;

        recId   = _recId;




        delete_from condition

        exists join securityUserRole

        where condition.SecurityUserRole == securityUserRole.RecId && securityUserRole.User == userId && securityUserRole.SecurityRole == recId;



        while select OMInternalOrganization, SecurityRole from org where org.User == userId && org.SecurityRole == recid


            EePersonalDataAccessLogging::logUserRoleChange(org.SecurityRole, org.omInternalOrganization, userid, AddRemove::Remove);




        delete_from org where org.User == userId && org.SecurityRole == recId;


        delete_from conflict where conflict.User == userId && ((conflict.ExistingRole == recId) || (conflict.NewRole == recId));



        EePersonalDataAccessLogging::logUserRoleChange(recId, 0, userId, AddRemove::Remove);



        delete_from securityUserRole where securityUserRole.User == userId && securityUserRole.SecurityRole == recId;






    select role where role.Name == "System administrator"; // provide the role name to remove here   

   while select userInfo where ( != ‘Admin’

        && != ‘sgirigari’) // ensure that you have admin role to run this job


           removeFromSelectedUser(, role.RecId);


    info("Removal process of role is complete.");


Please be careful in the above while select statement as you need to ensure that the job that is run by a developer should be added in the where clause (userInfo.Id != “Sgirigari”)to ensure that the job runs successfully as we are removing the System Administrator role. For any other role, you can ignore this where clause.

Happy dax6ng,

Sreenath Reddy

Do you want Dynamics AX to speak out messages for you ?(Text to speech) – Dynamics AX 2012 @ X++

Hi friends,

I was just trying my hands on text to speech library and developed a small class which will help to speak out the messages easily for you. This post will explain quickly how to convert text to speech using X++ by using System.Speech Library and you can explore from there Smile 

First, let’s add this library to our references Node. Go to AOT>> References >> Add references


Search for System.Speech in the list of assemblies, select it and click on Ok button


Now, let’s create a simple class by name SRSpeechSynthesizer

class SRSpeechSynthesizer




Add a new static method called speakAsync as shown below


public static void speakAsync(str _textToSpeak)


    System.Speech.Synthesis.SpeechSynthesizer synthesizer = new System.Speech.Synthesis.SpeechSynthesizer();


    synthesizer.set_Volume(100);  // 0…100

    synthesizer.set_Rate(-2);     // -10…10


    // Synchronous

    //you cannot perform any other function in your Windows Form until the "reader" object has completed the speech.



    // Asynchronous




Now, you can use this class and method wherever you want.


For the sake of demo, I have used it in info class >> add method. The reason why I have added here is to speak out all the messages that get added during the any process. I know it’s annoying if there are many messages that gets added to the Infolog stack. (But choice is yours clip_image003 )


You can customize further by parameterizing this option specific to users (in the user options form).

Add the below lines of code to the add method.

if (session.clientKind() == ClientType::Client)






That’s it. You can explore more on the System.Speech Library.

When you create a new SpeechSynthesizer object, it uses the default system voice. To configure the SpeechSynthesizer to use one of the installed speech synthesis (text-to-speech) voices, use the SelectVoice or SelectVoiceByHints method. To get information about which voices are installed, use the GetInstalledVoices method and the VoiceInfo class. (msdn). Also, ensure that audio device is installed and working fine.


Happy Dax6ng,