Δυναμικός τύπος ερώτησης
Ο δυναμικός τύπος ερώτησης επιτρέπει τον τύπο πεδίου και το widget να καθορίζονται κατά το χρόνο εκτέλεσης βάσει απόκρισης API ή υπολογισμένης τιμής.
Η δυνατότητα Δυναμικού Τύπου Ερώτησης επιτρέπει το widget εισόδου πεδίου και τη συμπεριφορά επικύρωσης να καθορίζονται κατά το χρόνο εκτέλεσης αντί για το χρόνο σχεδιασμού φόρμας. Αυτή είναι μια προχωρημένη επέκταση rtSurvey που χρησιμοποιείται όταν ο τύπος δεδομένων για συλλογή εξαρτάται από διαμόρφωση πλευράς διακομιστή, απόκριση API ή τιμή προηγούμενου πεδίου.
Μια συνηθισμένη περίπτωση χρήσης είναι ένα διαμορφώσιμο checklist επιθεώρησης όπου ο διακομιστής ορίζει ποια πεδία απαιτούνται, τι τύπο έχουν (text, integer, select κ.λπ.) και ποιες επιλογές είναι διαθέσιμες — χωρίς ανακατασκευή της φόρμας για κάθε διαμόρφωση.
Πώς λειτουργεί
Ένα πεδίο σημειωμένο ως δυναμικός τύπος ερώτησης χρησιμοποιεί callapi() για ανάκτηση της διαμόρφωσής του από ένα API. Η απόκριση API ορίζει:
- Τον τύπο εισόδου για απόδοση (text, integer, select_one κ.λπ.)
- Τις διαθέσιμες επιλογές (για τύπους select)
- Κανόνες επικύρωσης
Το πεδίο επισημαίνεται εσωτερικά με specialFeature: isDynamicQuestionType, που ενημερώνει τη μηχανή φόρμας να χρησιμοποιήσει την απόκριση API για κατασκευή του widget αντί για τον στατικό ορισμό φόρμας.
Εγκατάσταση
Βήμα 1: Ανάκτηση διαμόρφωσης πεδίου
Χρησιμοποιήστε πεδίο calculate με callapi() για ανάκτηση της δυναμικής διαμόρφωσης:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| calculate | field_config | callapi | callapi('POST', 'https://api.example.com/field-config', 1, 2, 0, '$.config', 10000, 0, '', '', '{"form_id": "##form_id##", "field_id": "inspection_result"}') |
Βήμα 2: Αναφορά στη διαμόρφωση στο δυναμικό πεδίο
Το δυναμικό πεδίο χρησιμοποιεί callapi-verify() στην appearance ή constraint για σύνδεση με τη φορτωμένη διαμόρφωση:
| type | name | label | appearance |
|---|---|---|---|
| text | inspection_result | Αποτέλεσμα επιθεώρησης | callapi-verify(dynamicParams) |
Η μηχανή φόρμας διαβάζει field_config και καθορίζει δυναμικά εάν να αποδώσει το inspection_result ως πεδίο text, integer ή select_one.
Μορφή απόκρισης API
Το API πρέπει να επιστρέφει αντικείμενο JSON που περιγράφει τη διαμόρφωση πεδίου. Μια τυπική απόκριση:
{
"config": {
"type": "select_one",
"choices": [
{"value": "pass", "label": "Πέρασε"},
{"value": "fail", "label": "Απέτυχε"},
{"value": "na", "label": "Δ/Ι"}
],
"required": true,
"constraint": ". != ''"
}
}
Παράδειγμα: Διαμορφώσιμη φόρμα επιθεώρησης
Φόρμα επιθεώρησης όπου τα στοιχεία checklist και οι τύποι απαντήσεων τους ανακτώνται από διακομιστή βάσει κατηγορίας επιθεώρησης:
| type | name | label | appearance | calculation |
|---|---|---|---|---|
| select_one inspection_type | insp_type | Τύπος επιθεώρησης | ||
| calculate | checklist_config | callapi | callapi('POST', 'https://api.example.com/checklist', 1, 2, 0, '$.items', 10000, 0, '', '', '{"type": "##insp_type##"}') | |
| text | item_1 | Στοιχείο 1 | callapi-verify(dynamicParams) | |
| text | item_2 | Στοιχείο 2 | callapi-verify(dynamicParams) | |
| text | item_3 | Στοιχείο 3 | callapi-verify(dynamicParams) |
Ο διακομιστής επιστρέφει τον σωστό τύπο widget, ετικέτα, επιλογές και επικύρωση για κάθε στοιχείο βάσει insp_type.
Βέλτιστες πρακτικές
- Χρησιμοποιείτε δυναμικούς τύπους ερωτήσεων μόνο όταν η δομή πεδίου πραγματικά ποικίλλει κατά το χρόνο εκτέλεσης — για στατικές φόρμες, χρησιμοποιείτε τυπικούς τύπους ερωτήσεων.
- Βεβαιωθείτε ότι το API διαμόρφωσης αποκρίνεται γρήγορα (κάτω από 2 δευτερόλεπτα) και είναι διαθέσιμο στο δίκτυο πεδίου.
- Πάντα ορίστε λογική εναλλακτική στη φόρμα για την περίπτωση που το API δεν είναι προσπελάσιμο — ένα απλό πεδίο
textμε σημείωση είναι καλύτερο από ένα σπασμένο widget. - Κάντε έκδοση του σχήματος απόκρισης API — αλλαγές στη μορφή απόκρισης θα επηρεάσουν όλες τις ενεργές φόρμες που χρησιμοποιούν αυτό το τελικό σημείο.
- Δοκιμάστε κάθε συνδυασμό τύπων πεδίων που μπορεί να επιστρέψει το API πριν την ανάπτυξη.
Περιορισμοί
- Οι δυναμικοί τύποι ερωτήσεων απαιτούν συνδεσιμότητα δικτύου για ανάκτηση της διαμόρφωσης.
- Το πλήρες εύρος τύπων widget που διατίθενται δυναμικά εξαρτάται από την έκδοση πελάτη rtSurvey — δοκιμάστε την έκδοση στόχο σας.
- Αυτή είναι μια προχωρημένη επέκταση rtSurvey χωρίς αντίστοιχο στην τυπική προδιαγραφή XLSForm.
- Τα σφάλματα εντοπισμού σφαλμάτων είναι δυσκολότερα να ανιχνευθούν αφού ο ορισμός πεδίου βρίσκεται εν μέρει στη φόρμα και εν μέρει στην απόκριση API.