On Feb 5, 2020, at 8:42 AM, Peter Jakobsson wrote:

> I’m going to be making the leap from v15 to v18. I think the biggest 
> transition will be moving to 4D Write Pro as I have quite a lot of legacy 4D 
> Write code to deal with.
> 
> In the meantime, does anybody have experience of migrating big 4D Write 
> codebases ? What are the major gotchas ?

Warning: You may not going like what I have to say below. You are late to the 
game and a direct v15 to v18 upgrade may be very challenging. This is a long 
post for everyone that is going to move to v18+ some day and is currently using 
the 4D Write Plugin.

I’ve done a big code rewrite from 4D Write Plugin to 4D Write Pro in v17. There 
are many gotchas. 

You will need to throw away all of your 4D Write Plugin code and start over, 
from scratch to do duplicate the functionality using 4D Write Pro code. There 
is no one-to-one, command-to-command mapping between the two. Some things in 4D 
Write Plugin code that take 10 lines of code now take 2 lines in 4D Write Pro. 
Some things you can’t do at all, and don’t want to or need to do. In some cases 
you have to use styled text commands to do operations on 4D Write Pro areas 
whereas with 4D Write Plugin there was a plugin command. 

4D Write Pro is based on an object field and an object variable. Some things 
are done by manipulating properties of that object. You will spend a lot of 
time tracking down what those property names are and how to set and change them 
to accomplish what you did with 4D Write Plugin commands. The documentation for 
4D Write Pro is divided between 4D Write Pro commands — which there are very 
few compared to 4D Write Plugin’s many commands — and object property 
manipulation and styled text commands. Some native 4D object commands also work 
and are needed to make changes to 4D Write Pro objects and areas. 

You also manipulate 4D Write Pro object areas using “standard actions” that can 
be assigned to a form button or UI element. You also sometimes need to invoke 
one of these actions to accomplish what you need that in 4D Write Plugin you 
did with a 4D Write command. You use the INVOKE ACTION command for that. It’s a 
new way of doing things that takes some getting used to. Read the docs. Then 
read them again so you get a sense in your mind of what you must do with 
standard actions and the INVOKE ACTION command. 

https://doc.4d.com/4Dv17/4D/17/Using-4D-Write-Pro-standard-actions.200-3726284.en.html

4D Write Pro implements probably 95% of the 4D Write Plugin features and 
capabilities. Might be 99%, but it is not 100%. Maybe you will not miss the 5%, 
maybe you will. You’ll find out when you get into the complete rewrite of your 
code. No, I don’t have a complete list of the missing 5%. For my project I lost 
2-3 small features that I was able to live with. Convenience things for the 
user interface and to help users that were not a big deal. 

It took me two full 8 hour days of 4D Write Pro immersion to get my head around 
how it works when compared to how 4D Write Plugin works. Maybe you only have 50 
lines of 4D Write Plugin code that you need to convert. Then you have maybe a 
day or two of work and you are done. If you have 200+ lines of 4D Write Plugin 
code spread over 50+ project methods and form object methods, it’s gonna be a 
multi-day project. You have to factor in retesting EVERYTHING. That adds the 
most time to the rewrite. Testing EVERYTHING again. 

> Will legacy 4D Write work in v18 in the meantime or do we need to migrate to 
> 4D Write Pro to even run it ? (When I try it it invokes license privilege 
> errors everywhere).

4D Write Plugin is 32bit only. v18 is 64bit only. So zero 4D Write Plugin code 
will run. You can keep the 4D Write Plugin around after the v18 conversion so 
you can still read the 4D Write Plugin code, but none of it will execute. It’s 
32bit and 4D v18 is 100% 64bit. 

> Many thanks for any tips

My advice is to not move from v15 to v18. Instead, move from v15 to v17 first. 
4D Write Plugin still works just fine in v17 32bit. And it can coexist with 4D 
Write Pro. Same license works for both. So you can fork your code and keep all 
the current 4D Write Plugin code and form areas working just as they are. Users 
can continue to use them with the 32bit client. 

4D Write Pro also works just fine with 4D v17 32bit. So you can run 4D v17 
32bit and do all the testing and coding for 4D Write Pro. You can also run the 
4D Write Plugin code in 4D v17 32bit. So you can test the current 4D Write 
Plugin code against the new 4D Write Pro code. That’s how I did all my 
conversion work. 

You will also need to convert all the 4D Write BLOB fields to an object field 
for 4D Write Pro. If you are storing 4D Write areas in a table in a BLOB field, 
create a new object field to store the 4D Write Pro area. To convert 4D Write 
BLOB field to 4D Write Pro object field use code like this:

[LetterTemplates]LetterPro:=WP New([LetterTemplates]Letter_)

Put that in the trigger of the table and any changes you make to the 4D Write 
Plugin field will immediately get converted and saved to the 4D Write Pro 
field. That lets 4D Write Plugin and 4D Write Pro coexist during the conversion 
process. (There is no way to convert 4D Write Pro object back to 4D Write 
Plugin BLOB.)

I used an IP variable that I could turn on and off to set whether to use 4D 
Write Plugin or 4D Write Pro. Methods can check this IP variable and then 
branch to use 4D Write Plugin code or new 4D Write Pro code. Use this with 4D 
32bit. Check if 4D is 64bit, if so you set the IP variable to only allow 4D 
Write Pro code to run. 

When we move to v18 later this year, I will remove the 4D Write Plugin and then 
attempt to compile. All the 4D Write Plugin code will immediately appear 
everywhere as errors. I can then move method-by-method, form object-by-form 
object to strip out the code. I’ve already got in place 4D Write Pro code that 
accomplishes the same work — controlled by the IP variable — so as I remove the 
4D Write Plugin code and delete the 4D Write Plugin methods I can remove the 
branching control code as it will no longer be needed. That’s my plan. 

One last thing to consider. 4D Write Plugin was all done in "72dpi macOS" 
resolution. 4D Write Pro areas have the option of running in "96dpi Windows or 
Web” resolution. There is also “automatic”. Running in 72dpi makes it look the 
same on macOS and Windows. But if you want higher quality, switch to 96dpi, but 
then everything in the area is smaller. So you may want to deal with that. I 
took the easy route and set it to 72dpi so that it all works the same as before 
and on macOS and Windows. 

Final tip, read ALL the 4D Write Pro docs. Read every word of every section. 
You will be glad you did. This will give you a sense of what you can do with 4D 
Write Pro and how to do it.

https://doc.4d.com/4Dv17/4D/17/4D-Write-Pro-Reference.100-3726274.en.html

Good luck on your conversion. 

Tim

*****************************************
Tim Nevels
Innovative Solutions
785-749-3444
[email protected]
*****************************************

**********************************************************************
4D Internet Users Group (4D iNUG)
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to