Smartform pro web – Přechod z API verze 1 na verzi 2

Úvod

V červnu 2022 jsme spustili novou verzi API Smartformu pro webové formuláře. Tato stránka popisuje, jak ze staré verze API v1 přejít na novou verzi v2.

V první části popíšeme stručně, jak můžete svůj stávající kód upravit, abyste přešli na novou verzi v2.

Ve druhé části najdete kompletní soupis změn, které jsme ve v2 oproti v1 udělali.

Proč na novou verzi API přejít?

  • Do API v2 byla přidána validace e-mailů.
  • Používá nový registr pro slovenské adresy, který je spravovaný státními úřady a je denně aktualizovaný.
  • Opravili jsme některé nedostatky, které se nám na v1 nelíbily.

Stručný popis změn

Vložení javascriptu

Javascript Smartformu s novým API vložíme do stránek následujícím způsobem

 <script type="text/javascript" src="https://client.smartform.cz/v2/smartform.js" async> </script>

Dále následující inicializační část (která je stejná jako ve v1)

  <script type="text/javascript">
  var smartform = smartform || {};
  
  smartform.beforeInit = function () {
        smartform.setClientId('[zde doplňte klientské ID]');
  }
  </script>

Jako parametr funkce smartform.setClientId použijte clientId, které máte přiděleno v administrační aplikaci – obě verze API používají stejné clientId.

Struktura API

Stejně jako ve v1 je i ve v2 základní stavební jednotkou API Smartformu tzv. Smartform instance. Ta vzniká spojením formulářových políček s aktivovaným Smartformem. Smartform lze na textovém políčku <input> zapnout přidáním jedné z následujících hodnot do atributu class.

Pro poštovní adresy lze použít tyto hodnoty:

  • smartform-address-street (ulice)
  • smartform-address-number (číslo domu)
  • smartform-address-street-and-number (ulice a číslo domu)
  • smartform-address-city (obec)
  • smartform-address-city-extended (rozšířený název obce, např. Praha 4 – Podolí nebo Liberec 15)
  • smartform-address-zip (PSČ)
  • smartform-address-whole-address (celá adresa)

Políčko s e-mailovou adresou označíme pomocí

  • smartform-email

Dva typy políček pro obec

Ve v1 jsme pro obec používali políčko s obcí identifikátor smartform-address-city. V tomto políčku se pak našeptávali samostatné názvy obcí (např. Praha), ale i části obce (např. Praha - Nusle) nebo pošty (např. Praha 47). Protože některým dopravcům (Česká pošta) vadí, pokud jako obec dostanou název pošty, rozhodli jsme se zavést nový typ políčka: smartform-address-city-extended.

V API v2 máme tedy pro obec dva typy políček:

  • smartform-address-city – obsahuje pouze čistý název obce (např Praha nebo Liberec) – doporučujeme ho používat, pokud adresu používáte jako vstup nějakého automatického systému pro posílání zásilek.
  • smartform-address-city-extended – rozšířený název obce (např. Praha 4 – Podolí nebo Liberec 15)

Objekty addressControl a emailControl

Aby se v rámci Smartform instance nemíchali mezi sebou metody pro ovládání funkce ohledně poštovních adres a e-mailových adres, zavedli jsme uvnitř Smarform instance dva nové objekty – addressControl a emailControl. Do těchto dvou objektů jsme tedy umístili všechny metody, které nějak souvisí s poštovními adresami nebo s e-mailovými adresami.

Např. nastavení země, ze které se mají našeptávat poštovní adresy, se provede pomocí

smartform.getInstance().addressControl.setCountry('SK')

Metody pro nastavení vzhledu

Metody pro nastavení vzhledu našeptávacího okna (např. smartform.setBackgroundColor pro nastavení barvy pozadí našeptávače) jsme přesunuli do nových objektů smartform.all.suggestBox – pro nastavení našeptávačů všech instancí – a SmartformInstance.all.suggestBox – pro nastavení našeptávačů jedné Smartform instance.

Například nastavení barvy pozadí na jedné Smartform instanci dosáhneme pomocí

smartform.getInstance().all.suggestBox.setBackgroundColor("#cceeff")

Validace adres

Upravili jsme i metodu pro získání informací o zadané adrese. Přejmenovali jsme ji z addAnnounceCallback na addValidationCallback. Změnilo se API i samotného callbacku. Callback dostává jediný parametr – instanci třídy AddressValidationResult, která obsahuje všechny informace o zadané adrese.

Ukázku s validací adresy najdete na Demo – získání informací o zadané adrese.

Dynamická úprava formulářů

Metoda smartform.rebindAllForms(clear, doneCallback) pro znovuvytvoření Smartform instancí v API v2 zůstala. Změnilo se ale její API: parametr clear byl odstraněn. V API v2 se vždy všechny Smartform instance po volání této metody vytvoří znovu a je potřeba je znovu inicializovat – k tomu slouží parametr doneCallback, který je zavolán po vytvoření všech Smartform instancí.

 


 

Popis všech změn v API v1

Následující část obsahuje kompletní dokumentaci starší verze API v1 s popisem změn. 

U každé metody a třídy popisujeme, zdali zůstala zachována nebo se přejmenovala, přesunula či jinak upravila.

Class smartform

Centrální objekt API, stará se o inicializaci, přihlašování uživatele a umožňuje přístup k jednotlivým instancím Smartformu. Tento objekt je singleton a je k dispozici po celou dobu existence stránky.

Objekt smartform zůstal zachován.

Atributy:

beforeInit

Sem lze vložit callbackovou funkci, která bude zavolána po načtení stránky – v okamžiku, kdy je možné přistupovat k objektu smartform a procházet instance formulářů a jejich políčka. Využívat služby Smartformu je ale možné až od okamžiku, kdy se spustí callbacková funkce smartform.afterInit

Beze změny.

afterInit

Sem lze vložit callbackovou funkci, která bude zavolána po inicializaci a přihlášení k službám Smartformu pomocí ID uživatele nastaveného v smartform.beforeInit. V okamžiku zavolání této funkce je možné využívat všechny služby Smartformu podle typu licence.

Beze změny.

ssl

Dříve nastavovala, zdali komunikace se serverem smartform.cz probíhá šifrovaně. Nyní se se serverem smartform.cz vždy komunikuje pomocí SSL.

Zrušeno.

Metody:

void setClientId(clientId)

Nastaví klientské ID – identifikátor klienta, který se přihlašuje k využívaní služeb Smartformu. Pro správné fungování Smartformu musí být klientské ID nastaveno během inicializace – nejlépe v metodě vložené do smartform.beforeInit. Nastavujete-li clientID jinde, pak je potřeba po jeho nastavení vyvolat inicializaci metodou smartform.rebindAllForms.

Beze změny.

void setNewSlovakRegister(boolean enable)

Povolí/zakáže použití nového slovenského registru.

V roce 2021 jsme pro slovenské adresy začali používat nový slovenský registr adres, spravovaný slovenskou státní správou. Jeho hlavní výhodou je, že je denně aktualizován. Kvůli zpětné kompatibilitě této verze API jsme ale ponechali jako defaultní původní registr slovenských adres. Touto metodou lze tedy přepnout na nový slovenský registr adres.

Metoda byla zrušena, API v2 používá pro slovenské adresy pouze nový registr.

SmartFormInstance getInstance(instanceId)

Vrátí instanci formuláře podle jeho přiděleného identifikátoru – instanceId.

Tento identifikátor musí být uveden jako CSS třída u všech HTML elementů <input>, které mají být součástí tohoto formuláře (musí být v seznamu atributu class). Všechny identifikátory musí povinně začínat řetězcem smartform-instance (výjimkou je implicitní instance s prázdným identifikátorem – viz SmartFormInstance).

Pokud instance Smartformu s tímto ID neexistuje, funkce vrací null.

Beze změny.

String[] getInstanceIds()

Vrátí pole identifikátorů všech formulářových instancí na stránce. Podrobnosti k identifikátorům viz smartform.getInstance(instanceId).

Beze změny.

void rebindAllForms(clear, doneCallback)

Vynutí reinicializaci všech objektů Smartformu na stránce. Projde znovu celý HTML dokument, najde všechny INPUT elementy určené pro Smartform a sloučí je do nových instancí Smartformu.

Pokud je clear=false, předchozí objekty SmartFormInstance se nesmažou, pouze se obnoví jejich vstupní a výstupní elementy. To se hodí, pokud se nezměnil seznam instancí ani názvy jejich identifikátorů.

Do parametru doneCallback lze nastavit funkci, která se zavolá po reinicializaci a přihlášení k službám Smartformu. Kód ve smartform.afterInit se automaticky nevykonává, případně ho volejte manuálně.

void unbindForm(instanceId)

Ve formuláři se zadaným instanceId zruší napojení na Smartform. U tohoto formuláře přestanou fungovat našeptávače a validace adres.

Identifikátorem instanceId se rozumí název CSS třídy uvedené u všech políček formuláře tvořící instanci Smartformu. Identifikátor vždy začíná řetězcem "smartform-instance".

Beze změny.

void setFocusNextFieldEnabledForAll(on)

Nastavení boolean příznaku, jestli má být po úspěšném výběru celé adresy z našeptávače nastaven focus na další pole formuláře, které následuje za adresními políčky. Implictně je tento příznak nastaven na true.

Zrušeno. Lze nastavit pro jednotlivé SmartformInstance.

void enableSetAutocomplete(boolean enable)

Povolí/zakáže Smartformu nastavit hodnotu atributu "autocomplete" u textových políček.

Defaultní chování je takové, že Smartform nastavuje atribut "autocomplete" na hodnotu "off". Metodu můžete použít v situaci, kdy chcete nastavit hodnotu atributu "autocomplete" jinou než je "off". Zavolejte ji v callbacku smartform.beforeInit.

Beze změny.

void setBackgroundColor(color)

Nastaví barvu pozadí okna našeptávače u všech instancí.

void setForegroundColor(color)

Nastaví barvu písma v našeptávači u všech instancí.

void setSelectionBackgroundColor(color)

Nastaví barvu pozadí označené položky našeptávače u všech instancí.

void setBorderColor(color)

Nastaví barvu okraje okna našeptávače u všech instancí.

Class SmartFormInstance

Třída slouží k nastavování vlastností jedné konkrétní instance Smartform formuláře a k přístupu k jednotlivým vstupním a výstupním elementům formuláře.

Na HTML stránce je totiž možno umístit více adresních formulářů a v takovém případě je potřeba i více instancí Smartformu. HTML elementy určené pro jednotlivé instance Smartformu se pak slučují pomocí identifikátoru instance, kterým je CSS třída (uvedená v atributu class u všech HTML elementů instance Smartformu). Identifikátor musí povinně začínat řetězcem "smartform-instance". Ke každé instanci Smartformu je možné získat přístup voláním metody smartform.getInstance(id), přičemž parametrem je právě identifikátor instance.

Třída SmartformInstance byla ponechána.

Metody:

void setCountry(String countryCode)

Pro daný formulář nastavuje zemi (její kód), z jaké se má našeptávat.

V současnosti je možné zadat tyto kódy:

  • CZ (Česká republika)
  • SK (Slovenská republika)

Defaultně je v každém formuláři nastaveno, že se našeptávájí adresy z České republiky.

Příklad použití metody setCountry() najdete na Demo – slovenské adresy.

SmartFormSuggestBox getBox(id)

Vrátí objekt zadávacího políčka s našeptávačem. id je identifikátor typu políčka, který musí být uveden v atributu class elementu input – možné hodnoty jsou:

  • smartform-street (ulice)
  • smartform-number (číslo domu)
  • smartform-street-and-number (ulice a číslo domu)
  • smartform-city (obec)
  • smartform-zip (PSČ)
  • smartform-whole-address (celá adresa)

Pokud políčko s daným ID neexistuje, funkce vrátí null.

void setStatusBox(boxId)

Nastaví element, do kterého se bude vkládat informace o validnosti zadané adresy. boxId je id <div> elementu, který bude sloužit jako status box.

Zrušeno.

String getId()

Vrátí identifikátor instance uvedený v atributu class příslušného elementu input.

Beze změny.

void setAllOraclesEnabled(value)

Podle hodnoty boolean parametru zapne/vypne našeptávače u všech políček instance.

void addAnnounceCallback(function)

Přidá funkci do seznamu funkcí, které se vykoná po příchodu announce service (výsledek validace zadané adresy). Callback funkce se zavolá s parametry (validationType, addressArray):

  • validationType je typu String – výsledek validace – viz ValidationResultType.
  • addressArray je pole zvalidovaných adres (typicky pole obsahuje žádnou nebo jednu adresu), každá adresa obsahuje atributy z AddressFieldType.

boolean isAddressValid()

Vrátí výsledek poslední validace – true, pokud byla nalezena právě jedna adresa (HIT).

void isAddressValidating()

Indikuje relevanci výsledku funkce isAddressValid vzhledem k datům zadaným ve formuláři. Pokud isAddressValidating() vrátí true, požadavek na ověření validnosti zadané adresy se ještě neodeslal nebo na něj zatím nepřišla odpověď.

Nahrazeno validačním callbackem SmartformInstance.addressControl.addValidationCallback – konkrétně parametrem upToDate ve třídě AddressValidationResult.

void setBackgroundColor(color)

Nastaví barvu pozadí okna našeptávače u všech zadávacích políček.

void setForegroundColor(color)

Nastaví barvu písma v našeptávači u všech zadávacích políček.

void setSelectionBackgroundColor(color)

Nastaví barvu pozadí označené položky našeptávače u všech zadávacích políček.

void setBorderColor(color)

Nastaví barvu okraje okna našeptávače u všech zadávacích políček.

void setFocusNextFieldEnabled(on)

Nastavení boolean příznaku, jestli se má po výběru celé adresy z našeptávače označit políčko následující za posledním zadávacím políčkem adresy.

void setZIndex( int zIndex )

Nastavuje z-index (CSS vlastnost určující prioritu při překrývání) našeptávacím oknům. Smartform se snaží určit hodnotu z-indexu automaticky, tato metoda slouží v případech, kdy hodnota nastavená Smartformem nevyhovuje.

void setSuggestionFormatter( function )

Nastaví callback, který umožňuje měnit text zobrazený v našeptáváči. Pokud je callback nastaven, je volán při zobrazení každého řádku v našeptávači.

Návratová hodnota callbacku bude použita jako text v našeptávači. Pokud callback vrátí null, použije se defaultní text našeptávače.

Při volání callbacku mu budou předány tyto parametry

  • suggestion – instance AddressSuggestion, reprezentuje jeden řádek v našeptávacím okně
  • fieldType – textový identifikátor typu políčka – viz SmartFormInstance.getBox(id) ("smartform-street-and-number", "smartform-city", …)

void setSelectionCallback( function )

Nastaví callback pro vyplnění políček výběrem z našeptávače. Pro každé políčko bude zavolána nastavená funkce s parametry

  • element – DOM element textového pole
  • text – řetězec, který by měl být vyplněn do textového pole
  • fieldType – textový identifikátor typu políčka – viz SmartFormInstance.getBox(id)
  • suggestion – instance AddressSuggestion, reprezentuje jeden řádek v našeptávacím okně

Výchozí chování Smartformu je vyplnit text do políčka, tj. zavolat 

  element.value = text;
  
Vybraný text se políčku nastaví automaticky v případě, že callback není nastaven, nebo také když je návratová hodnota callbacku true.

void setSuggestContext( contextType, contextAreaItems )

Nastavení oblasti, ze které se adresy našeptávají.

Parametry:

  • contextType – řetězec s typem omezení oblasti našeptávání. Možné jsou dvě hodnoty:
    • FILTER – adresy se našeptávají pouze ze zadané oblasti.
    • PREFERENCE – adresy se našeptávají přednostně ze zadané oblasti. Adresy mimo zadanou oblast se našeptávají také, za adresami z nastavené oblasti.
  • contextAreaItems – vymezení našeptávací oblasti. Jde o pole ve tvaru [ [contextAreaCodeType, contextAreaCode], … ]. Položky seznamu se skládají z
    • contextAreaCodeType – řetězec s typem adresní entity. Může nabývat těchto hodnot
      • MUNICIPALITY_CODE – obec
      • DISTRICT_CODE – okres
      • REGION_CODE – kraj
    • contextAreaCode – kód entity – obce, okresu nebo kraje.

Pokud budeme chtít, aby našeptávač našeptával jen adresy z obce Ubušínek (kód 549959), okresu Pelhřimov (kód 3304) nebo Zlínského kraje (kód 141), dosáhneme toho následujícím voláním: smartform.getInstance().setSuggestContext( 'FILTER', [['MUNICIPALITY_CODE', 549959], ['DISTRICT_CODE', 3304], ['REGION_CODE', 141]] )

void clearSuggestContext()

Odstraní nastavený našeptávací kontext. Viz metoda setSuggestContext(contextType, contextAreaItems).

Parametr color

Identifikátor barvy pro nastavení vzhledu menu našeptávače. Lze použít jakékoliv identifikátory barev platné v CSS, tedy HTML názvy (green, black, yellow ...) nebo RGB kódy barev (např. #803020), zkrácené RGB kódy (např. #f90), funkci rgb nebo rgba (např. rgb(255,0,0), rgba(100%, 0%, 0%, 0.7)), funkci hsl nebo hsla (např. hsl(240, 100%, 50%)). Některé prohlížeče nemají ještě podporu pro CSS3, takže některé identifikátory nefungují. HTML kódy a názvy a funkce rgb by měly fungovat všude. Více na w3.org.

Zadávání barev je beze změny.

 

Class SmartFormSuggestBox

Objekt jednoho zadávacího políčka adresy. Vstupní políčko musí být označeno identifikátorem části adresy (viz SmartFormInstance.getBox(id)) v atributu class elementu <input>.

 

Metody:

void setOracleEnabled(value)

Podle hodnoty boolean parametru zapne/vypne našeptávač u tohoto políčka.

void isOracleEnabled()

Zjistí, jestli je našeptávač zapnutý.

void setLimit(limit)

Nastaví maximální počet položek v menu našeptávače.

Beze změny.

int getLimit()

Vrátí limit počtu položek v menu našeptávače.

Beze změny.

void setPopupContainerId(String id)

Nastaví id prvku, do kterého má být našeptávací popup vložen. Našeptávací popup okno se standardně vkládá na konec prvku body, touto metodou lze toto chování změnit. Při volání této metody nejspíš budete potřebovat zavolat i metodu SmartFormInstance.setPopupAttributePosition(String position).

Beze změny.

void setPopupAttributePosition(String position)

Nastaví hodnotu CSS atributu position našeptávacího popupu.

Našeptávácí popup okno má standardně nastaven atribut position na hodnotu absolute.

Pokud se zavolá tato metoda, nenastavuje Smartform u popupu atributy top a left.

Beze změny.

Class AddressSuggestion

Reprezentuje jeden řádek v našeptávacím okně. Obsahuje texty pro všechny typy vstupních políček, které budou vyplněny do input boxů při potvrzení řádku v našeptávacím okně.

Třída AddressSuggestion byla ponechána.

Metody:

boolean isWholeAddress()

Zdali se jedná o celou (konkrétní) adresu.

Beze změny.

String getValue( String fieldType )

Vrací text, který bude vyplněn do input boxu daného typu. Parametr fieldType může nabývat následujících hodnot

  • "smartform-street" – ulice
  • "smartform-number" – číslo domu
  • "smartform-street-and-number" – ulice a číslo domu
  • "smartform-city" – zformátovaný název obce (může obsahovat poštu – např. „Hořice v Podkrkonoší“ – nebo název městské části – např. „Praha 4 - Podolí“)
  • "smartform-municipality" – čistý název obce (např. „Hořice“, „Praha“)
  • "smartform-zip" – PSČ
  • "smartform-whole-address" – celá adresa

Enum ValidationResultType

Výčet možných výsledků validace. Každá položka objektu má hodnotu stejnou jako název. Objekt je součástí objektu smartform (smartform.ValidationResultType).

 

Atributy:

  • HIT (právě jedna odpovídající adresa)
  • MANY (více odpovídajících adres)
  • TOOMANY (jako MANY, ale v seznamu adres jsou jen některé)
  • NOTHING (žádná odpovídající adresa nenalezena)
  • INSUFFICIENT_DATA (bylo zadáno malo vstupních parametrů)
Beze změny.

Enum AddressFieldType

Výčet atributů u každé adresy ve výsledku validace. Každá položka objektu má hodnotu stejnou jako název. Objekt je součástí objektu smartform (smartform.AddressFieldType).

Enum AddressFieldType byl ponechán. Změnily se některé jeho položky.

 

Atributy:

  • CODE (ID v databázi RÚIAN – dříve UIR-ADR)
  • UIRADR_CODE Zrušeno.
  • BUILDING_CODE (kód stavebního objektu)
  • NUMBER_ORIENTACNI (orientační číslo) Přejmenováno na STREET_NUMBER.
  • CHAR_ORIENTACNI (písmeno orientačního čísla) Přejmenováno na STREET_NUMBER_CHAR.
  • NUMBER_POPISNE (popisné číslo) Přejmenováno na CONSCRIPTION_NUMBER.
  • NUMBER_EVIDENCNI (evidenční číslo) Přejmenováno na PROVISIONAL_NUMBER.
  • NUMBER_WHOLE (celé číslo domu – např. ev.č. 179/or.č. 42) Přejmenováno na WHOLE_NUMBER.
  • STREET (ulice)
  • STREET_CODE (kód ulice)
  • CITY (obec)
  • CITY_CODE (kód obce)
  • PART (část obce)
  • PART_CODE (kód části obce)
  • ZIP (PSČ)
  • POST (pošta)
  • DISTRICT (okres)
  • DISTRICT_CODE (kód okresu)
  • REGION (kraj)
  • REGION_CODE (kód kraje)
  • CITY_AREA_1 (dělení obcí – v ČR odpovídá městským částím)
  • CITY_AREA_1_CODE (dělení obcí – kód)
  • CITY_AREA_2 (dělení obcí – v ČR odpovídá městským obvodům – v Praze je to "Praha 1" – "Praha 10")
  • CITY_AREA_2_CODE (dělení obcí – kód)
  • CITY_AREA_3 (dělení obcí – v ČR odpovídá správním obvodům – v Praze je to "Praha 1" – "Praha 22")
  • CITY_AREA_3_CODE (dělení obcí – kód)
  • FIRST_LINE (první řádka adresy) Přejmenováno na FORMATTED_ADDRESS_FIRST_LINE.
  • SECOND_LINE (druhá řádka adresy) Přejmenováno na FORMATTED_ADDRESS_SECOND_LINE.
  • ADDRESS_WHOLE (celá adresa na jedné řádce) Přejmenováno na FORMATTED_ADDRESS_WHOLE.
  • COORD_X (JTSK souřadnice x) Přejmenováno na COORD_JTSK_X.
  • COORD_Y (JTSK souřadnice y) Přejmenováno na COORD_JTSK_Y.
  • GPS_LAT (GPS souřadnice – šířka) Přejmenováno na COORD_WGS84_LATITUDE.
  • GPS_LONG (GPS souřadnice – délka) Přejmenováno na COORD_WGS84_LONGITUDE.
  • COUNTRY (název státu)
  • COUNTRY_CODE (zkratka státu – "CZE" nebo "SVK")
  • LAND_LOT_NUMBER_1 (Kmenové číslo parcely) Přejmenováno na BUILDING_PARCEL_NUMBER_1.
  • LAND_LOT_NUMBER_2 (Poddělení (pořadové číslo nové parcely v rámci původní parcely)) Přejmenováno na BUILDING_PARCEL_NUMBER_2.
  • CADASTRAL_DISTRICT_NAME (Název katastrálního území) Přejmenováno na CADASTRAL_UNIT_NAME.
  • CADASTRAL_DISTRICT_CODE (Číslo katastrálního území) Přejmenováno na CADASTRAL_UNIT_CODE.
  • BUILDING_WITH_LIFT (Informace o výtahu (hodnoty "true", "false", null))
  • NUMBER_OF_STOREYS (Počet podlaží v budově)
  • NUMBER_OF_FLATS (Počet bytů v budově)
  • FLOOR_AREA (Podlahová plocha budovy [m2])

 

Skrytá (hidden) vstupní pole formuláře

Skrytá pole jsou vyplněna podle toho, co mají nastaveno v atributu class. Možné hodnoty odpovídají výše uvedenému enumu AddressFieldType.

Například:

  • smartform-field-CODE
  • smartform-field-STREET
  • smartform-field-STREET_CODE
  • smartform-field-NUMBER_ORIENTACNI
  • smartform-field-REGION

V případě, že ve formuláři je použito vícero Smartformů, je třeba i pro skrytá pole v atributu class použít identifikátor instance (viz SmartFormInstance).