Dynamické vyhľadávanie (tiež nazývané Search API) umožňuje poľu select_one, select_multiple alebo text načítavať voľby zo vzdialenej webovej služby za behu ako anketár píše. Toto je správny prístup, keď je váš zoznam volieb príliš veľký na zahrnutie do CSV súboru, je často aktualizovaný alebo pochádza z živej databázy.


Vzhľad search-api()

Dynamické vyhľadávanie je nakonfigurované prostredníctvom stĺpca appearance pomocou funkcie search-api():

  search-api(method, url, post_body, value_column, display, data_path, save_path)
  

Parametre

ParameterPopis
methodVždy použite 'POST'
urlKoncový bod API na dotazovanie
post_bodyJSON telo odoslané do API. Použite %__input__% ako zástupný symbol pre aktuálny text vyhľadávania anketára
value_columnKľúč v objekte odpovede na použitie ako uložená hodnota
displayKľúč (alebo šablóna) na použitie ako popisok zobrazený v rozbaľovacom zozname. Podporuje zástupné symboly ##key## a výrazy @{func}
data_pathJSONPath k poľu objektov výsledkov v odpovedi (napr. $.data, $.hits.hits.*._source)
save_pathNázov, pod ktorým je uložená surová odpoveď na použitie inými poľami

Základný príklad

Vyhľadávanie zdravotníckeho zariadenia, kde anketár píše časť názvu zariadenia:

typenamelabelappearance
select_onefacilityVyberte zdravotnícke zariadeniesearch-api('POST', 'https://api.example.com/facilities/search', '{"query": "%__input__%"}', 'id', 'name', '$.results', 'facility_data')

API prijme {"query": "nair"} keď anketár napíše „nair" a vráti:

  {
  "results": [
    {"id": "HF001", "name": "Nairobi Central Clinic"},
    {"id": "HF002", "name": "Nairobi West Hospital"}
  ]
}
  

Rozbaľovací zoznam zobrazí Nairobi Central Clinic a Nairobi West Hospital; uložená hodnota je HF001 alebo HF002.


Pokročilé formátovanie zobrazenia

Použitie šablón ##key##

Zobrazenie viacerých polí v popisku:

  search-api('POST', 'https://api.example.com/search', '{"q": "%__input__%"}', 'id', '##name## (##district##)', '$.data', 'res')
  

Zobrazené ako: Nairobi Central Clinic (Nairobi).

Použitie výrazov @{func}

Aplikovanie podmienenej logiky v popisku zobrazenia:

  search-api('POST', 'https://api.example.com/search', '{"q": "%__input__%"}', 'id',
  '@{if_else(eq("##status##", "active"), "✓ ##name##", "✗ ##name##")}',
  '$.data', 'res')
  

Aktívne výsledky zobrazujú ✓ Názov kliniky; neaktívne zobrazujú ✗ Názov kliniky.


Nastavenie predvolenej hodnoty: search-default-api()

Použite search-default-api() po search-api() na predvyplnenie poľa predvolenou voľbou načítanou z oddelného volania API (napr. pri úprave existujúceho záznamu):

  appearance: search-api(...) search-default-api('POST', 'https://api.example.com/get', '{"id": "##saved_id##"}', 'id', 'name', '$.item')
  

Vlastný oddeľovač pre select_multiple: search-default-separator()

Pre polia select_multiple uveďte, ako sú viaceré vybrané hodnoty spojené v uloženom reťazci:

  appearance: search-api(...) search-default-separator(' || ')
  

Predvolený oddeľovač je medzera.


Podporované typy otázok

Typ otázkyPrípad použitia
select_oneJeden výber z výsledkov vyhľadávania
select_multipleViacero výberov z výsledkov vyhľadávania
textAutomatické dopĺňanie — anketár píše voľne, ale môže vybrať návrh

Používanie uložených dát odpovede

save_path ukladá celý objekt odpovede API pod daným názvom. Iné polia naň môžu odkazovať pomocou pulldata():

typenamelabelcalculation
select_onefacilityVyberte zariadeniesearch-api(..., 'facility_data')
calculatefacility_districtpulldata('facility_data', 'district')
calculatefacility_typepulldata('facility_data', 'type')

Najlepšie postupy

  1. Uistite sa, že váš koncový bod API odpovedá do 1–2 sekúnd — pomalé API spôsobujú, že vyhľadávanie pôsobí neresponzívne.
  2. Použite %__input__% v post_body, aby API vracalo iba zodpovedajúce výsledky, nie celý dataset.
  3. Indexujte pole vyhľadávania na strane servera (napr. Elasticsearch, databázový full-text index) pre rýchle odpovede.
  4. Obmedzte výsledky na 20–50 položiek na dotaz — vracanie tisícov výsledkov popiera účel vyhľadávania.
  5. Zahrňte požiadavku na minimálnu dĺžku vstupu v API, aby ste sa vyhli spúšťaniu širokých dotazov na vstupy s jedným znakom.

Obmedzenia

  • Dynamické vyhľadávanie vyžaduje sieťové pripojenie — nefunguje offline.
  • Zástupný symbol %__input__% je vložený tak, ako je; sanitizujte vstupy na strane servera, aby ste predišli injection útokom.
  • Komplexné výrazy zobrazenia @{func} môžu mať obmedzené fungovanie naprieč všetkými verziami klientov rtSurvey.
Bola táto stránka užitočná?