How do I update forms in ODK Central?

Hello, Everyone!

I'm incredibly new to ODK so apologies in advance if I misunderstand concepts.

I'm experimenting with Central on AWS. I chose Central over Aggregate because Central setup seems lighter.

I'm using ODK Build for form design, exporting and then uploading that to ODK Central. How do I update a form in Central? My experience right now is that a new form gets created in Central when I upload a new form with the same name. I was expecting the existing form to get updated since the docs talk about updating by changing the <data id="..."> attribute.

Help? :slight_smile:

2 Likes

You update a form by uploading a new one that keeps the same id='...' but changes the version='...' number.

Please note, there are limitations on when you can 'update' an existing form id and when you have to basically upload a new form (w/ new id); that is, only some things can change across an update. See Updating forms for specifics.

2 Likes

Thank you, @Xiphware. The updating forms documentation breaks down the considerations well.

Hi @silumesii! Central is currently in beta, and it does not yet offer much support for updating forms: Central does not allow two forms to have the same id.

If you update a form, you can upload the new version by also changing the form's id. However, Central will treat the new version like an entirely new form, and it won't connect it to the previous version of the form. For example, submissions won't transfer from the previous version of the form to the new one.

Another possibility is to delete the old version of the form before uploading the new version. However, the old version will no longer be available, as well as its submissions.

However, note that you can update form attachments (media files, etc.) without updating the form.

Adding more support for updating forms is a priority for us as we continue to develop Central, though we'll likely be focused on other new functionality over the next few releases. For the time being, Aggregate is more permissive than Central about form updates.

Let us know if you have other thoughts on using Central!

CC @issa

1 Like

thnx @Matthew_White for correcting me (I was pretty sure I'd tried pushing up the same form with a different version # in my playing around, but obviously not).

Does this actually work? I (also) seem to recall trying to delete a form, but couldnt then push it up again 'cause it will still actually in the database (but hidden from formList) so I think I got a name conflict. But I will try to confirm soon as get my antinod login sorted out...

[followup] I think this may in fact be the case (either that or the REST docs need updating), because it states here:

Creating a New Form
...
If the combination of (xmlFormId, version) conflict with any existing Form, current or deleted, the request will be rejected. We consider even deleted forms when enforcing this restriction to prevent confusion in case a survey client already has the other version of that Form downloaded.

I seem to recall the only way I could totally get rid of a 'deleted' form was by manually going into the database and blowing it away there (which isnt for the feint of heart...)

Thank you @Matthew_White and @issa. What you have described is consistent with my experience using Central.

@Xiphware, the only way I was able to totally delete a form in Central was to remove it from the database.

I'll take a look at Aggregate.

Aggregate should behave according to the Updating Forms description (and I've definitely tested it here).

Perhaps the answer is that we are being too pedantic here. The first instinct is always to ensure the integrity of the data, and whatever we do I’d like not to lose that—but also I feel like we should be able to find some way for testing draft data to be more easily recycled. I’ll think about it.

What if it’s only possible to delete a form which has no submissions (but then when you delete it, it is truly wiped from the DB). That would put the burden on the user to explicitly delete any affected submissions (or otherwise offload/back them up) before being able to delete the associated parent form.

And if it’s a draft form I imagine it’s no big deal for the author to wipe any draft test submissions.