User Review
( votes)Requirement: Client wants the ability to control Activate/Deactivate privilege on CRM entities.
Solution: Out of box, there is no ability to control Activate/Deactivate privilege. This is one of the classical CRM problems.So this one will require a little code solution.
In the proposed solution, I suggest two approaches:
· Create Additional Configuration entity to collect the permissions by role at Entity level and then allow/disallow Activate/Deactivate
· Create a Team for users : If user is part of the team user has privileges to Activate/Deactivate the record, else doesn’t have the privilege
Thereafter Plugin will read the configuration or team information and then allow/disallow Activate or Deactivate.
Finally, A decision was made to choose the team approach.
Here is the code to be used in the plugin then
using (var serviceContext = new OrganizationServiceContext(service))
{
if (context.InputParameters.Contains(“Target”) && context.InputParameters[“Target”] is Entity)
{
Entity entity = (Entity)context.InputParameters[“Target”];
if (!IsTeamMember(new Guid(“Team Guid”), context.UserId, service))
{
throw new InvalidPluginExecutionException(“You do not have permission to Activate/Deactivate. Please contact System Administrator”);
}
}
}
Here is the IsTeamMember method code:
public static bool IsTeamMember(Guid teamID, Guid userID, IOrganizationService service)
{
QueryExpression query = new QueryExpression(“team”);
query.ColumnSet = new ColumnSet(true);
query.Criteria.AddCondition(new ConditionExpression(“teamid”, ConditionOperator.Equal, teamID));
LinkEntity link = query.AddLink(“teammembership”, “teamid”, “teamid”);
link.LinkCriteria.AddCondition(new ConditionExpression(“systemuserid”, ConditionOperator.Equal, userID));
var results = service.RetrieveMultiple(query);
if (results.Entities.Count > 0)
{
return true;
}
else
{
return false;
}
}
Next, register this on Update of status field:
Now until the users are added to the Team, they will not be able to Activate/Deactivate record.
Hope it helps and Happy CRMing!
If you want to know more on Dynamics CRM, just get in touch.
Do not forget to share! Sharing knowledge is true power!
Twitter: https://twitter.com/msdynamicsblog
LinkedIn: https://www.linkedin.com/in/deepesh-somani-00296932
Google Play Store:
https://play.google.com/store/apps/details?id=com.dynamicsofdynamicscrm.msdynamicsblog&hl=en