Show / Hide Button – Form State Rule

Show / Hide Button – Form State Rule :

The button will be hidden only when the form is in create mode. In remaining cases, it will be displayed.

Follow the below steps :

Step1: Create a button and place it on the Form level:

Step2: Provide the Name, Description, Alternate Text to the button.

Step3: Add Display Rule Click on display rule> Add rule > Select “Form State rule

provide values as below

Two ways we can achieve the scenario button hide for create mode.


Default : False,        InvertRule: True,         State: Create.

InvertRule is “True” means : It will makes the result to inverse( True to False and False to True).

Here State is create and invertrule is true so it will hides the button while creating(create mode value is true but inverse the result to false and button is hided while creating.



Default : False,    InvertRule: False,    State: Existing.

Invertrule is “False” means it won’t change the result value.

Here state is “Existing” means it will returns true for created records. if value is true then button is visibled.

Step 4: Add this Display rule to the button command.

That’s it. Enjoy 🙂




Clone A Record

Clone A Case Record :

Cloning is one of the methods which can reduce the time spent on data entry, particularly if the same case record data being entered is similar.

Cloning or Record Copying allows you to create a duplicate record with the same values as the parent record with just one click.

Solution as follows:

Ribbon Button will be visible on the  case form, Once Record is Saved , then Button will be visibled. If he click on the Button open a dialog, with message “Do You want to clone a a case Record” If he click Ok , It will Cloning the record.

flow – Button – click- Js pass Id to – Action InputParameter- Plugin Trigger – Create Case record.

Ribbon workbench Button as follows :-


Add the Button Command As Follows :-

Action – web resource and Function Name -“CallAction


Display Rule As Follows : Form StateRule


Js Code For Ribbon WorkBench Action :-

 function CallAction() {
 var formtype = Xrm.Page.ui.getFormType();
 Xrm.Utility.confirmDialog("Do You want copy the case Record?", 
 function () {
  var recordId ="{", "").replace("}", "");
 // action schemaname "new_a" and passing record id to the action parameter(first and second are parametrs) and 
 //under function BuildActionRequestXml seee the two parameters am using only one parameter and passing id to the parameter
 InvokeAction("new_CloneaCaseGuid", recordId);
 function () {});
function InvokeAction(actionName,recordId) {
 var xmlHTTPRequest = new XMLHttpRequest();
 var results = true;"POST", Xrm.Page.context.getClientUrl() + "/XRMServices/2011/Organization.svc/web", false);
 xmlHTTPRequest.setRequestHeader("Accept", "application/xml, text/xml");
 xmlHTTPRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
 xmlHTTPRequest.setRequestHeader("SOAPAction", "");

 xmlHTTPRequest.onreadystatechange = function () {
 if (this.readyState == 4) {
 if (this.status == 200) {
 //if required write code here.
 else {
 results = false;

function BuildActionRequestXml(actionName,recordId) {
 var requestXml = "<s:Envelope xmlns:s=''>" +
 "<s:Body>" +
 "<Execute xmlns='' xmlns:i=''>" +
 "<request xmlns:a=''>" +
 "<a:Parameters xmlns:b=''>" +
 "<a:KeyValuePairOfstringanyType>" +
 "<b:key>Guid</b:key>" +
 "<b:value i:type='c:string' xmlns:c=''>" + recordId + "</b:value>" +
 "</a:KeyValuePairOfstringanyType>" +
 //"<a:KeyValuePairOfstringanyType>" +
 //"<b:key>second</b:key>" +
 //"<b:value i:type=\"c:string\" xmlns:c=\"\">" + + "</b:value>" +
 //"</a:KeyValuePairOfstringanyType>" +
 "</a:Parameters>" +
 "<a:RequestId i:nil='true' />" +
 "<a:RequestName>" + actionName + "</a:RequestName>" +
 "</request>" +
 "</Execute>" +
 "</s:Body>" +
 return requestXml;


Next Global Action Create Input Parameter as Guid with Type String :

Screenshot (116).png

Through Javascript , Button Onclick, we are passing the case record Id to the this InputParameter Guid. Once Action Called Then Plugin will Trigger to create the Case Record .

Plugin Step As Follows : Message Name = Action Name “new_CloneaCaseGuid14.JPG

Plugin Code To create the copy case Record as Follows:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Crm.Sdk.Messages;

namespace Clone_a_Record
 public class Class1 : IPlugin
 public void Execute(IServiceProvider serviceProvider)
 IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
 ITracingService tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
 IOrganizationServiceFactory servicefactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
 IOrganizationService service = servicefactory.CreateOrganizationService(context.UserId);
 if(context.InputParameters.Contains("Guid") && context.InputParameters["Guid"] is string)
 Guid CaseID = new Guid(context.InputParameters["Guid"].ToString());
 Entity cases = service.Retrieve("incident", CaseID, new ColumnSet(true));

 //Initialises new record from an existing record
 InitializeFromRequest copyCases = new InitializeFromRequest();
 copyCases.TargetEntityName = "incident";
 copyCases.EntityMoniker = cases.ToEntityReference();
 copyCases.TargetFieldType = TargetFieldType.All;
 InitializeFromResponse response = (InitializeFromResponse)service.Execute(copyCases);
 Entity newCase =(Entity) response.Results["Entity"];



It Will doesn’t clones the child Records.

That’s It It will Clones the Record;

Enjoy 🙂