Customize App Views

User configurable views will be defined by using JSON objects saved in the OpenSRP couchdb database. They will be fetched by clients(phone or tablet) after configuring the OpenSRP base URL. OpenSRP server has a REST endpoint that the clients will use to sync views to the client. 

A background service on the client will occasionally fetch any modified or added configurable views from the OpenSRP server and save them on the client's sqlite database.The client will send the serverVersion of the its last sync and OpenSRP server will return the view configuration files that have changed since the last sync.

The Sequence diagram for User Configurable views

Sequence Diagram Keys: VC - View Configuration, SV - Server Version

The property serverVersion will be used for versioning. If a view configuration file is edited the serverVersion of the view configuration file will have to be updated so that the view configuration can be picked by clients when syncing configurable views. The property is number denoting unix timestamp; one can get the current unix timestamp from https://www.unixtimestamp.com and use that to update the property. Failure to increment server version when editing the files manually will result in the view configuration not to be synched back to the clients.

A view configuration will have a property identifier. The field is used to identify a configuration file on the client e.g identifier of "login_view" can be used to denote that this configuration file is for login screen.This filed is immutable and changes to it will result in the view configuration to be ignored by clients.

By Default a view configuration file may have the below attributes

PropertyDatatypeMandatoryShould be updatedDescription
_idString*NoCouchDB Internal document ID used to differentiate different documents within CouchDB
_revString*NoCouchDB Internal document revision number used to differentiate different  revisions of the same documents within CouchDB. Dont amend this manually
typeString*NoCouchDB Internal document type used to differentiate different documents types within CouchDB. This should always be ViewConfiguration
identifierString*NoThis uniquely identifies this document. This will be used on the client to identify that this document if for a particular screen. This should not be amended
serverVersionlong*YesA long number denoting the unix timestamp when the document was updated/created. Its used for versioning by clients. Whenever a document is amended this property should be incremented to the current timestamp so that clients notice the document has changed and they can sync it.
metadataObject
YesThis will be an object that defines configuration at view level. It must have an attribute type that defines the type of configuration being defined.
viewsList of View Objects
YesThis will be populated for screens with configurable view components. It contains a list of view objects. The view object is described below.
labelsMap(Key value pairs)
YesThis will be populated for language configuration files. It will have a key value pairs of labels where the key will be identical in all language files but the value will be different for each language.