Increasing data safety in ODK Collect with delete after send and forced form save

Sep 9, 2014

We are excited to announce that ODK Collect v1.4.4 includes delete after send and forced form saves, two great new features that Nafundi added to increase data safety in ODK Collect. If you haven't upgraded already, now is a great time!

Delete after send to remove sensitive data

When a form is sent in old versions of ODK Collect, that form is never automatically deleted. Instead, ODK Collect hides the form from the list shown in Edit Saved Forms. This is the default behavior because sent forms often do not take up a lot of space and can be used as a backup in case of a server failure. Users (usually supervisors in admin mode) can choose to manually delete sent forms in Manage Saved Forms if space becomes an issue.

ODK Collect v1.4.4 adds a new option to automatically delete finalized forms and accompanying multimedia after submission. This feature is useful for campaigns collecting sensitive data (e.g., patient records) or multimedia that uses a lot of space (e.g., high resolution video). Delete after send is disabled by default and can be turned on in General Settings.

Forced form save to prevent accidental data loss

ODK Collect already silently saves the state of the currently open form so that if the device crashes or runs out of power, data for that form is never lost. One limitation of this silent background save is that it does not protect against users who accidentally exit the app without saving. This potential data loss can be disastrous for campaigns with very long forms.

ODK Collect v1.4.4 includes support for a saveIncomplete() form attribute that enables a forced form save on any prompt (e.g., right at the end of a major module). To trigger this save, add the saveIncomplete attribute to a prompt's bind and the form will save when that prompt becomes visible. The form XML looks like this:

<bind nodeset="/data/my_question" type="string" saveIncomplete="true()" />

If you use XLSForm to design your forms, add bind::saveIncomplete as a column with a value of true() and enable forced saves that way.

Recent posts