Platform developers create add-on modules (aka plugins) for OpenMRS and leverage our API to build new applications.The goal of the module system is to allow other developers to write and integrate code into OpenMRS without having to modify the core code base. Our online Module Repository has been developed to facilitate searching and sharing of modules. For simple user administration of modules, seeĀ Administering Modules.
What is a module?
- A module is packaged java code that can be installed into a running OpenMRS instance and is able to modify almost all aspects of OpenMRS. It can provide web pages, add tables, change how service calls work, and add new functionality (like report options, person attribute types, etc)
Quick Overview
- Modules can modify with the service layer methods via Aspect Oriented Programming (AOP). All core services and all module services are able to be wrapped and manipulated.
- If in a web context, modules can add their own jsp web pages in their /web/module folder. They link these pages to controllers and to OpenMRS via the Spring context /metadata/moduleApplicationContext.xml
- Modules can add to and current jsp page in the web layer via extension points. A module registers an extension in the /metadata/config.xml for each extension point in the system to which it wants to add content.
- Modules are able add and modify tables in the database. The sqldiff.xml and/or liquibase.xml file in the metadata folder holds the diffs.
- The file extension for modules is ".omod". However, a module is simply a jar underneath. This different extension was chosen for two reasons: First, its just a short form of "OpenMRS Module". Second, its a unique extension and there aren't any other programs known to be using it.
How to write a module
The Creating Modules page is the next step.