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.
- 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!
- 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!)
- 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.)
- 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.
- 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.
- Methods for the events must be "public" and not "protected".
- 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.
-
The methods for button and HREF web events MUST be called
<FIELDNAME_onWebEvent.>
- 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
- 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).
- 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.)
- You can't save handles to objects in other projects.
- 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!