Migrating 2.3 code to DF3.1
by Frank G. Vandervelpen
This white paper describes some of the problems that you can expect to see if you migrate your code from DataFlex release 2.3 to DataFlex 3.1
|No Files Available
||Frank G. Vandervelpen
||Velpe Development bvba
Latest update: 19 Aug. 2002
I have done some investigating on possible traps concerning a migration towards DF3.1. We have to look into all possibilities. Any additional features can be added to this document.
I would also like to refer to the book `Transformation' of Doug Goldner.
* There are 3 commands to set the data towards the Y2K compatibility. If it is used in conjunction with the adding of 693??? to the date, it will result in very odd dates. Double-check whether this number is still being used in the source codes.
* When the customer has made changes to the original FMAC, these changes might also be necessary for the new DF3.1-FMAC.
* We already know that many locks have been programmed in a way that locking does not guarantee data integrity. DF3.1 will result in error messages when locking has been used inefficiently. These might need to be replaced. An option to look at is to make transaction blocks and forget about manual locking (ad hoc).
* [Windows version of DF3.1] Some communication directly to the hardware - i.e. direct_output via COMx - may not function/ be prohibited. DFRunCon is a version of Dataflex that runs on the Win32 sub system. Some operating systems such as Windows NT and successors may block any communication directly to the hardware. Solution for this can be the use of Windows 9x operating systems or using an external program that handles the communication. (i.e. a DLL written outside Dataflex)
* MIN and MAX operators in DF2.3 were introduced with the < > - sign. These signs have now another meaning. It are logical expressions (less than, greater than). When it is used at the project site, these commands might need to be changed to MIN MAX. (!!! The operators < > in expressions)
String expressions now have a new meaning. We can use expressions like a + b. This expression will lead to a concatenation, just as * and - can be used as well. This might result to missing and/or wrong information. I will give an example and you will immediately see that it is very hard to find it back in the sources.
Description QtyIn QtyOut
_ . _.
_ . _.
Total _ . _.
Move 'Line1' to scr1.1
Move 'Line2' to scr1.4
Move 20 to scr1.2
Move 30 to scr1.3
Move 40 to scr1.5
Move 50 to scr1.6
Move 'FLU' to scr1.7
For Windowindex from 1 to 2
Calc (scr1.1& + scr1.4&) to scr1.7&
You would expect that this would result in 60 and 80, but this is not true. This will result in 2040 and in 3050. This is of course something that throws another perspective on the migration phase. It will be a lot harder to investigate if these kind of expressions where used. This ends in these results because the type checking is interpreted otherwise. This means that all string expressions should be looked at.
Move `1' to sVal1
Move `2' to sVal2
Move (sVal1 + sVal2) to sVal3
This will result in 12 as the calculation is done on string values meaning a calculation.
While migrating, we can also change sysdate to sysdate4 commands, but this is not seen as a needed issue. However, if we need to make changes, we might want to look into this as well.
When Data Access first deployed their DF3.01 version they have defined a compiler variable called -X23. When compiling the sources with DF3.1 and using this, I can confirm that the <> operators and the string expressions are fully compatible with the 2.3b style. Looking at this parameter and if it is successful would gain us a lot of days. Especially testing with the locks, the inclusion on the year2000 commands and the changed FMAC should still be considered. However, if these changes are successful we could do the job in just a few days.
Each of the above situations should have a little study on its own. We should compare the behavior between a normal compilation and compiling with the -x23 parameter.
Test this application with a multi-user runtime, because locking in a single user version is excluded.
Hope this will help in making the best decision.