Select to view content in your preferred language

Constrain integer field to be not empty

2034
4
07-28-2020 12:09 PM
TomSchwartzman
Esri Contributor

I have an integer field called num1. Has a default of zero.  But you can erase that zero and leave the field blank.  This blank field is not considered an integer (kills calculations for instance).

I want to put a constraint on it so you don't leave it empty (i.e. no number, no text).  I can't seem to do it.

I have tried testing to see what this "empty" integer field is interpreted as, and I can tell you this:

${num1}=''   is FALSE
${num1}=NaN  is FALSE
number(${num1})  is BLANK
string-length(${num1})  is 0
string-length(number(${num1})) is 0
string-length(string(${num1})) is 0

here is the survey with the num1 field empty:

empty

and here with the num1 field with a valid number:
survey

I tried using any of these in a constraint (e.g. string-length(.)>0 ) but that is ignored, or not seen as an issue as it happily lets me submit with this blank integer field.

s

Is there a way to constrain it?  

I have worked around it by using a calculation in another field, but was hoping I would not need to do this.

survey123 xlsx attached.

Thanks,

Tom S.

P.S.  ${num1}=null is FALSE, ${num1}=undefined is FALSE as well.

0 Kudos
4 Replies
DougBrowning
MVP Esteemed Contributor

Does required work?

I had an issue for a bit that you had to use string-length != or = 0.  >0 never worked - not sure why but could be that it is considered text.

Hope that helps.

0 Kudos
TomSchwartzman
Esri Contributor

Thanks Doug for the reply.  Yes, required will do it, but I don't want to make it required if I don't have to. Maybe there is no difference between required and constraint of a number/digit, have to ponder that.

My workaround was to make that field a null field and add another field that was calc'ed via an if statement, which honors the string-length query (if(string-length(${num1})=0,0,${num1})

Tom

JamesTedrick
Esri Esteemed Contributor

Hi Tom,

In Survey123 terms, a required field is a field that must not be blank - you should make the field required.

Another approach would be to wrap the the question in coalesce(${q}, 0) to provide a default value when blank.

0 Kudos
Katie_Clark
MVP Regular Contributor

Hello, I know this thread is older but I stumbled on it when I was troubleshooting something in a survey and wanted to post a link to some useful esri documentation on empty values.

Particularly relevant to this particular post:

  • Empty values for integer and decimal questions are represented as NaN (not a number). This is a special value that represents the absence of a valid value.

  • The NaN value compared to any other value is only true in a calculation of an is not equal value comparison. All other expressions result in false.

Hope this maybe helps someone!

Best,
Katie


“The goal is not simply to ‘work hard, play hard.’ The goal is to make our work and our play indistinguishable.”
- Simon Sinek
0 Kudos