[[TracNav(MolgenisGuide)]] = Generating MOLGENIS from scratch, the Address Book Example = == 1. Create the data model in `addressbook_db.xml` == Create a new xml file ‘addressbook_db.xml’ in the root of you application. This file will contain the MOLGENIS model. Use the following template: {{{ #!xml }}} === Create a “Contact” data type === {{{ #!xml }}} === Add properties to “Contact” === * A unique, automatic numeric identifier field that MOLGENIS will use to refer contacts. {{{ #!xml }}} * A required and unique string field ‘displayname’ to have a unique label to find Contacts by. Note that if you provide no ‘type’ then type=”string” is implied. {{{ #!xml }}} * Optional (‘nillable’) string fields for firstname, lastname and midinitials: {{{ #!xml }}} * An optional field of type date for birthday: {{{ #!xml }}} === Create a “Address” data type === * Create the entity again {{{ #!xml }}} * A unique, automatic numeric identifier field that MOLGENIS will use to refer addresses. {{{ #!xml }}} * Add the phone number field: {{{ #!xml }}} * Add a field where the user can choose from an enumeration of options whether the address is ‘home’,’work’,or ‘mobile’: {{{ #!xml }}} === Link Addresses to Contact. === * In the Address entity create a [http://en.wikipedia.org/wiki/Foreign_key ForeignKey] reference to Contact {{{ #!xml }}} Note that the xref_field refers to unique field ‘contact_id’ in entity ‘Contact’. The xref_label attribute indicates that we want to view references to Contact by ‘displayname’ name instead of the numeric id. Use of a meaningless numeric ‘id’ next to a meaningful ‘label’ enables us to change the ‘displayname’ name on Contact without the problem of also having to change this on each Address that refers to this contact. == 2. Model the user interface in `addressbook_ui.xml` == * Create a new xml file ‘addressbook_ui.xml’ in the root of you application by copy-pasting the db.xml file. This file will contain the MOLGENIS user interface model. * We want to show the list of Addresses nested per Contact; for MOLGENIS you simply express this by nesting form elements. If suitable ‘xrefs’ exists these will be used to tie container and nested form together: {{{ #!xml
}}} == Generate the application == === Configure the `molgenis.properties` file. === The `model_database` and `model_userinterface` options point to the XML files where a data model and user interface is specified. Change to point to our newly created `addressbook_db.xml ` and `addressbook_ui.xml` files {{{ ############################################################### # 1. FILES DESCRIBING YOUR DESIGN USING MOLGENIS XML LANGUAGE # can be multiple files ',' separated ############################################################### # xml file with data model in terms of 'entity' descriptions model_database = addressbook_db.xml # xml file with user screen descriptions in terms of 'form', 'menu',.. model_userinterface = addressbook_ui.xml }}} === Create an addressbook mysql instance === CreateMysqlDatabase and then edit 'molgenis.properties' file to connect to this database. For example: {{{ ############################################################### # 2. DATABASE SETTINGS ############################################################### # MySQL: # jdbc compatible connection parameters to a database (see doc of database supplier) db_driver = com.mysql.jdbc.Driver db_user = molgenis db_password = molgenis db_uri= jdbc:mysql://localhost/addressbook }}} === Generate and compile your database === See MolgenisGettingStarted == 3. Expected result == [[Image(address-book-screenshot.JPG)]]