DataEase 7.5 - Sneak Peek! New test version soon....
Our current Test version is now "old", and as a lot of you would have found out, it no longer works.
We have made giant leaps forward since the last test version, but before we release the next "preview" version, we want to test some of the features ourselves.
1. New Look and Feel.
We are already in DG3 territory, so one of the things we have chosen to with both 7.5 and 6.53 is to give them a DG3 "theme". We felt that 7.2 was beginning to look a little "dated", and one of the biggest complaints we have got about 6.52 is that it looks like a "blast from the past", on the desktop. In 6.53 the point is to make it look current, when in reality it is the exact same version, in 7.5 it is a completely new version, with more genuinely new functionality than any previous version of DFW.
2. New Application from Template.
One problem that has been with DFW from the start has been configuration of a new application. When you chose style, you chose it for Form, Report and DQL. You might want a style with loads of colours for form, but you want a plain one for reports and DQLs. Over the years, it was fixed so you could select this in Properties, but there was no way to do this for New apps, except manually.
With the new functionality we make your new app from a Template App. This app is a fully functional DFW app, that can be configured as much as you like. Add forms, reports, examples, styles, CDF's etc. Whatever you can do in DataEase you can now get as a starting point in your New Application.
3. CDF Load up.
We have created an automated functionality, that will load up all the official DataEase CDF's when you create a new application, or when you upgrade a 7.x application to 7.5. If you have a CDF that you want us to add to the "standard" library, just forward it to us and we will include it if we find the functionality is useful for the general public. Make sure that you have the intellectual property rights to the code. At the moment we haven't decided which functions to include, but the functionality is implemented and works.
4. Application Printers
One "headache" in DFW has been to direct print to the correct printer. For the "advanced" users this has been solved through CDF's, but in reality this is something that we should address. In 7.5 we have implemented a solution that looks and feels a lot like Workstation/Application printers in DFD. For each Workstation/Application, you can select up to 4 Application Printers.
When you create your reports/prints, you reference them as Printer 1-4 under Predefined Printers. You will need to check for "Print without displaying dialog" to direct the print automatically to the correct printer. If you do not check this, you will get the normal print select dialog when you print, and you will have to choose the printer you want to use.
5. Relationship Definition from Inside Field Definition etc.
For a long time we have had a "Quick Fix" New Relationship options inside the field definition etc. This means that you can define a relationship on the fly, without having to go to the Relationship Form like in the "good old days". The only problem has been that, the form needed to be save, and the field that you wanted to use in the relationship needed to exist. You could also not define a relationship with no constraint.
This is all quite stupid, since you very often want to use the current form and a field in the current form (not saved) as part of the relationship. Everyone that has used DataEase a bit, also know that a Relationship without field restraint, is a "Hidden jewel" feature in DataEase.
In 7.5 we have removed all these constraints, and you can now create relationships via the dialog, without restrictions. It is a small thing, but just try it removes a lot of irritation.
6. Memo Fields.
The new memo fields that arrived with DFW 7.0 has not lived up to the expectations. The reason is simple, they are not a replacement for the old Memo fields, they are a completely new concept in DataEase terms.
The old memo fields, was in many ways just a "slightly" larger Text field. If 255 characters was too little, you could increase it till it fitted your need. They were proper DataEase fields, as they were stored in the DBM file and was made up of a set of 255 long text fields.
The new Memo field is in fact a "remote" field, where only the reference to the field is stored in the DBM file, and the rest is stored in a external file. it is brilliant to store larger amount of text, but it is completely useless in the role of the slightly larger Text field.
It was a big mistake to migrate 6.53/dfd Long: fields to memo in 7.x, and this is one of the many reason why we no longer recommend people to migrate from 6 to 7.
In DG3 we have already implemented span fields, which is a modern version of the long: fields, but we intend to implement them in 7.5 too, and they will take the role of the old long: fields.
We now re-focus Memo as a LargeText/RichtText field.
One big problem with the current Memo field, is that it cannot be manipulated. There is no way of automatically populate it, search it. The only thing you can use it for, is to write into manually.
This has changed in 7.5. One of the biggest jobs we have done is to implement a Memo manipulation class. The reason Memos has been so difficult, is the fact that DataEase PRISM is still 8 bit, so you can only transferee 255 characters between functions. We have worked around this by doing the transferee inside the functions directly, and the return value of the functions is only a status etc.
Int MemoAppend(MemoTo, Text)
This function Append a 255 long text to MemoTo, returns the number of characters appended.
A big problem in DFW pre 7.5 is that you cannot append data beyond 255 in a memo field, which then in for all practical purpose render the memo useless for programming. MemoAppend simply appends up to 255 characters at the end of the given Memo.
Returns a chunk of 255 characters from a Memo, the chunk number is indicated by Chunk where the Chunk is a multiple of 255 chunks.
With this way you can "decompile" a memo field, and store each chunk in a 255 long text field.
The usage is to decompile a Memo, then programmatically manipulate the data in a DQL etc, and then you can rebuild the Memo via the MemoAppend function.
Int MemoMemoAppend(MemoTo, MemoFrom)
Same as MemoAppend, but you can here append an entire memo at the end of the first memo.
int MemoMemoCopy(MemoTo, MemoFrom).
Copies a Memo to another Memo. Overwrites the destination Memo.
int MemoFind(Memo, TextToFind)
This is the most revolutionary function of them all, and in practice this is free text search in DataEase. You can use this function in DQL to scan through a wast database, to look for an occurrence of any text.
Memofind will return 0 if the text do not exist in the Memo field, and the position if it does.
The Search field on the News page on our website, is created using a DQL and this function.
Int MemoReplace(Memo, TextToFind, TextToReplaceWith).
This function will scan trough an entire memo field and replace all occurrences of TextToFind with TextToReplaceWith.
We use this function to create our online documentation. We simply run a DQL based on a keyword table, that look for the keyword in a document. When the keyword is found, it replaces it with the tag for that keyword in the database.
Ex. JoinText will be replaced with JoinText
This way one can programmatically manipulate an entire Database to cross reference. Lots of other uses too of course, we are just spurning you on...
7. Virtual Memo fields.
Sounds like a small thing, and hey! what do you use it for? Virtual fields is one of the strongest features in DataEase. So far Memo fields has been quite useless, and since you couldn't really do much with them other than writing directly into them yourself, virtual memo fields was useless. But not so any more. Now you can manipulate them and play with them, and you want bits of pieces of them to be displayed as text here and there....best way of doing it, virtual Memo field. Fantastic feature!
This is just some functions of the top of our head, we will add to this document as we go along, but it is already quite long, and we don't want to bore you at this stage :-)
Functions in the pipeline.
* int SetValue(Field, value)
This is already implemented, but it doesn't yet work as it should. What we want is for you to be able to push a value into a field from another field. You can already do this with OML etc, but we want a simple function you can use programmatically. At the moment you can only pull this value.
* int PrintMemo()
Simply print the content of a Memo field as an independent document. With RT formatting, you can format the document freely. End of rigidity...
* RichText fields.
Change the Memo field to a RT field, so you can use editor functions, fonts, colours etc. Somebody went wrong when they implemented this with the same editor functions as the other DataEase fields. Tab order, and Enter to tab between fields is not the order of the day here, but to improve the functionality inside the Memo field. It is an editor, so let's use it like that. Printing of Memo fields is a nightmare too. We will try to implement printing of the content , rather than as a part of the document. Much more contemporary, and many more possibilities. Then you can programmatically manipulate a Memo fields (with the new functions) building an Invoice or whatever, then you can print it as a RT document with PrintMemo().
* Date Picker.
The DataEase date field is a little "out of date"... So we are modernising it by adding a date picker. You will not have to use it, it is optional, but will make your app a little more modern.
* HTML directly in page.
We are planning to make a HTML plugin for DFW pages. This way you can include a web page directly in your DFW form. Especially useful when developing a cross platform application with DG3. You can of course include any web page in your app, and then you can include Web navigation on the inside of the Plugin, and DFW navigation on the outside. Functionality will be like Image Field, the difference being that value is a URL. Lovely!
*Global Variables - fianlly, Arrays, PicturePicker, File finder....time will show!
* Internal PDF printer has been removed, but you can now get the same functionality with a free PDF printer off the internet, and the Workstation Printer functionality. What we are looking into is to make a function so you can tell your printer what filename to print to. No promises, but we think we can do it..
Published: 10/01/12 - 16:09:39 (Ulrik Jacob Hoegh - Krohn)