July 29, 2020
OpenXava 6.4 released OpenXava 6.4 is not plenty of new spectacular features, instead it has been improved for beginners, thanks to the new OpenXava Studio, and it has many useful features asked insistently by seasoned developers for years, features always postponed because they were not fancy enough. This version is for you, newcomers, and for you, lifelong OpenXava developers. We invite you to download it and upgrade your OpenXava applications. Look at the migration instructions. |
|
OpenXava Studio It's faster and more beautiful than any Eclipse you have ever seen. To start it execute openxava.exe (for Windows) or openxava (for Linux and Mac), you have this file in the root of the distribution. It will show you this splash: And after a few seconds you will enjoy a fabulous new dark world: Not just a dark theme, but monochrome icons and nice scrollbars, not like the Eclipse Dark theme (we use a third-party theme called DevStyle). OpenXava Studio is based on Eclipse so you don't need to learn anything new, but we have removed all the unneeded plugins that even the more basic Eclipse distributions have. Also we include an open source JRE (called Zulu) and we have improved the workspace to be compiled very fast. So now you can download OpenXava in a virgin machine (without Java and Eclipse), uncompress it, do a click and start to work, without installing anything. And you will work faster than ever. You can customize the look & feel (and set light theme if you prefer) or add any plugin available for Eclipse. And of course, you can continue using your own version of Eclipse or IntelliJ if you wish. |
|
Search by collection content in list mode Now it's possible to define a property of a collection in @Tab, therefore the user could search by that property, hence by the content of the collection in list mode. For example, we could have an Invoice module and want to know what invoices have detail lines of certain product. Something like this: @Tab(properties="year, number, date, customer.name, details.product.description") public class Invoice { ... @ElementCollection // or @OneToMany private Collection<Detail> details; } @Embeddable // or @Entity public class Detail { ... @ManyToOne private Product product; // With a description property } Note as we put details.product.description in the @Tab properties where details is a collection. The result is this: In the above example the user types 'IBM' for Product of details (details.product.description) and the list shows the invoices that contains detail lines whose product description contains 'IBM'. |
|
Import data support references In OpenXava 5.8 we introduced an utility in list mode that allows import data from CSV and Excel. Originally this utility allowed only import plain properties. You said that this utility was very useful but with the ability of importing references would be perfect, practically avoiding the need of writing custom import processes by hand any more. We have heard your prayers and now you can import data with references from list mode. For example, if you have an Appoinment class with a reference to an AppointmenType class: public class Appointment extends Identifiable { @ManyToOne(fetch=FetchType.LAZY) private AppointmentType type; Where AppoinmentType has a composite key, type and level, when you import data you have the option of import the type data too, thus: |
|
IFilter in @DescriptionsList As you already know you can use an IFilter in the @Tab to give value to the parameters you have in the condition. On the other hand, with @DescriptionsList you can define your own condition, where you can use parameters that can be filled with values typed by the user in other fields of the user interface, but you have no way to fill the values programmatically, until now. From now on, you can assign an IFilter to a @DescritptionsList in the same way you do for a @Tab, like in this example: @ManyToOne(fetch=FetchType.LAZY) @DescriptionsList( descriptionProperties = "year, number, customer.name", filter=ActiveYearFilter.class, condition = "${year} = ?") private Invoice invoice; Here the combo for invoices only shows the ones of the active year. In this case the value of the parameter in the condition "${year} = ?" is filled with the logic in ActiverYearFilter, that is an IFilter like the ones you use in @Tab. |
|
ENTER to move to the next field The standard of the web is to use TAB to move to the next field and ENTER to accept the page. OpenXava applications are web application and so follow this standard. We could think that internet and browsers are so ubiquitous that everyone on the Earth have this way of work wired in their minds. Unfortunately this is not true. Many business users are used to old desktop applications where the ENTER is used to move to the next field, and they get very angry, even furious when they save the record when just wanted to move the cursor. And given that our goal in life is making our users happy we have added a new option in OpenXava in order your application uses ENTER to move to the next field. Just edit the xava.properties file of your project and add the next line: enterMovesToNextField=true |
|
Other improvements We have done a lot of improvements in other areas:
- New attribute filter in <descriptions-list> of XML components to use an IFilter.
- Getting started guide simplified and adapted to use OpenXava Studio.
- Lesson 5 of course upgraded to latest features.
- Creation confirmation messages include field values if they are generated on saving.
- Total properties allowed in an @ElementCollection of a base class.
- View.setLabelId() to allow changing the label of sections and groups.
- New method assertLabel(int sectionIndex, String expectedLabel) in ModuleTestBase.
- Detail mode of InvoiceDemo improved.
- Header with breadcrumbs navigation in each documentation page.
- Chapter navigation on top of table of contents for course and reference guide.
- Links no longer open new windows or tab in documentation.
- Documentation style adapted to fit better inside OpenXava Studio.
- More descriptive HTML title in each documentation page.
- IThemeProvider to define your own logic to choose the current theme.
- Automatic label for reference member in list improved.
- Russian translation improved including labels for latest releases.
|
|
Bug fix Though this is not a maintenance version we have done some fixes:
- Fix: Combining inheritance, generic types and @ReferenceView fails.
- Fix: @DefaultValueCalculator does not work for total properties of a collection if @View is specified.
- Fix: assertTotalInCollection() in tests does not work for MONEY properties.
- Fix: Horizontal scrollbar in list mode with large list configuration descriptions.
|
|
|
|