******************************************************************
Sometime
in CRM there is a need to copy the existing record.For example there may
be
a
need to clone the existing case so that service representative can
update some fields on the
cloned
case.
Q.How
can we achieve it in MS CRM 2011
A. It can be achieved either by
JavaScript or Plugin.
We
will try to achieve with JavaScript using "Relationships"
mappings feature in MS CRM 2011.
Q:What
we need to do?
1)Add
a ribbon button called "Clone Case"
2)Creating
a 1:N relationship with Case to Case then generating mappings.
3)On
button click Open the URL of the cloned Case.
Implementation:
1)Add
a ribbon button called "Clone Case"
button
it will call a Javascript function called "cloneCase"
in
"My_CustomRibbonJavascript" webresource.
Or
you can do manually like.
1)Create
a solution add "Case" entity to it.
2)Export
the Solution.
3)Extract
the Solution.
4)Open
Customizations.xml in Visual studio.
5)Replace <RibbonDiffXml> with the below given XML
6)Take
care of adding the icons as given in below XML in CRM as webresources before
import.
<RibbonDiffXml>
<CustomActions>
<CustomAction Id="My.MSCRM.incident.form.Clone.Button.CustomAction" Location="Mscrm.Form.incident.MainTab.Collaborate.Controls._children" Sequence="0">
<CommandUIDefinition>
<Button Command="MSCRM.incident.form.Clone.Command" Id="MSCRM.incident.form.Clone.Button" Image32by32="$webresource:My_Clone32" Image16by16="$webresource:My_Clone16" LabelText="$LocLabels:MSCRM.incident.form.Clone.Button.LabelText" Sequence="0" TemplateAlias="o1" ToolTipTitle="$LocLabels:MSCRM.incident.form.Clone.Button.ToolTipTitle" ToolTipDescription="$LocLabels:MSCRM.incident.form.Clone.Button.ToolTipDescription" />
</CommandUIDefinition>
</CustomAction>
</CustomActions>
<Templates>
<RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
</Templates>
<CommandDefinitions>
<CommandDefinition Id="MSCRM.incident.form.Clone.Command">
<EnableRules/>
<DisplayRules>
<DisplayRule Id="MSCRM.incident.form.Clone.DisplayRule" />
</DisplayRules>
<Actions>
<JavaScriptFunction FunctionName="cloneCase" Library="$webresource:My_CustomRibbonJavascript" />
</Actions>
</CommandDefinition>
</CommandDefinitions>
<RuleDefinitions>
<TabDisplayRules />
<DisplayRules>
<DisplayRule Id="MSCRM.incident.form.Clone.DisplayRule">
<FormStateRule State="Create" InvertResult="true" />
</DisplayRule>
</DisplayRules>
<EnableRules/>
</RuleDefinitions>
<LocLabels>
<LocLabel Id="MSCRM.incident.form.Clone.Button.LabelText">
<Titles>
<Title description="Clone Case" languagecode="1033" />
</Titles>
</LocLabel>
<LocLabel Id="MSCRM.incident.form.Clone.Button.ToolTipDescription">
<Titles>
<Title description="Clone Case" languagecode="1033" />
</Titles>
</LocLabel>
<LocLabel Id="MSCRM.incident.form.Clone.Button.ToolTipTitle">
<Titles>
<Title description="Clone Case" languagecode="1033" />
</Titles>
</LocLabel>
</LocLabels>
</RibbonDiffXml>
2)Creating
a 1:N relationship with Case to Case then generating mappings.
Open
the Case enity relationship(1:N) and Create a relationship with Case.Open the
created relationship and generate mappings.
Refer
below screenshots
3)On button click Open the
URL of the cloned Case.
Add a new webresource called "My_CustomRibbonJavascript" add the "cloneCase" function to it
Add a new webresource called "My_CustomRibbonJavascript" add the "cloneCase" function to it
function GetContext() {
var _context = null;
if (typeof GetGlobalContext != "undefined")
_context = GetGlobalContext();
else if (typeof Xrm != "undefined")
_context = Xrm.Page.context;
return _context
}
function cloneCase() {
if (Xrm.Page.data.entity.getId() == null) {
alert('First save the record before Clone Case')
}
else {
var CRMContext = GetContext();
var serverUrl = CRMContext.getServerUrl();
var caseid = Xrm.Page.data.entity.getId();
caseid = caseid.replace('{', '').replace('}', '');
//Below URL is for CRM online
var url = serverUrl + 'main.aspx?etc=112&extraqs=%3f_CreateFromId%3d%257b' + caseid + '%257d%26_CreateFromType%3d112%26etc%3d112%26pagemode%3diframe&pagetype=entityrecord';
openNewWindow(url, 900, 600, 'toolbar=no,menubar=no,resizable=yes');
}
}
Note:
How to create the
URL Since Case is in 1:N
relationship It will appear in case left navigation pane.Click on Case button
and add the new Case.Copy the created URL and make it dynamic.
For Onpresmise MS CRM
2011 URL will be like this
var url = serverUrl + '/cs/cases/edit.aspx?_CreateFromType=112&_CreateFromId=' +
Xrm.Page.data.entity.getId();