OpenEMR Xml Form Generator

From OpenEMR Project Wiki
Revision as of 17:19, 21 July 2010 by Bradymiller (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The XML based form generator (xmlformgen) is available at the following link:

XML Form Generator

It contains a series of XSLT stylesheets, a Makefile, and a pile of .xml files.

The XML files (at least the more recent ones) contain form definitions. (look at initial_contact_sheet.xml and communication_log.xml for examples)

Dependencies

This form generator uses xalan-c++ to interpret the contents of XSLT files. it also uses a simple Makefile, so requires (likely) GNU Make.

Filesystem access is required to install a generated form into an OpenEMR installation.

Using

To 'compile' a form, run "make INFILE=filename.xml". This will create a directory with 7 .php files, and one .sql file, hopefully conforming to The Forms API. to import one of these forms, copy it to the interface/forms location in your openemr install. then go to the administration->forms page, and the form should be shown at the bottom of the page. Register it, run its sql, enable it, and you're done!

XML File Format

Header

Version

<?xml version="1.0" encoding="ISO-8859-1"?>

Generation information

Indicates how generated and by whom

<!-- Generated by Hand -->
<!-- Created by Rix White on 2010-01-27 -->

Open the form tag

<form>

Comments

Comments regarding the form and its approval by the CRRT

  <!-- MHP Progress Note -->
  <!-- this OpenEMR form has not yet been approved by CRRT -->

Table

Content

Indicates the sql-safe name of the table where the data for this form will be stored.

Attributes

The 'type' option indicates the table type

  • form indicates that this form happens in an encounter, and it will not have a history. (this is what formscript.pl does)
  • extended indicates that this form can fall outside of the encounter system (like 'history'), but it doesn't prevent it from being part of the encounter system. Mainly, it gives us a form that saves edit history. CAVEAT: don't use the same extended form to replace history, AND as an encounter form. this requires the signature system (not yet built) to function.
 <table type="extended">form_mhp_progress_note</table>

Names

Both of these names will show up in the `registry` table. 'RealName' will be in `registry`.`name` and 'safename' will be in `registry`.`directory`

RealName

Indicates the name as it will show up in the GUI

 <RealName>MHP Progress Note</RealName>

safename

Indicates the html-safe name

 <safename>mhp_progress_note</safename>

Style

Content

  • Layouts: similar to the layout engine
  • Paper: similar to the encounter system forms style

Attributes

  • cells_per_row: Indicates how to build the html table structure (i.e., how many <td>s per <tr>)
 <style cells_per_row="4">layout</style>

Acl

We don't know how this stuff works yet.

Content

Attributes

  • table:
 <acl table="patients">med</acl>

Body

<Manual> and <Layout> tags

The <manual> tag and the <layout> tag both enclose a part of the XML document that indicates sections and fields the form generator will generate. The difference between the tags is that layout will create a php page that honors the layout engine (this functionality is currently broken), whereas manual dictates specifically how the layout will look.

<manual>
  ... some sections with fields ...
</manual>

<Section> tag

The <section> tag begins a named, collapsible section of the form.

  • Content: The content of this tag consists of the fields (see next wikisection)
  • Attributes: The attributes that this tag requires are
    • name: indicates the name used for the div in the html
    • label: indicates the visible name of the secton that will show up in the GUI and (I assume in the <layout> mode will be the name of the section that goes into the `layout_options`.`group_name` field
<section name="client_info" label="Client Info">
  ... some fields ...
</section>

<Field> tag

This tag is where the rubber meets the road. It creates the fields at every level: sql table structure, html forms, etc. It has no content, only attributes, and it closes itself thusly:

<field [put some attributes here] />
Basic attributes
  • name: dictates both the column name in the sql table and the name of the html form field
  • label: dictates the label for the html form field that will be visible in the GUI
  • type: dictates the data type both for the html form field and the sql table (more on this below, as each type dictates further required and optional attributes)
  • hoverover: dictates the title attribute of the html form field (be careful with single quotes here, they should be escapable with a backslash, but this needs to be tested)
  • labelcols: dictates the html table colspan that the label will use
  • cols : dictates the html table colspan that the form field will use
Type options and their specific attributes
Text types

textfield: dictates a varchar text field

  • required extra attributes
    • maxlength: dictates the varchar length of the table column where the list data will be stored
  • optional extra attributes
    • length: dictates the size of the html form length - defaults to 10
     <field name="test_textfield" label="Textfield" type="textfield" hoverover="" length="50" maxlength="255" labelcols="1" cols="3"/>

textbox: dictates a textbox capable of 64k of text

  • no additional attributes
     <field name="test_textbox" label="Textbox" type="textbox" hoverover="" labelcols="1" cols="3"/>

textarea: dictates a textarea capable of 64k of text

  • optional extra attributes
    • rows: indicates the number of rows in the visible textarea - defaults to 4
    • columns indicates the number of columns in the visible textarea - defaults to 40
     <field name="test_textarea" label="Textarea" type="textarea" rows="10" columns="80" labelcols="1" cols="1"/>
List types

checkbox_list: creates a checkbox list which allows for multiple selections to be save in a pipe-delimited format

  • required extra attributes
    • list: this references the 'listid' of a list in a <list> tag (which, itself, should refrence the listid from the list_options table)
     <field name="test_checkbox" label="Checkbox" type="checkbox_list" list="yesno" hoverover="" labelcols="1" cols="1"/>

dropdown_list: creates a dropdown list which allows for single selections to be saved

  • required extra attributes
    • list: this references the 'listid' of a list in a <list> tag (which, itself, should refrence the listid from the list_options table)
    • maxlength: dictates the varchar length of the table column where the list data will be stored
     <field name="test_dropdown" label="Dropdown" type="dropdown_list" list="status" maxlength="30" hoverover="" labelcols="1" cols="1"/>
Other types

date: indicates a datetime sql field (stripped of the time) and ensures a calendar widget next to the field in the GUI

  • no additional attributes
     <field name="test_date" label="Date" type="date" hoverover="" labelcols="1" cols="3"/>

provider: creates an int(11) field that references the "providers" from the `users` table

  • no additional attributes
     <field name="test_provider" label="Provider" type="provider" hoverover="" labelcols="1" cols="1"/>

List

Every list type in the <sections> above should have a list in the <list> area. Right now we're not importing lists (notice that the import attribute ="no") so there is no need to have content for these tags (which would normally be the list items) and the list tag can close itself. Both self-closing and with-list-options are shown below.

Please keep in mind, that OpenEMR's lists system has a 31 character limit for list ids and listitem ids.

Note: if you don't have the list created in Oemr already and/or your list id attribute isn't referencing a real list, then the field won't show up in the GUI.

List with options:

  <list name="yesno" label="Yes/No" type="standard" id="yesno" import="no">
    <listitem id="NO" label="NO" order="1">NO</listitem>
    <listitem id="YES" label="YES" order="2">YES</listitem>
  </list>

List without options that closes itself:

 <list name="marital_status" label="Marital Status" type="standard" id="marital" import="no"/>


Justin Doiel is probably working on this as you're reading this page.

formscript.pl

Q: hey, Out of curiosity is this using the formscript.pl script? Just noted it in the 'make' file?

A: Not at all. its meerly there because i was using it for comparison purposes.