I am working on a survey that will be used by select volunteers in order to collect field-based data. We were wondering if there is an elegant way to ensure that only the selected volunteers are able to complete the survey? The volunteers are members of the general public and they are not affiliated with the organization that I am working with. From my understanding, if we make the survey public, these volunteers will not need to have and ArcGIS online account and will only need to download the Survey123 app.
Again, since the survey is going to be public, and we only want to let select volunteers use it, we are looking for a way to ensure that we are only including the validated surveys in our analysis.
I had a few thoughts but they are messy including assigning each individual a unique code and having them fill that in on a single line of text question at the beginning of the survey. If there is not a matching code, I can filter out those records during data processing. On the other hand, it would be nice if there could be something that would look for unique ids as they are entered and if there are matches it would allow the user to proceed. I am not sure if surveys can be protected via password, but we are are worried that passwords may become widely dispersed within the community.
Please let me know if anyone has any better or more intuitive ideas.
Survey123 does not currently support having an unique access code or additional security check for users to validate themselves before continuing to open and complete the survey. This needs to be done at the survey level to avoid the survey being submitted.
Your idea to have a question at the start of the survey that uses a predefined code is on the right track, this is how many other customers have done a similar workflow. In fact you can use the pulldata @ csv function and have a pre-defined csv file in the media folder with all the allowed codes.
Create a first question in your survey and ask "Please enter your access code to continue" and check the code entered using pulldata @ csv to ensure it is valid from the csv list. Then make the following questions of the survey (all other questions in the survey after the first one) relevant based on the code in the first question being valid. Include a constraint so that survey can not be submitted if code is not valid. You can also include a constraint message to say that the code you entered is not valid, you can not continue. If it is valid no message will be displayed and all the remaining questions in the survey will be visible and they can continue as normal.
This will be a good way to stop users filling out the survey if they do not have the correct access code, and you do not need to then go delete the surveys that were submitted that shouldn't have been.
I am following your workflow and it worked! (thank you!). However, I am trying to use the validation to update existing records instead of submitting new surveys. A user would input their validation code and if approved, then the questions and pre-populated answers would appear for them to edit. The validation code would serve as a unique ID to access specific features. Right now, it just provides access to the questions. My survey form is attached.
Yes, this should now be possible when editing a record by using one of the new mode or status pulldata() properties. You can use the pulldata() expression in a relevant statement, to then hide or show following questions based what what or status the form is currently in, or how the form was opened.
Please refer to following documention for more information: