1. Using Associate Views
2. Using Sub Grid
3. Using button in ribbon
Base on the clients' selected method, we have to implement the code, because if the child form is created using Associate Views, window.parent.opener.Xrm.Page.data will be null and when calling from sub grids window.top.opener.parent.Xrm.Page.ui will be null.
So here, I have implemented a method to check both conditions. And in the Parent form, you may have a Lookup, int, decimal or picklist, that has to be mapped with different control in child page
Then, copy below function to your common Library JS (If you dont have a common JS web resource, it's time to create a one)
function MapFromParentForm(target, source) { var targetControl = Xrm.Page.data.entity.attributes.get(target); var sourceControl; if (window.top.opener.parent != null && window.top.opener.parent.Xrm != null && window.top.opener.parent.Xrm.Page != null && window.top.opener.parent.Xrm.Page.ui != null) { sourceControl = window.top.opener.parent.Xrm.Page.data.entity.attributes.get(source); } else if(window.parent != null && window.parent.opener != null && window.parent.opener.Xrm != null && window.parent.opener.Xrm.Page != null && window.parent.opener.Xrm.Page.data != null && window.parent.opener.Xrm.Page.data.entity != null && window.parent.opener.Xrm.Page.data.entity.attributes != null) { sourceControl = window.parent.opener.Xrm.Page.data.entity.attributes.get(source); } if (targetControl != null && sourceControl != null) { var sourceValue; if (sourceControl.getAttributeType() == "lookup") { sourceValue = sourceControl.getValue()[0].name; } else { sourceValue = sourceControl.getValue(); } if (targetControl.getAttributeType() == "lookup") { targetControl.setValue(sourceValue) } else if (targetControl.getAttributeType() == "optionset") { targetControl.setValue(parseInt(sourceValue)) } else { targetControl.setValue(sourceValue) } } }
Then from the child Page form,
1. Add the Common Javascript web Resouce
2. And in form onLoad event, called the function as below
MapFromParentForm with the dynamic parameters as 'new_name', 'new_contactId' where 'new_name' is the control in child form and 'new_contactId' is in the parent form