Customizing Address Layouts

Note: This functionality will change in OpenMRS 1.9+.  Please see the documentation on Address Templates.

There are certain address layouts that come with OpenMRS right now, they are: general, kenya, lestho, malawi, rwanda, tanzania, usa . 

You can modify the layout.address.format  setting (formerly global property from platform 1.8 downwards) to one of those values or to the "codeName" of a new custom layout (instructions below) to see a different address/location layout on the new patient screen and location editor.

Adding a new address layout

Address layouts are stored in the openmrs-servlet.xml file.  You can find this file in tomcathome/webapps/openmrs/WEB-INF/lib/openmrs-web...jar/openmrs-servlet.xml .

In the <bean id="addressSupport" element, add <ref bean="addressTemplateCustomized" /> .

Now after the next </bean> tag, add:

<bean id="addressTemplateCustomized" class="org.openmrs.layout.web.address.AddressTemplate">
		<property name="displayName"><value>My custom address layout format</value></property>
		<property name="codeName"><value>custom</value></property>
		<property name="country"><value>My Country Name</value></property>
		<property name="nameMappings">
			<props>
				<prop key="postalCode">Location.postalCode</prop>
				<prop key="stateProvince">Location.stateProvince</prop>
				<prop key="cityVillage">Location.cityVillage</prop>
				<prop key="address1">Location.address1</prop>
				<prop key="address2">Location.address2</prop>
				<prop key="longitude">Location.longitude</prop>
				<prop key="latitude">Location.latitude</prop>
				<prop key="country">Location.country</prop>
				<prop key="countyDistrict">Location.district</prop>
				<prop key="neighborhoodCell">Location.cell</prop>
				<prop key="subregion">Location.sublocation</prop>
				<prop key="region">Location.location</prop>
			</props>
		</property>
		<property name="sizeMappings">
			<props>
				<prop key="postalCode">10</prop>
				<prop key="stateProvince">10</prop>
				<prop key="cityVillage">10</prop>
				<prop key="address1">40</prop>
				<prop key="address2">40</prop>
				<prop key="longitude">10</prop>
				<prop key="latitude">10</prop>
				<prop key="country">10</prop>
			</props>
		</property>
		<property name="lineByLineFormat">
			<list>
				<value>address1</value>
				<value>address2</value>
				<value>cityVillage stateProvince country postalCode</value>
				<value>latitude longitude</value>
			</list>
		</property>
	</bean>

Change the nameMappings, sizeMappings, and lineByLineFormat elements however you like.  Restart Tomcat to use the new address.

e.g. if you want to rename the "cityVillage" field, you change <prop key="cityVillage">Location.cityVillage</prop> to <prop key="cityVillage">Location.city</prop> or even to <prop key="cityVillage">What's your city:</prop>. (see messages.properties file for available translation elements)

e.g. if you want to not show latitude/longitude, you delete the lineByLineFormat line: <value>latitude longitude</value>

e.g. if you want to have a longer address1 line, you modify <prop key="address1">40</prop> to be <prop key="address1">80</prop>

These changes will be persisted across restarts, but will NOT be persisted across upgrades.  You will have to redo this every time you upgrade openmrs to a new version