Currently, in Openbravo 3 there are two fundamental ways to define a Foreign key column:
- Using a selector (the "Defined selector" reference)
- Using an old-schooled combo (the "table", or "tableDir" reference).
Selectors use OB3 Smartclient components, and are attached to a datasource. Combos also use Smartclient components in OB3, but instead of being attached to a datasource, they are filled with the whole set of data using the OB 2.50 ComboTableData classes.
So combos currently have two main disadvantages:
- Performance: Current combos have quite good performance if the dataset they query is small, but scale poorly, and if the dataset is big enough, they have terrible performance, and they can even drag down the application for all users.
- Model inconsistency: Combos are based on ComboTableData, which generates SQL queries to the database. This means that whereclauses, filters and validations need to be defined in the SQL language, which is inconsistent with the rest of the OB3 model (which uses HQL).
The main requirement for this project is to be transparent. It should not require of any modification in Application Dictionary Definition in order to make it work.