FredTek

Upgrading from ND 3 to ND 4

A colleague recently asked me to describe the expected impacts (migration process, code changes, testing, end user, other) as a result of going to ND 4. Since it took so long to compose the reply, I figured that I may as well share the response with anyone interested.

  1. ND 4.x requires (MUST!!) use a SQL*Net client of 2.3.4 or greater!! (ND 4.x cannot use SQL*Net clients that are not multi-threaded!) This stopped us dead in the water over at a client site until I realized that the item that ND recommended for a 'performance enhancement' was actually something required for it to work at all!

  2. Development machines running Windows NT MUST have at least 128 MB of memory AND a monitor capable of displaying 800x600-pixel resolution in a readable manner. The a client site folks attempted to use 15" monitors and quickly placed an order for 17" monitors. (The Studio and the Command Center need lots of room to fit everything in!)

  3. The outer / inner join operators are reversed from previous versions of ND. (This change came out in the change between ND 4.02 and ND 4.1. This really ticked me off because I had an ND 4 application that stopped working, and no one had said anything about this kind of change.)

  4. Dates and times are handled differently in 1.1 than they were in 1.0. If you're using at ND 1.13, this may not affect you much.

  5. Many of the events are now handled on the display field level as well as on the page level. For instance, each display field has its own onBeforeDisplayEvent and onBeforeHtmlOutputEvent. The old practice of using one onBeforeDisplayEvent and one onBeforeHtmlOutputEvent for the entire page doesn't work very well in ND 4.1.

  6. Methods for the events must be "public" and not "protected".

  7. Event handling has some VERY subtle differences than in previous releases. For instance, in the past, I could set the dynamic criteria for a data object in the onBeforeLoadEvent for the page. Now it MUST be done either in the onBeforeDataObjectExecuteEvent for either the page or for the repeated being populated by the data object. Also, the logic that used to be in the onBeforeDisplayEvent from ND 3 should work perfectly fine in the this_onBeforeDisplayEvent from ND 4. However, this is not the case because the event order is different.

  8. The methods for button and HREF web events MUST be called <FIELDNAME_onWebEvent.>

  9. Several methods (about 80) have been deprecated and new methods have been introduced. While ND recommends that the use of these methods should be corrected, it's actually another thing that seems to be required. Some of my favorite deprecated methods, constants, etc. include:
    • All User session object methods
    • PROCEED_WITH_BUILTIN_HANDLING
    • STOP_PROCESSING


  10. At the very least, you need to recompile everything. ND 4.1 uses JDK 1.1.6 (which is different from ND 4.02, which used 1.1.5).

  11. You have to be very careful about multithreading issues. In the previous release, all you needed to worry about was multiprocessing issues. (Check all static methods to make sure that using them in multiple threads in the same CP will not cause problems.)

  12. You can't save handles to objects in other projects.

  13. You can't use CSpider.clearCache() in your code any more. I'm sure that there are other things.

These are the big items I ran into when I attempted to port the one of my old applications (for grins and giggles) to ND 4. It wasn't a seamless operation by any means. I worked on the first of the six projects I did for the app for about an hour and still didn't have everything compiling, so I gave up. Pretty pathetic!

One other problem that affects all releases is that the documentation is some sort of mutation of ND 3.x and ND 4.x functions. For instance, a description of an ND 4.x method includes an example of how to do something, but it uses events and deprecated methods that aren't even recommended for use in ND 4.x. The same goes for tech notes and other information from the web site. It's such a mish-mash that it takes a VERY clear understanding of the differences to determine what ND 3.x stuff doesn't work and what still does.

All of this is not meant to indicate that nothing works nor that it is a product without merit. It actually has some nice features. Some of those features, if used properly, can save enormous time in coding an application. However, is now the best time to upgrade? Ask me when ND can go for more than a month without a release!