]po[ DynView

A "DynView" represents the way how certain ]po[ will render a list of objects.


Requirements

Frequent new modules need to extend the ListPages of important business objects (such as customers, projects, ...) by their additional columns. For example the ]po[ Timesheet module may need to add a column to the ProjectListPage with the amount of hours spend on every projects. The ]po[ Core module may not know about this future necessity in the moment is is implemented. So we want to allow a-posteriori extension of ListPages.

Dynamic Views are also required/desired when showing information about subclasses of objects, such as an EmployeeListPage. The EmployeeListPage may want to add a column such as "Monthly Salary", which does not make sense in the general UserListPage. Dynamic Views allow to have a single .tcl/.adp page showing different views, depending on URL runtime parameters.

Design

To allow for dynamic extensibility, we keep all column information in a database table:

  • Column Name:
    The header of the column.

  • Column Render TCL:
    TCL code being dynamically called for each table cell to return the HTML code for this cell.

  • Extra Select:
    SQL code to be included in the SELECT section of the SQL query.

  • Extra Where:
    SQL code to be included in the WHERE section of the SQL query.

  • Visible For:
    TCL code that needs to evaluate to "1" in order to show the column to the specific user. This field typically contains im_xxx_permission calls to validate the users access rights.

 

Data Model

 

Structure of the im_view_columns database table: 


create table im_view_columns
       column_id				integer
								constraint im_view_columns_pk
								primary key,
       view_id				integer not null
								constraint im_view_view_id_fk
								references im_views,
       column_name			varchar(100) not null,
       -- tcl command being executed using "eval" for rendering the column
       column_render_tcl		varchar(4000),
       -- add to select statement for when the column name results from an "as" command
       -- for ex., you can customize viewing columns
       extra_select			varchar(4000),
       extra_where			varchar(4000),
       sort_order				integer not null,
       -- set of permission tokens that allow viewing this column,
       -- separated with spaces and OR-joined
       visible_for			varchar(1000)
);

Im_views contains a mapping of names to view_ids and provides RI to im_view_columns:

  • Visible For contains a TCL expressions that needs to evaluate to 1 in order for the current user to be allowed to access this view.
create table im_views (
       view_id                  integer
                                constraint im_views_pk
                                primary key,
       view_name                varchar(100)
                                constraint im_views_name_un
                                not null unique,
       visible_for              varchar(1000)
);

There is a typical ListPage example that shows how everything fits together.

 

References

 

Related packages:

  • ]po[ core package defines the DynView object type.
  • The DynField package allows adding new fields to existing ]po[ objects. DynViews allow to include these dynamic fields into list views.

 


  Contact Us
  Project Open Business Solutions S.L.

Calle Aprestadora 19, 12o-2a

08902 Hospitalet de Llobregat (Barcelona)

Spain

 Tel Europe: +34 609 953 751
 Tel US: +1 415 200 2465
 Mail: info@project-open.com