Hi
I have wrote a series o JScripts a requirement.
Firstly: When two records are selected and ribbon button is clicked, it will open a new record of another entity populating the selected record IDs in couple of lookup fields.
function OpenBlankUI(selectedIds) {
var windowOptions = {
openInNewWindow: true
};
var parameters = {};
parameters["new_name"] = "Dupe Opportunity";
//debugger;
var opp1OppName = "";
var opp2OppName = "";
var loadForm = false;
//first opportunity
parameters["new_opportunity1"] = selectedIds[0];
////Second Opportunity
parameters["new_opportunity2"] = selectedIds[1];
Xrm.Utility.openEntityForm("new_oppdupe", null, parameters, windowOptions);
}
Secondly: I have added an OnLoad function to populate few fields.
function OnOpportunity_FormLoad() {
if (Xrm.Page.ui.getFormType() == "1" || Xrm.Page.ui.getFormType() == 1) {
var urlParams = Xrm.Page.context.getQueryStringParameters();
var windowOptions = {
openInNewWindow: true
};
var parameters = {};
parameters["new_name"] = "Net Opportunity";
//debugger;
var oppOppName1 = "";
var oppOppName2 = "";
var loadForm = false;
SDK.REST.retrieveRecord(
urlParams.new_opportunity1,
"Opportunity",
null, null,
function (opportunity) {
setOpportunityFormFields(opportunity, true);
},
function () {
alert("ERROR: new_opportunity1 ");
}
);
SDK.REST.retrieveRecord(
urlParams.new_opportunity1,
"Opportunity",
null, null,
function (opportunity) {
setOpportunityFormFields(opportunity, false);
},
function () {
alert("ERROR: new_opportunity1 ");
}
);
//Xrm.Page.getAttribute(arg).setSubmitMode()
Xrm.Page.data.entity.attributes.forEach(
function (attribute, index) {
Xrm.Page.getAttribute(attribute.getName()).setSubmitMode("always");
});
}
}
Finally: function setOpportunityFormFields
function setOpportunityFormFields(opportunity, isOpportunity1) {
if (isOpportunity1) {
var lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.OpportunityId;
lookup[0].name = opportunity.Name;
lookup[0].entityType = "opportunity";
Xrm.Page.getAttribute("new_opportunity1").setValue(lookup);
//text fields
Xrm.Page.getAttribute("new_street1").setValue(opportunity.new_street1);
Xrm.Page.getAttribute("new_city").setValue(opportunity.new_city);
//OptionSet fields
if (opportunity.new_AddressStatus != null) {
Xrm.Page.getAttribute("new_addressstatus").setValue(opportunity.new_AddressStatus.Value); //OptionSet
}
//lookup fields
if (opportunity.CustomerId != null && opportunity.CustomerId.Id != null) {
lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.CustomerId.Id;
lookup[0].name = opportunity.CustomerId.Name;
lookup[0].entityType = "account";
Xrm.Page.getAttribute("new_customerid").setValue(lookup);
}
if (opportunity.new_oppprimarycontactsid != null && opportunity.new_oppprimarycontactsid.Id != null) {
lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.new_oppprimarycontactsid.Id;
lookup[0].name = opportunity.new_oppprimarycontactsid.Name;
lookup[0].entityType = "contact";
Xrm.Page.getAttribute("new_oppprimarycontactsid").setValue(lookup);
}
}
else
{
var lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.OpportunityId;
lookup[0].name = opportunity.Name;
lookup[0].entityType = "opportunity";
Xrm.Page.getAttribute("new_secondaryopportunity").setValue(lookup);
//text fields
Xrm.Page.getAttribute("new_street11").setValue(opportunity.new_street1);
Xrm.Page.getAttribute("new_city1").setValue(opportunity.new_city);
if (opportunity.CustomerId != null && opportunity.CustomerId.Id != null) {
lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.CustomerId.Id;
lookup[0].name = opportunity.CustomerId.Name;
lookup[0].entityType = "account";
Xrm.Page.getAttribute("new_customerid1").setValue(lookup);
}
if (opportunity.new_oppprimarycontactsid != null && opportunity.new_oppprimarycontactsid.Id != null) {
lookup = new Array();
lookup[0] = new Object();
lookup[0].id = opportunity.new_oppprimarycontactsid.Id;
lookup[0].name = opportunity.new_oppprimarycontactsid.Name;
lookup[0].entityType = "contact";
Xrm.Page.getAttribute("new_oppprimarycontactsid1").setValue(lookup);
}
}
}
I believe this is the blacksheep.
Everything works according to requirement except for unsaved changes appearing even after saved.
I tried it on CRM 2015 and worked fine, after upgraded to CRM 2016, I'm having issue with unsaved changes. When I comment out setOpportunityFormFields from the OnLoad script the form seem to be saving and doesn't show unsaved changes error.
Sorry for the long post, just wanted to be clear.