Ce champ lit la liste de ses choix depuis une source distante (c’est-à-dire un point de terminaison d’API distant) plutôt que depuis notre propre base de données.
Imaginez qu’un client dispose d’une liste dynamique de produits dans son propre service et souhaite les sélectionner dans un formulaire. Au lieu d’ajouter ses produits à notre base de données, il peut simplement ajouter un champ Fetch Choice qui se connecte automatiquement à son API pour récupérer les éléments.
Le point de terminaison
Consultez ce document pour connaître les spécifications du point de terminaison des éléments de choix.
Endpoint Specifications for Fetch Choice Field
**Créer le champ Fetch Choice**
Point de terminaison : /v3/fields/
Méthode : POST
Champs obligatoires : type, choices_source
Pour créer le champ Fetch Choice, vous pouvez envoyer les attributs de champ standard, accompagnés d’un champ obligatoire `choices_source`. Le champ choices_source doit contenir l’adresse d’un point de terminaison distant répondant aux critères requis. Si le point de terminaison n’est pas valide ou ne répond pas aux critères, le serveur renvoie une erreur HTTP 400.
Exemple
// Request https://formaloo_api_server/v1.0/fields/ (POST) { "title": "Select one of these remote choices!", "type": "choice_fetch", "choices_source": "https://SOME_REMOTE_ADDRESS/choices/" } **//Response** { "status": 201, "errors": { "general_errors": [], "form_errors": {} }, "data": { "field": { "slug": "Noc3n72F", "created_at": "2022-01-18T07:21:29.225484Z", "updated_at": "2022-01-18T07:21:29.225515Z", "type": "choice_fetch", "title": "Select one of these remote choices!", "alias": null, "description": null, "answer_description": null, "position": 0, "required": false, "unique": false, "admin_only": false, "json_key": null, "is_calculatable": false, "is_random_sortable": true, "choices_source": "https://SOME_REMOTE_ADDRESS/choices/" } } }
Exemple (point de terminaison incorrect)
// Request https://formaloo_api_server/v1.0/fields/ (POST) { "title": "Select one of these remote choices!", "type": "choice_fetch", "choices_source": "https://SOME_BAD_REMOTE_ADDRESS/choices/" } **//Response** { "status": 400, "errors": { "general_errors": [], "form_errors": { "choices_source": [ "The URL is either invalid, returns an improper response, or times out!" ] } }, "data": {} }
**Mettre à jour le champ Fetch Choice**
Point de terminaison : /v3/fields/{field_slug}/
Méthode : PUT, PATCH
Comme lors de la création du champ, choices_source est également validé lors de la mise à jour ; en cas d’échec, une erreur HTTP 400 est renvoyée.
Lire un formulaire comportant un champ Fetch Choice
Contrairement aux autres champs de choix, le champ Fetch Choice ne contient aucun choice_items dans ses données. Le client doit utiliser le point de terminaison fourni (choices_source) pour récupérer la liste des choix de son côté.
Exemple
{ "status": 200, "errors": { "general_errors": [], "form_errors": {} }, "data": { "form": { "fields": { "ZZT1h23S": { "slug": "ZZT1h23S", "created_at": "2022-01-18T07:28:01.536337Z", "updated_at": "2022-01-18T08:02:25.019133Z", "type": "choice_fetch", "title": "Select one of these remote choices!", "alias": null, "description": null, "position": 1, "required": false, "unique": false, "admin_only": false, "json_key": null, "is_calculatable": false, "is_random_sortable": true, "choices_source": "https://SOME_REMOTE_ADDRESS/choices/" } }, "fields_list": [ { "slug": "ZZT1h23S", "created_at": "2022-01-18T07:28:01.536337Z", "updated_at": "2022-01-18T08:02:25.019133Z", "type": "choice_fetch", "title": "Select one of these remote choices!", "alias": null, "description": null, "position": 1, "required": false, "unique": false, "admin_only": false, "json_key": null, "is_calculatable": false, "is_random_sortable": true, "choices_source": "https://SOME_REMOTE_ADDRESS/choices/" } ], ... } } }
Envoyer un formulaire comportant un **champ Fetch Choice**
La valeur envoyée pour un champ Fetch Choice doit être un objet contenant les éléments label et value du choix sélectionné.
Exemple
// Request https://formaloo_api_server/v1.0/forms/form-displays/slug/{form_slug}/submit/ (POST) { "ZZT1h23S": { "label": "Alpha", "value": "alpha" } } **//Response** { "status": 201, "errors": { "general_errors": [], "form_errors": {} }, "data": { "row": { "id": 1216372, "data": { "ZZT1h23S": { "label": "Alpha", "value": "alpha" } }, "slug": "fvwHRP8bHNPHulUexPUj", "created_at": "2022-01-18T08:07:54.725364Z", "updated_at": "2022-01-18T08:07:54.773986Z", "user": null, "form": { ... }, "tracking_code": null, "submitter_referer_address": "127.0.0.1:8051", "redirection_url": null, "extra_response": {}, "deleted": null, "submit_code": "zpn83nggiczy56mrz3iz", "submitter_ip_address": "172.26.0.1", "sumbit_time": null, "phone_verification_state": "not_required", "email_verification_state": "not_required", "calculation_score": {}, "create_type": "api", "status": "submit" } } }
Lire une ligne comportant un champ Fetch Choice
Les données de la ligne contiennent la paire label et value comme raw_value du champ, mais seul le label est renvoyé pour sa value :
{ "status": 200, "errors": { "general_errors": [], "form_errors": {} }, "data": { "row": { "id": 1216372, "user": null, "readable_data": { "Select one of these remote choices!": "Alpha" }, "rendered_data": [ { "slug": "ZZT1h23S", "type": "choice_fetch", "alias": null, "title": "Select one of these remote choices!", "value": "Alpha", "json_key": null, "position": 1, "raw_value": { "label": "Alpha", "value": "alpha" }, "admin_only": false, "json_value": null } ], "form": "ogHjEcIH", "row_tags": [], "slug": "fvwHRP8bHNPHulUexPUj", "submit_code": "zpn83nggiczy56mrz3iz", "tracking_code": null, "next_row": null, "previous_row": null, "deleted": null, "created_at": "2022-01-18T11:37:54.725364+03:30", "updated_at": "2022-01-18T11:37:54.856970+03:30", "sumbit_time": null, "submitter_referer_address": "127.0.0.1:8051", "phone_verification_state": "not_required", "email_verification_state": "not_required", "data": { "ZZT1h23S": { "label": "Alpha", "value": "alpha" } }, "calculation_score": {}, "create_type": "api", "status": "submit" } } }
