CRM Migration Assistant 1.4 Released

We are releasing version 1.4 or our CRM JavaScript conversion tool, CRM Migration Assistant, today.

 

The trial version can be downloaded here.

 

Version 1.4 contains the following changes:

 

Fix: Two-byte characters improperly converted from a customization zip file

If you attempted to convert an exported customization file that contained two-byte characters, like an umlaut, that character would be converted to ‘??’. This has been corrected.

 

User Interface Additions

We’ve added a checkbox to allow you to permanently synchronize scrolling when reviewing the post-conversion JavaScript.

image

 

New Conversion Alerts:

Conversion alerts have been added for the following JavaScript methods or properties:

  • ontop
  • appendChild
  • createElement
  • innerHTML
  • outerHTML
  • replaceNode
  • returnValue
  • crmGrid
  • document.all.help
  • document.all.crmRenderStatus
  • document.all.tdRelatedInformationPane

 

Improperly-Terminated JavaScript Conversion

Some developers, especially those that do not really understand JavaScript, have a habit of not terminating their JavaScript commands with a semi-colon. This can cause issues during the conversion process. We added extra checks to correct some issues seen during the conversion when an improperly-terminated command was encountered.

 

Navigation Item Visibility

If we encounter code that appears to hide or show a form’s navigation item, we will convert that code into the proper CRM 2011 equivalent. For example:

 

document.getElementById("navExistingProducts").style.display = "none";

Converts to:

 

Xrm.Page.ui.navigation.items.get("navExistingProducts").setVisible(false);

 

Expanded Conversion of .all properties

in certain cases the developer may have assigned the value of crmForm to a variable, which is referenced from that point forward. We have enhanced the conversion of such instances.  For example:

if (parentForm.all.new_vaeid.DataValue != null)
{
    var VAE = crmForm.all.new_vaeid;
    lookupData = new Array();
    var lookupVAE = new Object();
    lookupVAE.id = parentForm.all.new_vaeid.DataValue[0].id;
    lookupVAE.typename = 'new_vae';
    lookupVAE.name = parentForm.all.new_vaeid.DataValue[0].name;
    lookupData[0] = lookupVAE;
    VAE.DataValue = lookupData;
}

 

Converts to:

if (parentForm.getAttribute("new_vaeid").getValue() != null)
{
    var VAE = Xrm.Page.getAttribute("new_vaeid");
    lookupData = new Array();
    var lookupVAE = new Object();
    lookupVAE.id = parentForm.getAttribute("new_vaeid").getValue()[0].id;
    lookupVAE.typename = 'new_vae';
    lookupVAE.name = parentForm.getAttribute("new_vaeid").getValue()[0].name;
    lookupData[0] = lookupVAE;
    VAE.setValue(lookupData);
}

crmForm.all.item Conversion

JavaScript has a built-in iterator called .item, which is sometimes used by CRM JavaScript developers. We have added support for .item, which will be converted just as if it was crmForm.all. Examples:

var Iframe = crmForm.all.item(id);
var optionSet = crmForm.all.item(new_country);
crmForm.all.item("youRfield" + i + "blabla").style.display = 'none';
crmForm.all.item(fieldName + "_c").style.display = "none";
var type1id = crmForm.all.item("new_type1id").DataValue != null ? crmForm.all.item("new_type1id").DataValue[0].id : null;
var defaultValue = crmForm.all.item(fieldName).DataValue;
var textField = crmForm.all.item(fieldName);
crmForm.all.item(fieldName).DataValue = "UK";

 

Converts to:

var Iframe = Xrm.Page.getAttribute(id);
var optionSet = Xrm.Page.getAttribute(new_country);
Xrm.Page.getAttribute("youRfield" + i + "blabla").setVisible(false);
Xrm.Page.getAttribute(fieldName + "_c").setVisible(false);
var type1id = Xrm.Page.getAttribute("new_type1id").getValue() != null ? Xrm.Page.getAttribute("new_type1id").getValue()[0].id : null;
var defaultValue = Xrm.Page.getAttribute(fieldName).getValue();
var textField = Xrm.Page.getAttribute(fieldName);
Xrm.Page.getAttribute(fieldName).setValue("UK");

 

.Refresh

.Refresh is now converted to .refresh.

 

‘text/javascript’ and ‘stylesheet’ Identification

Added a check for the literals: ‘text/javascript’ and ‘stylesheet’ which can be used to indicate external files where the developer may be adding external JavaScript or CSS files.

 

Tab Visibility

Setting a Tab’s visibility will be converted to the correct CRM 2011 method. For example:

 

tabXTab.style.display = 'none';

 

Converts to:

Xrm.Page.ui.tabs.get(X).setVisible(false);
Leave a Reply