Wyrażenia formularzy

Wyrażenia mogą być używane w ankiecie do kontrolowania domyślnego zachowania pytań. Pytanie lub grupę pytań można ukrywać i ujawniać na podstawie poprzednich odpowiedzi przy użyciu wyrażeń w kolumnie relevant (odpowiednie). Gdy pytanie jest ukryte przez wyrażenie w kolumnie relevant, w odpowiedzi na pytanie nie są przesyłane żadne dane.

Notatka:

W aplikacji terenowej ArcGIS Survey123, jeśli zostanie wprowadzona odpowiedź na pytanie, które zostanie później ukryte z powodu wyrażenia relevant, odpowiedź jest czyszczona. Gdy pytanie ponownie staje się ważne, konieczne jest wprowadzenie nowej odpowiedzi. W aplikacji internetowej odpowiedź nie jest czyszczona, więc gdy pytanie ponownie stanie się ważne, używana jest wcześniej wprowadzona odpowiedź.

Wyrażenia można również stosować do kolumny readonly (tylko do odczytu), aby wyłączyć dane wejściowe dla pytania lub grupy na podstawie wyniku wyrażenia. Również kolumna required (wymagane) obsługuje wyrażenia, dzięki czemu ankieta może wymagać od użytkownika udzielenia odpowiedzi na pytanie tylko w określonych warunkach.

Notatka:

Wyrażenia tylko do odczytu nie są obsługiwane w aplikacji internetowej.

W wyrażeniu należy zawsze odwoływać się do poprzednich pytań przy użyciu formatu ${field_name}.

Widoczność pytania

Używając kolumny body::esri:visible, możesz ukryć pytanie w widoku za pomocą wyrażenia. Kolumna ta ukrywa pytanie, jeśli zawarte w niej wyrażenie nie jest prawdziwe, zachowując jednocześnie treść pytania. Na przykład wyrażenie ${edit_location}='yes' powoduje, że pytanie jest wyświetlane tylko wtedy, gdy pytanie edit_location jest równe yes.

Działanie to jest podobne do działania kolumny relevant (odpowiednie), przy czym obie kolumny ukrywają pytanie, dopóki wyrażenie w kolumnie nie zostanie ocenione jako prawdziwe. Podstawowa różnica polega na tym, że kolumna body::esri:visible nie czyści wartości pytania ustawionego przez wyrażenie jako niewidoczne i przesyła istniejące wartości do warstwy obiektowej. Należy użyć kolumny relevant (odpowiednie) zamiast body::esri:visible, aby mieć pewność, że w pytaniu nie będą obliczane ani zapisywane wartości, gdy nie jest ono odpowiednie.

Jeśli do sterowania widocznością pytania używana jest kolumna body::esri:visible lub relevant (odpowiednie), wymaganie pytania, jego wartości domyślne, ograniczenia i maski wprowadzania są egzekwowane tylko wtedy, gdy pytanie jest widoczne.

Widoczność pytania można także kontrolować za pomocą typu pytania hidden (ukryte) i wyglądu hidden (ukryte), ale nie można nimi sterować za pomocą wyrażenia.

Notatka:

W przypadku pytań typu obraz, dźwięk i plik nie jest obsługiwane ukrywanie za pomocą kolumny body::esri:visible.

Proste wyrażenia

Najlepszym sposobem użycia jednego z tych wyrażeń jest zmiana zachowania lub widoczności pytania, chyba że wcześniej otrzymano konkretną odpowiedź. Na przykład następujące wyrażenie powoduje sprawdzenie, czy odpowiedź na poprzednie pytanie ma wartość prawda (true):

${previous_question} = 'true'

W następującym przykładzie następuje sprawdzenie, czy odpowiedź na poprzednie pytanie była większa lub równa 100:

${previous_question} < 100

W pytaniach typu select_multiple (wybierz wiele) wartości są przechowywane inaczej niż w przypadku pozostałych typów pytań — wszystkie zaznaczone odpowiedzi są wprowadzane w kolejności ich wyboru i oddzielane przecinkami. Na przykład wybranie odpowiedzi A i B (w tej kolejności) spowoduje wyświetlenia tej odpowiedzi w postaci A,B. Aby użyć pytania typu select_multiple (wybierz wiele) jako części wyrażenia, trzeba użyć funkcji selected. Następujący przykład sprawdza, czy użytkownik udzielił odpowiedzi A na poprzednie pytanie i działa niezależnie od innych wybranych odpowiedzi:

selected(${previous_question}, 'A')

Funkcja count-selected (zlicz wybrane) zlicza opcje, które zostały wybrane w pytaniu typu select_multiple (wybierz wiele) i udostępnia tę liczbę do użycia jako operator. Poniższy przykład sprawdza, czy w poprzednim pytaniu wybrano więcej niż dwie odpowiedzi:

count-selected(${previous_question}) > 2

Możliwe jest użycie funkcji count-selected jako ograniczenia w pytaniach typu image (obraz) lub file (plik) o wyglądzie multiline do kontrolowania liczby przesyłanych plików.

Wyrażenia matematyczne

W następującym przykładzie użyto wielu operatorów i pytań:

${previous_question} + ${other_previous_question} <= 100

Podczas używania operatorów matematycznych może być konieczne przeprowadzenie konwersji wartości na liczby. W poprzednim przykładzie przyjmuje się, że previous_question i other_previous_question są liczbami całkowitymi lub dziesiętnymi. Jednak w przypadku typów pytań, na które odpowiedziami są ciągi znakowe, należy rzutować je w następujący sposób:

int(${previous_question}) + int(${other_previous_question}) <= 100

Wyrażenia matematyczne mogą być także wykonywane na pytaniach typu date (data), które są zapisywane jako Czas epoki (liczba milisekund, które minęły od dnia 1 stycznia 1970 roku). Następujące wyrażenie ujawnia pytanie tylko wtedy, gdy odpowiedź na poprzednie pytanie to data przypadająca wcześniej niż 2 tygodnie przed dzisiejszą datą:

if( ${previous_question}='',false,today() - ${previous_question} > 1000*60*60*24*15)

Wyrażenia regularne

Wyrażenie regularne to sekwencja znaków używana do dopasowywania wzorców w ciągach znakowych. Jeśli w aplikacji Survey123 wzorzec jest dopasowany, wyrażenie zwraca wartość true (prawda). W przeciwnym razie wyrażenie zwraca wartość false (fałsz).

Wyrażeń regularnych można używać we wszystkich kolumnach akceptujących wyrażenia, aby zmienić zachowanie pytania, jeśli ciąg znakowy podany w odpowiedzi na inne pytanie nie ma odpowiedniego formatu. Następujący przykład, po umieszczeniu go w kolumnie relevant (odpowiednie), powoduje, że pytanie jest wyświetlane tylko wtedy, gdy na inne pytanie udzielono odpowiedzi zawierającej literę:

regex(${question},'[A-Za-z]')

Po umieszczeniu poniższego przykładu w kolumnie choice_filter pytania typu select_one (wybierz jedną) dotyczącego nazw ulic wyświetlane będą tylko te ulice znajdujące się na liście citystreets, które są zgodne z nazwą miasta wybranego w poprzednim pytaniu o nazwie city:

regex(citystreets,${city})

Więcej informacji na temat wyrażeń regularnych zawiera sekcja Formuły.