Retrieve User assigned Roles with user information using Query Expression , C# in Dynamics 365.

Sometimes we may need to retrieve login user security roles with user details using Query Expression. Here is simple Query Expression to retrieve user information with all assigned security roles by user GUID.

                // Pass user GUID
                Guid userid = new Guid("55A0BCC3-6DC2-4B75-B00F-200B2C7A8EF6");
                QueryExpression qe = new QueryExpression("systemuserroles");
                qe.ColumnSet.AddColumns("systemuserid");
                qe.Criteria.AddCondition("systemuserid", ConditionOperator.Equal, userid);

                LinkEntity link1 = qe.AddLink("systemuser", "systemuserid", "systemuserid", JoinOperator.Inner);
                link1.Columns.AddColumns("fullname", "internalemailaddress");
                LinkEntity link = qe.AddLink("role", "roleid", "roleid", JoinOperator.Inner);
                link.Columns.AddColumns("roleid", "name");
                EntityCollection results = organizationService.RetrieveMultiple(qe);
                foreach (Entity Userrole in results.Entities)
                {
                    if (Userrole.Attributes.Contains("systemuser1.fullname"))
                    {
                        Console.WriteLine("User Name : - " + (Userrole.Attributes["systemuser1.fullname"] as AliasedValue).Value.ToString());
                    }
                    if (Userrole.Attributes.Contains("systemuser1.internalemailaddress"))
                    {
                        Console.WriteLine("Email : - " + (Userrole.Attributes["systemuser1.internalemailaddress"] as AliasedValue).Value.ToString());
                    }
                    if (Userrole.Attributes.Contains("role2.roleid"))
                    {
                        Console.WriteLine("RoleId : - " + (Userrole.Attributes["role2.roleid"] as AliasedValue).Value.ToString());
                    }
                    if (Userrole.Attributes.Contains("role2.name"))
                    {
                        Console.WriteLine("Role Name : - " + (Userrole.Attributes["role2.name"] as AliasedValue).Value.ToString());
                    }

                }

 

Here is the results.

2019-01-26_23-29-29_roles

I have answered similar requirement here  in D365 community.

Hope this helps.

Leave a comment