In Dynamics CRM default paging limit is set to 50 records per page. Sometime we need to increase Paging Limit (per page) so that I can Activate/Deactivate/Edit/View more than 50 records per page. In CRM On-Premises we have an unsupported option to set it
to whatever value we want by running a SQL update query on UserSettings. But with CRM
2015 Online we don’t have access to database so everything needs to be
supported.
From UI we can only set Paging Limit up to 250. ‘
PagingLimit’ in UserSettings entity is valid for
update so we can write some code to update Paging Limit.
However even with code maximum Paging Limit we can set is 500 but it is
still double than the maximum we can set through UI.
Complete Solution to update Record per page can be downloaded from CodePlex.
Following is the code to
update.
using System;
using System.Linq;
using System.ServiceModel.Description;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
namespace UpdatePagingLimit
{
internal class Program
{
private static OrganizationServiceProxy _serviceProxy;
private static void Main(string[] args)
{
using (var context = GetOrganizationServiceContext())
{
string firstname = "**
user’s first name **";
var userId = (from u in context.CreateQuery("systemuser")
where u.GetAttributeValue<string>("firstname") ==
firstname
select
u.GetAttributeValue<Guid>("systemuserid")).FirstOrDefault();
if (userId != Guid.Empty)
{
var usersettingsId = (from s in context.CreateQuery("usersettings")
where s.GetAttributeValue<Guid>("systemuserid")
== userId
select
s.Id).FirstOrDefault();
if (usersettingsId != Guid.Empty)
{
var userSettingsToUpdate = new Entity("usersettings")
{Id = usersettingsId};
// 500 is the Maximum you can set
userSettingsToUpdate["paginglimit"] = 500;
var service =
GetOrganizationService();
service.Update(userSettingsToUpdate);
}
}
else
{
Console.WriteLine("Unable to find the System User");
}
}
Console.ReadLine();
}
public static OrganizationServiceProxy GetOrganizationServiceProxy()
{
var organizationUri = new Uri("https://XXXXXXXX.crm4.dynamics.com/XRMServices/2011/Organization.svc");
IServiceManagement<IOrganizationService> orgServiceManagement =
ServiceConfigurationFactory.CreateManagement<IOrganizationService>(organizationUri);
AuthenticationProviderType endpointType = orgServiceManagement.AuthenticationType;
AuthenticationCredentials authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = "joe.blogs@example.onmicrosoft.com";
authCredentials.ClientCredentials.UserName.Password = "Password";
if (endpointType == AuthenticationProviderType.OnlineFederation)
{
IdentityProvider provider =
orgServiceManagement.GetIdentityProvider(authCredentials.ClientCredentials.UserName.UserName);
if (provider != null && provider.IdentityProviderType == IdentityProviderType.LiveId)
{
authCredentials.SupportingCredentials = new AuthenticationCredentials
{
ClientCredentials =
Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice()
};
}
}
_serviceProxy =
GetProxy<IOrganizationService, OrganizationServiceProxy>(orgServiceManagement,
authCredentials);
return _serviceProxy;
}
public static OrganizationServiceContext GetOrganizationServiceContext()
{
var proxy = GetOrganizationServiceProxy();
var context = new OrganizationServiceContext(proxy);
return context;
}
public static IOrganizationService GetOrganizationService()
{
var service = (IOrganizationService) GetOrganizationServiceProxy();
return service;
}
private static TProxy GetProxy<TService, TProxy>(
IServiceManagement<TService> serviceManagement,
AuthenticationCredentials authCredentials)
where TService : class
where TProxy : ServiceProxy<TService>
{
Type classType = typeof (TProxy);
if (serviceManagement.AuthenticationType !=
AuthenticationProviderType.ActiveDirectory)
{
AuthenticationCredentials tokenCredentials =
serviceManagement.Authenticate(authCredentials);
//
Obtain organization service proxy for Federated, LiveId and OnlineFederated
environments.
//
Instantiate a new class of type using the 2 parameter constructor of type
IServiceManagement and SecurityTokenResponse.
return (TProxy) classType
.GetConstructor(new Type[] {typeof (IServiceManagement<TService>),
typeof (SecurityTokenResponse)})
.Invoke(new object[]
{serviceManagement, tokenCredentials.SecurityTokenResponse});
}
//
Obtain discovery/organization service proxy for ActiveDirectory environment.
//
Instantiate a new class of type using the 2 parameter constructor of type
IServiceManagement and ClientCredentials.
return (TProxy) classType
.GetConstructor(new Type[] {typeof (IServiceManagement<TService>),
typeof (ClientCredentials)})
.Invoke(new object[]
{serviceManagement, authCredentials.ClientCredentials});
}
}
}
Now if you build the project you will get an error
complaining about missing reference for Microsoft.Xrm.Services. To get rid of
this error download CRM 2015 SDK. Go to \SDK\SampleCode\CS\HelperCode
and add DeviceIdManager.cs to you.
Now you will have to add System.Security
assembly reference.
Your code is ready to build and run. Make sure that you have
updated the credentials, Organization service Uri and user’s first name in
code. I have set them to dummy data.
Happy Coding
P. S. Hayer