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() { debugger; var formtype = Xrm.Page.ui.getFormType(); if(formtype!=1){ debugger; Xrm.Utility.confirmDialog("Do You want copy the case Record?", function () { var recordId = Xrm.Page.data.entity.getId().replace("{", "").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) { debugger; var xmlHTTPRequest = new XMLHttpRequest(); var results = true; xmlHTTPRequest.open("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", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"); xmlHTTPRequest.onreadystatechange = function () { debugger; if (this.readyState == 4) { if (this.status == 200) { //if required write code here. //alert("success"); } else { results = false; } } }; xmlHTTPRequest.send(BuildActionRequestXml(actionName,recordId)); } function BuildActionRequestXml(actionName,recordId) { debugger; var requestXml = "<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'>" + "<s:Body>" + "<Execute xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>" + "<request xmlns:a='http://schemas.microsoft.com/xrm/2011/Contracts'>" + "<a:Parameters xmlns:b='http://schemas.datacontract.org/2004/07/System.Collections.Generic'>" + "<a:KeyValuePairOfstringanyType>" + "<b:key>Guid</b:key>" + "<b:value i:type='c:string' xmlns:c='http://www.w3.org/2001/XMLSchema'>" + recordId + "</b:value>" + "</a:KeyValuePairOfstringanyType>" + //"<a:KeyValuePairOfstringanyType>" + //"<b:key>second</b:key>" + //"<b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">" + + "</b:value>" + //"</a:KeyValuePairOfstringanyType>" + "</a:Parameters>" + "<a:RequestId i:nil='true' />" + "<a:RequestName>" + actionName + "</a:RequestName>" + "</request>" + "</Execute>" + "</s:Body>" + "</s:Envelope>"; return requestXml; }
Next Global Action Create Input Parameter as Guid with Type String :
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_CloneaCaseGuid“
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); tracing.Trace(context.InputParameters.Contains("Guid").ToString()); if(context.InputParameters.Contains("Guid") && context.InputParameters["Guid"] is string) { tracing.Trace("IFLoopEnter"); 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"]; service.Create(newCase); tracing.Trace("Completed"); } } } }
It Will doesn’t clones the child Records.
That’s It It will Clones the Record;
Enjoy 🙂
[…] Read Complete Article HERE. […]
LikeLike
[…] Microsoft Dynamics CRM / 365 […]
LikeLike
[…] posted on Microsoft Dynamics CRM / 365: Clone A Case Record : Cloning is one of the methods which can reduce the time spent on data entry, […]
LikeLike
Reblogged this on Nishant Rana's Weblog.
LikeLike
Hi,
Is this will work for the Sub grid record also?
Tank You,
LikeLike
Hi,
how do you get to this portion of the process “Next Global Action Create Input Parameter as Guid with Type String” I don’t see that in the ribbon workbench
LikeLike
nevermind! I found it, but now I’m not sure where to go for this step “Plugin Step As Follows”
LikeLike