mercaware is an ERP system running under Linux, consisting out of a Java applet, the application server, the business logic, a PostgreSQL database and development tools.
An end user starts on its client computer the Java applet which performs a TCP connection to the mercaware application server. The application server connects to the PostgreSQL database containing all data records and also accesses the binary parts of the business logic. The graphical user interface is completely defined via the business logic and only vector information, labels etc. are transferred via the TCP connection to the Java applet. Each user interaction (click on a button, typing text into an input field) results in data transferred over the TCP connection to the application server.
The binary parts of the business logic are created using the development tools from the source code parts of the business logic. The business logic contains every logic of mercaware: Any button, input field, layout link between screens, masks, register cards. It also defines the whole database structure and the connection between the user-visible frontend parts and the database fields. Additionally the functionality itself (compute a value for a field, save something into the database, raise an error) is also part. Database changes resulting from business logic source code changes can be applied to the PostgreSQL database using a command line tool.
The development of the business logic source code is splitted into socalled mask definitions (short: maskdef) and formulars. As mentioned before, the mask definitions care about the graphical and database layout, the definition/programming language however can not be compared with any existing language. The formulars add the logic and are called by the mask definitions (different actions and triggers), the programming language here can be compared to C, but without pointers, without the need to allocate/free memory and with limited string handling abilities like in modern high languages. There are additionally application specific functions to get input values from masks, to trigger actions on the database etc. The whole formulars are functional, not procedural, manual linking is not required. From a mercaware developer perspective, the mask definitions and formulars are compiled using GNU make together own compilers, which use in the end bison, flex and gcc (and also take care about linking etc. on system level).
The business logic source code is organized into socalled modules, e.g. mod_base
. These modules are stackable, the order is defined in the modules.in
file. Stackable means, module B can extend module A on mask definition and formular level. Extend hereby also means to add new buttons, input fields, masks, register cards, etc. as well as formulars and include files - including hiding, removing or disabling elements from previous modules. The mod_base
module is kind of special, because it contains values that need to stay in sync with the application server for login, session handling and other built-in functionalities.
*.java
codeDEBNR_DEB_DEB
) arestab
and/or esstab
)mxnd
processmxnd
is not knownmxnd
are not the database sequence/primary key (that part is handled via auto-increment in PostgreSQL)incoming
directory of mod_documents
(business logic module) for new incoming documents to trigger actionsmxinputconf
configuration filemxlicense
file which contains information aboutMakefile
s (GNU make) to create a mxmask.obj
per module and one global mxmask.msk over all modulesMakefile
s (GNU make) to compile a *.sr
(binary) for each *.ssr
(source code)mod_<name>
, e.g. mod_base
mod_base/
mod_base/maskdef/
mod_base/maskdef/passwd.def
(mask definition file, source code)mod_base/maskdef/passwd.ded
(mask definition file, after preprocessor run)mod_base/maskdef/layout_base.deh
(include file, similar like a C include)mod_base/maskdef/mxmask.obj
(mask definitions of all *.ded
, binary file)mod_base/maskdef/mxlang.mod_base
(mapping between IDs and texts including translations for masks)mod_base/formular/define.ssh
(include file, similar like a C include)mod_base/formular/passwd1.ssr
(formular file, source code)mod_base/formular/passwd1.ssd
(formular file, after preprocessor run)mod_base/formular/passwd1.sr
(formular file, binary file)mod_base/formular/mxform.mod_base
(mapping between IDs and texts including translations for print formulars/documents)mod_base/formular/mxerrs.mod_base
(mapping between IDs and texts including translations for formulars for error/success/warning messages)*.ded
, *.obj
, *.ssd
or *.sr
mod_base
module is kind of special, because it contains values that need to stay in sync with the application server for login, session handling and other built-in functionalitiesmodules.in
fileint main(void)
function*.sr
during run-time leads to failure when trying to call the functionality via Java applet