In this article, we want to write a console app which will write the "Full Name" of the users in a specific security role in CRM 2011.
1. Generate your Organization service proxy
From the downloaded SDK, find crmsvcutil.exe, open a command window, chage your directry to the same folder where crmsvcutil.exe is located and type the following:
crmsvcutil.exe /url:"crmpath/orgname/XrmServices/2011/Organization.svc"/out:"OrganizationService.cs" /username:"crmuser" /password:"crmPass" /domain:"crmDomain" /namespace:"DynamicsCrm" /ServiceContextName:CrmServiceContext
2. Create a new console app (C#)
Add references and add the using statement on top to point to:
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Net; using DynamicsCrm; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using System.ServiceModel.Description; using Microsoft.Xrm.Sdk.Query;add the OrganizationService.CS that you have generated earlier to your app console.
3. Edit app.config
In your app.config file of your console app add the following keys and values
< configuration> < appsettings> < add key="TargetCrmService" value="http://crm/org/XrmServices/2011/Organization.svc"> < add key="UserName" value="yourUserName"> < add key="Password" value="CrmPass"> < add key="Domain" value="yourDomain"> < / appsettings=""> < startup>< supportedruntime sku=".NETFramework,Version=v4.0" version="v4.0" >< / startup> < /configuration="">Note1: please remove additional spaces above
Note2: Make sure your console app project runs under .NET framework 4.0
4. Coding
Here is the code in the console app to retirve the Full Name of the users within a specific "Security role" (System administrators in this example).
namespace CRMPlayGround { internal class Program { private static readonly string TargetCrmService = ConfigurationManager.AppSettings["TargetCrmService"]; private static readonly string UserName = ConfigurationManager.AppSettings["UserName"]; private static readonly string Domain = ConfigurationManager.AppSettings["Domain"]; private static readonly string Password = ConfigurationManager.AppSettings["Password"]; public static ClientCredentials ClientCredentials { get { var credentials = new ClientCredentials(); credentials.Windows.ClientCredential = new NetworkCredential(UserName, Password, Domain); return credentials; } } private static void Main(string[] args) { Console.WriteLine("*********************************************************************"); Console.WriteLine("* *"); Console.WriteLine("* CRM play Ground *"); Console.WriteLine("* *"); Console.WriteLine("*********************************************************************"); Console.WriteLine(); Console.WriteLine("Connecting to CRM..."); var serviceProxy = new OrganizationServiceProxy(new Uri(TargetCrmService), null, ClientCredentials, null); serviceProxy.EnableProxyTypes(); var crmServiceContext = new CrmServiceContext(serviceProxy); Console.WriteLine("Finding the first user in CRM who is Admin and has a manager..."); var userList = FindUsersWithSecurtyRole(crmServiceContext,"System Administrator"); foreach (var username in userList) { Console.WriteLine(username); } Console.WriteLine(); Console.WriteLine("Done! press any key to close ..."); Console.ReadKey(); } ////// Find Users who have a specific security role. /// ////// Each SystemUser in CRM has N:N relationship with UserRoles /// /// The CRM service context./// Security role name///List of user's fullname as string private static IEnumerableFindUsersWithSecurtyRole(CrmServiceContext crmServiceContext, string roleName) { var users = from systemUser in crmServiceContext.SystemUserSet join systemUserRole in crmServiceContext.SystemUserRolesSet on systemUser.SystemUserId equals systemUserRole.SystemUserId join role in crmServiceContext.RoleSet on systemUserRole.RoleId equals role.RoleId where role.Name == roleName select systemUser; foreach (var user in users) { yield return user.FullName; } } } }
No comments:
Post a Comment