CRM JavaScript Conversion Assistant 2.0 Released. New name, new features, new price

I am very proud, and a little relieved, to announce that general availability of the CRM JavaScript Conversion Assistant 2.0.

Download the trial version now or visit our product page for more information.

 

New Name

The product formally known as the CRM Migration Assistant has been renamed to the CRM JavaScript Conversion Assistant to more closely match its name with its functionality.

I am keeping the version number sequence the same.

 

New Price

The price has been reduced to $395 (from $495).

 

New Features

The following new features have been added:

Convert from CRM 2011

The most important feature added is the ability to connect to a CRM 2011 Organization and convert the existing JavaScript Web Resources.

The JavaScript can be uploaded back into CRM 2011 after you have finished the conversion process.

Conversion Alert Handling

The way conversion alerts are handled in the user interface has been enhanced. Any entity that contains conversion alerts is now highlighted in the event list:

EventList

The number of conversion alerts is displayed in the upper-right corner of the CRM 2011 window. This is actually a button. Clicking the button will cause the CRM 2011 editor to jump to the next Conversion Alert.

ConversionAlerts-Count

Markers have been placed in the left margin on lines that contain a Conversion Alert:

ConversionAlerts-Markers

Next and Previous buttons have been added that allow you to jump to the next and previous Conversion Alert:

ConversionAlerts-NextPreviousButtons

 

Improved Conversion Report

The Conversion Report has been modified and enhanced to provide a better view into the work that either has been performed by the conversion process or the work that will need to be provided. Here is how the Conversion Report is designed:

ROI

Provides a "guestimate" as to the amount of time and the CRM JavaScript Conversion Assistant saved you.

Conversion Alerts

Lists all of the conversion alerts found during the conversion process.

 

ActiveX Objects

Lists all ActiveX objects that were found, and their locations. This is good to know if you are planning to provide cross-browser support.

External Files

Any references to external files including: JavaScript, .ASPX, .CSS, and .ASMX

Object Locations

References to attributes and functions and where they can be found on the forms.

Duplicate Functions

This is a list of duplicate function names and where they can be found. Reduction of duplicate functions is one of the primary cleanup activities when you’re converting from CRM 4.0.

Duplicate Events

Events whose JavaScript exactly matches. Again, this is provided to help you reduce the amount of code you are writing and maintaining.

Event Summary

Lists the following information for each of the entities converted:

  • Name
  • Lines of Code
  • Conversion Alerts report
  • Conversions performed by the CRM JavaScript Conversion Assistant.

 

New Conversions

The conversion process has been enhanced and the following conversions have been added:

1. Added Conversion Alerts for the following keywords:

  • AddBindingColumn
  • AddDependentParameters
  • AddItems
  • AddOptionGroup
  • allowblankdate
  • AreValuesDifferent
  • AttachDataSlugEvents
  • attachEventHandler
  • BuildXml
  • BuildXmlToSubmitForm
  • BypassValidation
  • CreateInnerSlug
  • crmTabBar
  • CurrencyPrecision
  • CurrencySymbol
  • CurrentOperatorIsClear
  • DataXml
  • dblclick
  • DeleteDataSlug
  • DeleteDataSlug
  • displayMissingValue
  • DisplayValue
  • fireSaveEvent
  • FormatDuration
  • GetDataXml
  • GetInnerControl
  • GetLabelControl
  • GetLookupControl
  • getLookupField
  • GetLookupTypeIcon
  • GetTab
  • getTime
  • GetXml
  • IgnoreCurrencySymbol
  • InitializeLookupPresence
  • insertCell
  • insertRow
  • InsertSlugControl
  • IsBaseCurrency
  • IsMoney
  • IsPermissibleType
  • IsValid
  • Items
  • launchOnDemandWorkflowForm
  • Lookup
  • NO_DATA
  • oncontextmenu
  • onfocusin
  • onfocusout
  • onmouseenter
  • onmouseleave
  • ParseXml
  • Print
  • QueryLookupPresence
  • RaiseOnAfterSelectEvent
  • RaiseOnChange
  • RaiseOnChangeEvent
  • RaiseSetAdditionalParamsEvent
  • RefreshLookupItemImage
  • refreshTimeValue
  • RemoveItem
  • ResetDefault
  • ResetToDefault
  • RunReport
  • SetAllFieldsToNonReqLevel
  • SetCurrency
  • SetDataSlugs
  • SetTabFocus
  • setTime
  • Sort
  • SortingEnum
  • SubmitFormId
  • swapNode
  • TimeControl
  • UpdateInnerHtml
  • UpdateItem
  • UpdateOperatorControl
  • VerifyFieldIsSet
  • Visible
  • WillSubmit

Many of these came from information found in the Custom Code Validation Tool that Microsoft released a couple of weeks ago.

It should be noted that not all of these keywords identified in the Custom Code Validation Tool will be recognized by the CRM JavaScript Conversion Assistant. This is because the conversion process is verified by a series of unit tests ( 510 at the moment ) and I could not find code samples to verify the usage of the method or property. Since I could not find code, I could not write a test. Not test means no inclusion in the conversion process.

If you run into anything that I missed, please send me a code sample and I’ll get it added to the process as soon as I can.

2. Converted: crmForm.HideField(crmForm.all.lastname) to
                     Xrm.Page.getControl("lastname").setVisible(false)

3. crmForm.<attribute name>.Clear
 
This internal method was used to remove data from an attribute. The supported way to do this is Xrm.Page.getAttribute("<attribute name>").setValue(null);

4. Corrected conversion issues caused by improperly written JavaScript.

5. Added support for .defaultValue, which converts to setValue().

6. Any references to window.event.srcElement will automatically have
   the "window." qualifier removed.

7. Added a conversion alert when any hard-code GUID is found. For example:
lookupItem.id = ‘{45A34093-8731-DC11-A0C7-0019B9DE8282}’;
lookupItem.id = /* CONVERSION ALERT */'{45A34093-8731-DC11-A0C7-0019B9DE8282}’;

8. Added support for conversion alerts for:

  • areaAccounts
  • areaContacts
  • areaAddresses
  • areaOpps
  • areaQuotes
  • areaOrdersareaInvoices
  • areaService
  • areaContracts
  • areaRelationships
  • areaListsInSFA
  • areaCampaignsInSFA
  • areaCampaignsInListareaForm

9. .Click method handling:
   crmFrom.all.tab1Tab.click();
   Xrm.Page.ui.tabs.get(1).setFocus();

   document.getElementById(‘navAddresses’).click();
   Xrm.Page.ui.navigation.items.get("navAddresses").setFocus();

   All others produce a Conversion Alert.

10. crmForm.all.name.setAttribute("display", "none"); convers to:
       Xrm.Page.getControl("name").setVisible(false);

11. crmForm.all.name.Visible = true; converts to:
       Xrm.Page.getControl("name").setVisible(true);

12. innerText property handling:

       crmForm.all.tab2Tab.innerText = ‘Contacts’; converts to:
       Xrm.Page.ui.tabs.get(2).setLabel(‘Contacts’);

       document.getElementById(‘navActivityHistory’).innerText = "Closed History");
       Xrm.Page.ui.navigation.items.get("navActivityHistory").setLabel("Closed History"));

       crmForm.all.new_field.innerText = "My Label";
       Xrm.Page.getControl("new_field").setLabel("My Label");

       crmForm.document.title = titleElem.innerText;
       Xrm.Page.getAttribute("document")./* CONVERSION ALERT */title = titleElem.
          /* CONVERSION ALERT */innerText;

13. crmForm.SetLabel converts to:
       Xrm.Page.getControl (\"estimatedvalue_base\").setLabel();

14. crmForm.GetControl() converts to:
       Xrm.Page.ui.controls.get()

15. Conversion alerts added for any of the following external file extensions:
       .js, .aspx, .css, .asmx

16. When inserting a conversion alert, the previous code block is checked and if a prior conversion alert is found, a new one is not inserted.

17. crmForm.all.name.MaxLength is now converted to:
       Xrm.Page.getAttribute("name").getmaxLength()

18. crmForm.all.new_field.SelectedIndex converts to:
       Xrm.Page.getAttribute("new_field").setValue();

19. crmForm.all.new_field.SelectedOption converts to:
       Xrm.Page.getAttribute("new_field").getSelectedOption()

20. crmForm.all.new_field.Value converts to:
       Xrm.Page.getAttribute("new_field").getSelectedOption()

21. crmForm.GetLabel(crmForm.all.customerid); converts to:
       Xrm.Page.getControl("customerid").getLabel();

22. oNavItem.style.setAttribute("display", "none"); converts to
       oNavItem./* CONVERSION ALERT */style.setVisible(false);

Note: the style reference can probably be safely removed, in the sample above, but this needs to be a manual process.

23. Modified the conversion alert process for ObjectTypeCode.

 

Conversion Speed Improvements

The conversion time has been reduced again.  Here are the conversion metrics for my main test organization:

Files: 144, Lines of JavaScript: 7,408, Conversion time: 00:00.30

The previous conversion time was 00:00.65.

 

Wrapping Up

I’ll be releasing updated documentation and videos in the coming days to show the functionality and usage.

I’ll also be conducting a free webinar sometime in the near future to discuss the process of migrating your JavaScript from CRM 4.0 to CRM 2011.

Leave a Reply