Posts tagged ‘Middle East’

March 20, 2012

Openbravo: How to use dynamic expressions

How to use dynamic expressions in Openbravo

–  Amar Singh, Sysfore

Introduction: 


Dynamic Expressions are used to obtain values that can depend on session values. For example they can be used to to filter the records that appear in a tab by the ones that were created by the user that has logged into the application.

Session Values: 


Depending on how the definitions are; there are different kinds of session values.

It is possible to check (as System Administrator) all current values loaded in session in Openbravo by going to General Setup || Application || Session Variables window.

Types:


Session global variables: These values are generated by the java classes and are accessible from anywhere in the Openbravo application.

Columns :Values for all columns used in a tab are accessible as session variables within that tab. Additionally it is also possible to set explicitly a column a session value by setting its Stored in session attribute. This will make this value accessible not only for its tab but also for all the tabs in that window.

Auxiliary inputs:

Auxillary Inputs are used to create a session value for a concrete tab. This value can be calculated using a Dynamic Expression and its purpose is to use it in other Dynamic expressions within the tab it is defined for.

Auxiliary Inputs are defined in the Openbravo by going to Application Dictionary || Setup || Auxiliary Input tab.

Accessibility:

Syntax and types in Dynamic Expressions

Using session values

In Dynamic expressions session values are obtained by their name surrounded by at symbols (@). Thus to get the content of a session value called myValue, it would be done typing @myValue@. Doing it in this manner it would follow the accessibility described above, but it is possible to explicitly obtain the global value (if exists) not taken into account the other ones, to do so the value would have a sharp symbol (#) as prefix. In the previous example it would be @#myValue@.

Dynamic expressions types

There are different types for Dynamic Expression, each type can be used depending on the Application Dictionary object it is defined in. A complete list of all the objects and which kind of expression can use is defined in the next section.

The types are:

Constant :It can be a constant value or a value in stored in session, this type can be used by all the objects. To set this type no prefix is needed.

Examples:  @#AD_User_ID@ 

SQL : Some objects accept SQL expressions. This type must have a @SQL= prefix followed by the SQL clause. It also accepts session values.

Example:

@SQL=SELECT PROCESSED

       FROM SW_SREQUISITION 

WHERE SW_SREQUISITION_ID = @SW_SREQUISITION_ID@

 

      WhereClause : It is a SQL where clause, in this case it is not necessary to add the @SQL= prefix.

Checks : It is used to obtain a boolean value. It does not have any prefix.

Its syntax is Javascript but the comparators are:

·      = instead of ==

·      ! instead of !=

·      & instead of &&

·      | instead of ||

Advertisements
March 8, 2012

Data Access Layer Architecture in Openbravo


– Narayanaswamy, Sysfore

1 Introduction

The goal of the DAL development is to strengthen the middle-tier in the application, i.e. to implement business logic in Java. The DAL provides the application developer with the following functionality:

  • Type safe querying and retrieval of business objects from the database.
  • A convenient API to update or create new data in the database.
  • A type safe interface to update information of a business object, increased productivity by making the properties of a business object directly visible through getters and setters (in the IDE).
  • Transaction and context handling.
  • Security and validation checking.
  • Automatically maps new entries in the Application Dictionary to database tables and columns.
  • Generates Java class business objects (and their associations) on the basis of the Application Dictionary model.

The DAL consists of a development-time and runtime part. The development-time part takes care of generating Java business object classes. The runtime part takes care of mapping Java classes to the database and supporting functionality such as security and validation.

2 DAL Architecture

The Data Access Layer (DAL) provides an API to store, query and remove business objects from the database.

The DAL offers three main services to instantiate, create and query Openbravo ERP business objects: OBDal, OBCriteria and OBProvider. The service classes can all be found in the org.openbravo.dal.service package.

3 OBDal

The OBDal instance (available through OBDal.getInstance()) is the main entrance point for retrieving and storing business objects in the database in a validated and secure way. It provides the following functions:

  • save: stores a new business object in the database or an existing business object is updated. For existing business object it is not required to call this method as Hibernate does automatic dirty checking.
  • get: retrieves a single business object using its id. There are two versions: one using the class name (of the generated business object) and one using the entity name.
  • remove: delete a business object from the database, the actual database delete is done at commit time.
  • create OBCriteria: OBCriteria objects are used for querying.
  • commitAndClose and rollbackAndClose: these methods can be used to implement custom transaction handling. Normally this is done by the environment (Openbravo web container or Openbravo test).

The OBDal API makes extensive use of the OBCriteria and OBQuery classes to support querying.

4 OBCriteria

The OBCriteria class implements the Hibernate Criteria interface. It extends the standard Hibernate Criteria functionality for filtering on active, client and organization. In addition it offers convenience methods to set orderby and to perform count actions.

  • Summarizing, the OBCriteria object supports all Hibernate Criteria features:
  • Setting the where-clause of a filter using the Hibernate Criterion concept.
  • Setting paging parameters such as first row and maximum number of results.
  • Setting order by on the query.
  • Specifying joins for performance reasons.
  • Performing counts, average etc.

5 OBQuery

The OBQuery class is an extension of the Hibernate Query object. It extends the standard Hibernate Query functionality for filtering on active, client and organization.

The OBQuery object is created through the OBDal.createQuery method. The first argument of the createQuery is a class or an entity name, the second argument is the where-clause.

6 OBProvider

Openbravo business objects should not be instantiated directly using the new operator. Instead the OBProvider class should be used to create an instance of the required business object. The OBProvider is located in the org.openbravo.base.provider package and can be retrieved using the method OBProvider.getInstance(). The OBProvider offers methods to instantiate using a class name or using an entity name.