XLSForm is a widely-used standard for defining mobile data collection questionnaires. ActivityInfo is using a data model that is closer to that of a relational database, which leads to some important differences between an XLSForm and an ActivityInfo form, particularly when it comes to complex select questions and repeating groups.
Forms that contain unsupported features will still be successfully imported into ActivityInfo, though questions and formulas with unsupported features will be omitted.
Supported question types
Question Type | ActivityInfo Field Type | Limitations |
---|---|---|
integer | Quantity | ActivityInfo will still allow fractional input. |
decimal | Quantity | |
range | Quantity | Rating appearance not supported. |
select_one | Single Select or Reference Field |
|
select_multiple | Multiple Select | Limited to 100 items. Adding or_other is not supported. |
select_one_from_file | Not supported. | |
select_multiple_from_file | Not supported. | |
rank | Not supported | |
note | Not supported | |
geopoint | Geopoint | |
geotrace | Not supported | |
geoshape | Not supported | |
date | Date | |
time | Not supported | |
dateTime | Not supported | |
image | Attachment | ActivityInfo will allow any type of file, not just images. |
audio | Attachment | ActivityInfo will allow any type of file, not just audio. Audio quality parameter not supported. |
background-audio | Not supported | |
video | Attachment | ActivityInfo will allow any type of file, not just video |
file | Attachment | |
barcode | Not supported | |
calculate | Calculation | |
acknowledge | Single Select | |
hidden | Text, with “Hide in Data Entry” | |
xml-external | Not supported | |
metadata (start, end, today, deviceid, phonenumber, username, email, audit) | Not supported. Note that ActivityInfo records information about who has changed what for all forms. |
Select questions
“Select_one” questions in XLSForms will either be converted into a Single Select field in ActivityInfo, or a Reference field, depending on a few criteria:
- If there are more than 100 choices, the field will become a Reference Field.
- If the choice list has additional “attribute” columns, for example, like those used to create cascading selects in XLSForm, then any question that uses that choice list will become a Reference field in ActivityInfo, and the choice list will be imported as a separate form, with one field for each choice attribute.
- If the choice list is referenced by other choice_filters, it will also become a new ActivityInfo form, and will be referenced by other choice lists.
Operator / Function | Explanation | Support |
---|---|---|
+, -, *, div | Basic arithmetic | Fully supported |
=, != | Equality | Fully supported |
+, -, *, div | Basic arithmetic | Fully supported |
=, != | Equality | Fully supported |
>, <, >=, <, <= | Comparison | Fully supported |
and, or | Boolean Operators | Fully supported |
. | Current question’s value | Fully supported |
.. | Current question’s parent group | To be supported in the future. |
if | Fully supported | |
position() | Not supported. Records in ActivityInfo are not ordered. | |
once() | Not supported. | |
selected() | Supported. | |
selected-at() | Not supported | |
count-selected() | To be supported in the future. | |
jr:choice-name() | Not supported | |
indexed-repeat | Not supported | |
count() | To be supported in the future. | |
count-non-empty() | To be supported in the future. | |
sum() | To be supported in the future. | |
max() | To be supported in the future. | |
min() | To be supported in the future. | |
regex() | Translated as MATCHREGEX() | |
contains() | To be supported in the future. | |
starts-with() | To be supported in the future. | |
ends-with() | To be supported in the future. | |
substr() | To be supported in the future. | |
substring-before() | ||
substring-after() | To be supported in the future. | |
translate() | To be supported in the future. | |
string-length() | To be supported in the future. | |
normalize-space() | To be supported in the future. | |
concat() | To be supported in the future. | |
join() | To be supported in the future. | |
boolean-from-string() | To be supported in the future. | |
string() | To be supported in the future. | |
round() | To be supported in the future. | |
int() | To be supported in the future. | |
number() | To be supported in the future. | |
digest() | Not supported | |
pow() | To be supported in the future. | |
log() | To be supported in the future. | |
log10() | To be supported in the future. | |
abs() | To be supported in the future. | |
sin() | To be supported in the future. | |
cos() | To be supported in the future. | |
tan() | To be supported in the future. | |
asin() | To be supported in the future. | |
acos() | To be supported in the future. | |
atan() | To be supported in the future. | |
atan2() | To be supported in the future. | |
sqrt() | To be supported in the future. | |
exp() | To be supported in the future. | |
exp10() | To be supported in the future. | |
pi() | To be supported in the future. | |
today() | Supported | |
now() | To be supported in the future. | |
decimal-date-time() | Not supported | |
date() | Partially supported. Supports syntax DATE(“2020-01-01”) |
|
decimal-time() | Not supported | |
format-date() | To be supported in the future. | |
format-date-time() | To be supported in the future. | |
area() | Not supported | |
distance() | Not supported | |
random() | Not supported | |
randomize() | Not supported | |
uuid() | Not supported | |
boolean() | To be supported in the future. | |
not(x) | Supported. not(x) becomes !x in ActivityInfo | |
coalesce() | Supported | |
checklist() | Not supported | |
weighted-checklist() | Not supported | |
true() | Supported. Becomes “TRUE” in ActivityInfo |
|
false() | Supported. Becomes “FALSE” in ActivityInfo |
Other limitations
- In most cases, ActivityInfo will not respect the “appearance” column of questions.
- ActivityInfo does not support default values
- ActivityInfo does not support triggers
- ActivityInfo supports constraints, but not custom constraint messages.