Knihovna pro .NET Framework napsaná ve .NET Standardu 1.6 a .NET Framework 4.6.1 umožňující snadnou práci s Datasety Hlídače státu. Dostupná také jako NuGet balíček.
Pro vytvoření instance konektoru je nutné znát Váš ApiToken, který lze získat po příhlášení na stránkách Hlídače Státu - API pro vývojáře.
IDatasetConnector datasetConnector = new DatasetConnector(ApiToken);
Jakmile máme instanci vytvořenou, je potřeba definovat vlastní dataset.
Dataset je v knihovně popsaný třídou Dataset.cs, která je generická, protože JSON schema se automaticky generuje na základě generického parametru. Generický parametr musí splňovat podmínku, že implementuje rozhranní IDatasetItem, který vyžaduje definici parametru Id. Jednotlivé parametry odpovídají definici datové sady a jejich popis lze nalézt v dokumentaci.
Jelikož definice datasetu se v průběhu práce s ním pravděpodobně měnit nebude, je možné ji mít v programu uloženou např. jako statickou proměnnou
new HlidacStatu.Api.Dataset.Connector.Dataset<Most>(
"Stav Mostů v ČR", "Stav-Mostu", "http://bms.clevera.cz/Public", "Stav mostů v ČR. V tuto chvíli na dálnicích a silnicích I.třídy, které spravuje ŘSD.", "https://github.com/HlidacStatu/Datasety/tree/master/MostyRSD",
false, true,
new string[,] { { "Stav mostů", "Stav" }, { "Poslední kontrola", "PosledniProhlidka" } },
new ClassicTemplate.ClassicSearchResultTemplate()
.AddColumn("Označení", @"<a href=""@(fn_DatasetItemUrl(item.Id))"">@item.Oznaceni</a>")
.AddColumn("Jméno", "@item.Jmeno")
.AddColumn("Stav mostu", "@item.PopisStavu")
.AddColumn("Poslední kontrola", "@fn_FormatDate(item.PosledniProhlidka,\"dd.MM.yyyy\")")
.AddColumn("Mapa", "<a target='blank' href='https://mapy.cz/zakladni?q=@(fn_FormatNumber(item.GPS_Lat,\"en\")),@(fn_FormatNumber(item.GPS_Lng,\"en\"))'>na mapě</a>")
,
new ClassicTemplate.ClassicDetailTemplate()
.AddColumn("Jméno", "@item.Jmeno")
.AddColumn("Místní název", "@item.MistniNazev")
.AddColumn("Poslední kontrola", "@fn_FormatDate(item.PosledniProhlidka,\"dd.MM.yyyy\")")
.AddColumn("Stav mostu", "@item.PopisStavu")
.AddColumn("Spravuje", "@item.SpravaOrganizace, @item.SpravaProvozniUsek, @item.SpravaStredisko")
.AddColumn("Souřadnice", "Lat: @(fn_FormatNumber(item.GPS_Lat,\"en\"))<br/>Long: @(fn_FormatNumber(item.GPS_Lng,\"en\"))")
.AddColumn("Mapa", "<iframe src=\"https://api.mapy.cz/frame?params=%7B%22x%22%3A@(fn_FormatNumber(item.GPS_Lng,\"en\"))%2C%22y%22%3A@(fn_FormatNumber(item.GPS_Lat,\"en\"))%2C%22base%22%3A%221%22%2C%22layers%22%3A%5B%5D%2C%22zoom%22%3A16%2C%22url%22%3A%22https%3A%2F%2Fmapy.cz%2Fs%2F3auci%22%2C%22mark%22%3A%7B%22x%22%3A%22@(fn_FormatNumber(item.GPS_Lng,\"en\"))%22%2C%22y%22%3A%22@(fn_FormatNumber(item.GPS_Lat,\"en\"))%22%2C%22title%22%3A%22Poloha+mostu%22%7D%2C%22overview%22%3Atrue%7D&width=500&height=333&lang=cs\" width=\"500\" height=\"333\" style=\"border:none\" frameBorder=\"0\"></iframe>")
);
kde Most definuje strukturu datasetu (v tomto případě informace o jednom mostu) a proměnné SearchResultTemplate a DetailTemplate definují šablony použité pro vykreslení seznamu výsledků vyhledávání a detailu položky datasetu. Více informací k definici šablony lze nalézt v popisu API - HTML Template.
Pomocná třída a metody v ní ClassicTemplate pomohou vygenerovat template pro stránku s výsledky hledání a detail.
Vlastnosti datasetId a generované JsonSchema se nesmí měnit. Při nutnosti jejich změny je potřeba nejprve starý dataset odstranit a poté vytvořit nový se změněnými hodnotami.
Pro ověření, zda dataset již existuje, slouží metoda DatasetExists, která jako parametr přijímá definici datasetu a vrací true, pokud je daný dataset již zaregistrován v Hlídači státu, jinak vrací false.
var datasetExists = await datasetConnector.DatasetExists(dataset)
Nový dataset se v Hlídači státu vytvoří (zaregistruje) voláním metody RegisterDataset, která jako parametr přijímá definici datasetu a vrací id datasetu v Hlídači státu (datasetId není povinná položka a pokud není vyplněna, Hlídač státu ji automaticky odvodí z názvu datasetu, tato hodnota je následně vrácena. Pokud je hodnota datasetId vyplněna, je použita při registraci a vrácena).
var datasetId = await datasetConnector.CreateDataset(dataset);
Pokud již vytvářený dataset existuje, je vyvolána výjimka DatasetConnectorException.
Existující dataset lze upravit kromě hodnot datasetId a JsonSchema (pro jejich změnu je nutné nejprve dataset smazat a následně vytvořit nový). Úprava datasetu se provede voláním metody UpdateDataset, která jako parametr přijímá definici datasetu a vrací string Ok, pokud se dataset podařilo upravit.
var updateResult = await datasetConnector.UpdateDataset(changedDataset);
Pokud upravovaný dataset neexistuje, je vyvolána výjimka DatasetConnectorException.
Definici datasetu, včetně všech nahraných záznamů, lze odstranit voláním metody DeleteDataset, která jako parametr přijímá definici datasetu.
await datasetConnector.DeleteDataset(dataset);
Pokud upravovaný dataset neexistuje, je vyvolána výjimka DatasetConnectorException.
Záznam se do datasetu přidá voláním metody AddItemToDataset, která jako první parametr přijímá definici datasetu a jako druhý parametr přidávaný záznam. V případě, že záznam na základě Id v datasetu již existuje, bude nahrazen nově vkládaným záznamem. Návratová hodnota metody je Id záznamu.
var result = await datasetConnector.AddItemToDataset(dataset, rizeni)