Skripty základy VB, vestavěné objekty, příklady Tento dokument popisuje základy VB, vestavěné objekty, jejich metody a vlastnosti. Na závěr jsou uvedeny typické příklady použití. Stav ke dni: 9.12.2006 Základy Visual Basicu Visual Basic je jedním z jazyků.net platformy a jako takový byl vybrán pro psaní skriptů v OpenLIMS. Není Case Sensitive (nerozlišuje velikost písmen), každý příkaz je ukončen koncem řádku (není-li použito znaku pro pokračování řádku, viz. dále). Dobrým zvykem je psát první písmena klíčových slov velkým písmenem, okolo znamének a za čárkami dělat mezery a pro odsazení částí kódu používat tabelátor (např. v podmínkách, viz. dále). Datové typy a definice proměnných Základní datové typy používané ve skriptech jsou: Boolean logický datový typ (True / False) Integer celé číslo Single, Double, Decimal desetinná čísla (oddělovačem desetinné části je tečka) Date (DateTime) datum a čas String řetězec (text) Názvy proměnných musí začínat písmenem (případně podtržítkem). Dim pravda As Boolean = True ' definice promenne s inicializaci Dim cislo As Integer = 1 Dim desetinnecislo As Double = 2.18564 Dim datum As Date Dim text As String = "Nějaký text" Pole Pole slouží pro uložení více hodnot stejného datového typu (s výjimkou typu Object) v rámci jedné proměnné. Tyto hodnoty lze pak např. opakovaně zpracovávat v rámci cyklu (viz. dále). Užitečnou vlastností každého pole je Length počet prvků. Dim pole() As Integer Dim pole2() As Double = { 0.5, 1.6, 6.9 } ' inicializovane pole Dim pocetprvku As Integer = pole2.length ' = 3 prvky Hodnota Nothing Představuje základní hodnotu pro proměnné ve smyslu nenastaveno. Tuto hodnotu lze testovat pomocí funkce IsNothing(). Dim metoda As Method = Nothing Dim nenastaveno As Boolean = IsNothing(metoda) ' = True Dim nastaveno As Boolean = Not IsNothing(metoda) ' = False Pokračování řádku Pokud je řádek příliš dlouhý, lze jej rozdělit první řádek pak musí být ukončen znakem pro pokračování řádku podtržítkem (_):
Dim text As String = "Nějaký velice dlouhý text, " + _ "který pokračuje " + _ "na dalších řádkách." Komentář Pro komentář se používá znak apostrof, pokud má být zakomentováno více řádků, musí být apostrof na začátku každého zakomentovaného řádku: Dim pravda As Boolean = True ' toto je komentar ' toto je celoradkovy komentar Dim cislo As Integer = 1 ' viceradkovy komentar - 1. radek ' viceradkovy komentar - dalsi radek Podmínky Podmínky se používají pro řízení běhu skriptu, např. pro nastavení výsledku dle nějakého prametru. V podmínkách lze používat logické operátory Or (pokud je splněna první nebo druhá podmínka), OrElse (zkrácené vyhodnocování - pokud je splněna první podmínka, druhá již není testována), And (pokud je splněna první a druhá podmínka), AndAlso (pokud není splněna první podmínka, druhá již není testována). Dalším operátorem je Not negace podmínky. If podminka1 Then vyraz1 ElseIf podminka2 Then vyraz2 Else vyraz3 End If ' 1-radkova varianta If podminka Then vyraz Příklad: If vysledek = "-" Then m.setres(0, True) ElseIf vysledek = "+-" Then m.setres("stopa", True) ElseIf vysledek = "+1" Then m.setres(1, True) End If If IsNothing(m_437) Then Return True Cykly Cykly slouží pro opakování běhu nějakého výpočtu, např. pro úpravu výsledku více metod v poli. For Each promenna As datovytyp In pole vyraz Next Příklad: Dim metlist() As Method = Met.GetMetList("134, 135, 136", MetFilter.IsCharRes) For Each m As Method In metlist If m.charres= "++" Then m.setres("pozitivni", True) Next
Vestavěné objekty, jejich metody (funkce) a vlastnosti Zde jsou uvedeny vestavěné objekty, jejich metody (funkce) a vlastnosti, krátký popis a hlavička. Příklady použití jsou dostupné v aplikaci po výběru dané metody (funkce) / vlastnosti v poli Popis. DateInfo Objekt pro jednoduché operace s datem a časem. Date (vlastnost) Vrací aktuální datum. Public ReadOnly Property Date As DateTime Day (vlastnost) Vrací aktuální den v měsíci (1 až 31 dle příslušného měsíce). Public ReadOnly Property Day As Integer DayOfWeek (vlastnost) Vrací jméno aktuálního dne v týdnu. Public ReadOnly Property DayOfWeek As String Month (vlastnost) Vrací aktuální měsíc v roce (1 až 12). Public ReadOnly Property Month As Integer Year (vlastnost) Vrací aktuální rok. Public ReadOnly Property Year As Integer DateAfter (funkce) Pro kladná čísla přičte (pro záporná odečte) příslušný počet dnů k aktuálnímu datu. Public Function DateAfter(CountOfDays As Double) As DateTime ErrorLog Objekt pro zápis chybových hlášení do chybového protokolu Windows (EventLog). Write (funkce) Zápis 1 chyby do chybového protokolu Windows (EventLog) Public Sub Write(Chyba As Exception, Text As String) LabInfo Objekt pro zobrazování informací o aktuální laboratoři a organizaci (instalaci). Name (vlastnost) Vrací jméno aktuální laboratoře Public ReadOnly Property Name As String OrgName (vlastnost) Vrací jméno organizace (instalace). Public ReadOnly Property OrgName As String
OrgShortName (vlastnost) Vrací zkratku organizace (instalace). Public ReadOnly Property OrgShortName As String ShortName (vlastnost) Vrací zkratku aktuální laboartoře. Public ReadOnly Property ShortName As String Log Objekt pro zápis informací do logovacího souboru. (Uveden pouze výběr funkcí) WriteLine (funkce) Zápis 1 řádku do logovacího souboru. Public Function WriteLine(Text As String) As Boolean WriteLineWithDate (funkce) Zápis 1 řádku do logovacího souboru včetně aktuálního data a času. Public Function WriteLineWithDate(Text As String) As Boolean Message Objekt pro zobrazování informativních, chybových a potvrzovacích hlášení. ShowConfirm (funkce) Zobrazí potvrzovací hlášení s tlačítky Ano / Ne. Public Function ShowConfirm(Text As String, Title As String) As Boolean ShowError (funkce) Zobrazí chybové hlášení. Public Sub ShowError(Text As String, Title As String) ShowInfo (funkce) Zobrazí informativní hlášení. Public Sub ShowInfo(Text As String, Title As String) Met Objekt pro práci s metodami. (Zde je jen výběr funkcí, místo ostatních se doporučuje používat funkce objektu Method). Add (funkce) Přidání metody. (Pozor: plánovaná změna datového typu návratové hodnoty!) Public Function Add(Metoda As String) As Boolean Del (funkce) Odstranění metody. Public Function Del(Metoda As String) As Boolean GetMet (funkce) Vytvoření instance třídy Method pro konkrétní metodu (pokud metoda neexistuje nebo nevyhovuje filtru funkce vrací Nothing). Možné hodnoty filtru viz. níže. Public Function GetMet(Metoda As String) As Method
Public Function GetMet(Metoda As String, Filtr As MetFilter) As Method GetMetDev (funkce) Vytvoření instance třídy Method pro konkrétní metodu a analyzátor (pokud metoda neexistuje nebo nevyhovuje filtru funkce vrací Nothing). Možné hodnoty filtru viz. níže. Public Function GetMetDev(Metoda As String, Filtr As MetFilter, Analyzator As String) As Method GetMetList (funkce) Vytvoření pole instancí třídy Method pro konkrétní metody (pokud některá metoda neexistuje nebo nevyhovuje filtru funkce vrací pole s nižším počtem prvků nebo pole s nulovým počtem prvků). Možné hodnoty filtru viz. níže. Public Function GetMetList(Metody As String) As Method() Public Function GetMetList(Metody As String, Filtr As MetFilter) As Method() GetMetListDev (funkce) Vytvoření pole instancí třídy Method pro konkrétní metody a analyzátor (pokud některá metoda neexistuje nebo nevyhovuje filtru funkce vrací pole s nižším počtem prvků nebo pole s nulovým počtem prvků). Možné hodnoty filtru viz. níže. Public Function GetMetListDev(Metody As String, Filtr As MetFilter, Analyzator As String) As Method() ResetMetReg (funkce) Nulování paměťových registrů pro metody (M1... Mxx) pouze z historických důvodů (konverze), nově nepoužívat. Public Function ResetMetReg(Instance As Object) As Boolean SetRes (funkce) Nastavení výsledku metody (výsledek jako objekt, s možností přepisu i uživatelem zadaného výsledku). Pokud daná metoda na žádance není, je přidána. (Pozor: plánovaná změna datového typu návratové hodnoty!) Public Function SetRes(Metoda As String, Vysledek As Object) As Boolean Public Function SetRes(Metoda As String, Vysledek As Object, PrepsatVzdy As Boolean) As Boolean MetFilter (filtr pro výběr metod) MetFilter.IsRes (metoda má výsledek) MetFilter.IsCharRes (metoda má textový výsledek) MetFilter.IsNumRes (metoda má číselný výsledek) MetFilter.IsNumG (metoda má číselný výsledek s příznakem větší než) MetFilter.IsNumL (metoda má číselný výsledek s příznakem menší než) MetFilter.IsStatim (metoda je statimová) MetFilter.IsDevice (metoda pochází z analyzátoru) Method Objekt pro práci s metodami (1 instance objektu pro každou metodu na žádance). CharRes (vlastnost) Textový výsledek metody. Public ReadOnly Property CharRes As String IsDevice (vlastnost) Test, zda je metoda z analyzátoru.
Public ReadOnly Property IsDevice As Boolean IsCharRes (vlastnost) Test textového výsledku metody. Public ReadOnly Property IsCharRes As Boolean IsNumG (vlastnost) Test číselného výsledku metody - větší než hodnota výsledku (např. výsledek "> 100"). Public ReadOnly Property IsNumG As Boolean IsNumL (vlastnost) Test číselného výsledku metody - menší než hodnota výsledku (např. výsledek "< 100"). Public ReadOnly Property IsNumL As Boolean IsNumres (vlastnost) Test číselného výsledku metody. Public ReadOnly Property IsNumRes As Boolean IsRes (vlastnost) Test zadaného výsledku metody. Public ReadOnly Property IsRes As Boolean IsStatim (vlastnost) Test, zda je metoda statimová. Public ReadOnly Property IsStatim As Boolean MaxValue (vlastnost) Maximální možná hodnota výsledku metody. Public ReadOnly Property MaxValue As Decimal MinValue (vlastnost) Minimální možná hodnota výsledku metody. Public ReadOnly Property MinValue As Decimal NumRes (vlastnost) Číselný výsledek metody. Public ReadOnly Property NumRes As Decimal Rating (vlastnost) Hodnocení výsledku metody. Public ReadOnly Property Rating As Integer Res (vlastnost) Výsledek metody. Public ReadOnly Property Res As Object IsEQ (funkce) Test, zda je výsledek metody číslo rovné porovnávané hodnotě. Public Function IsEQ(PorovnavanyVysledek As Decimal) As Boolean IsG (funkce) Test, zda je výsledek metody číslo větší než porovnávaná hodnota. Public Function IsG(PorovnavanyVysledek As Decimal) As Boolean
IsGE (funkce) Test, zda je výsledek metody číslo větší než porovnávaná hodnota nebo rovné. Public Function IsGE(PorovnavanyVysledek As Decimal) As Boolean IsL (funkce) Test, zda je výsledek metody číslo menší než porovnávaná hodnota. Public Function IsL(PorovnavanyVysledek As Decimal) As Boolean IsLE (funkce) Test, zda je výsledek metody číslo menší než porovnávaná hodnota nebo rovné. Public Function IsLE(PorovnavanyVysledek As Decimal) As Boolean SetRes (funkce) Nastavení výsledku metody (výsledek jako objekt, s možností přepisu i uživatelem zadaného výsledku). Public Function SetRes(Vysledek As Object) As Boolean Public Function SetRes(Vysledek As Object, PrepsatVzdy As Boolean) As Boolean MetMB Objekt pro práci s mikrobiologickými metodami. AddMemo (funkce) Přidání mema k aktuálnímu záznamu s možností testu existence mema. Public Function AddMemo(Text As String, TestExist As Boolean) As Boolean NewMO (funkce) Test, zda je mikrob nově přidán na žádanku. Public Function NewMO(Mikrob As String) As Boolean OccurMO (funkce) Test, zda se během daného období vyskytuje u aktuálního pacienta daný mikrob. Public Function OccurMO(Mikrob As String, PocetDni As Integer) As Boolean Patient Objekt pro práci s pacientem na žádance. Age (vlastnost) Věk pacienta ve dnech (DatumOdberu - DatumNarozeni). Public ReadOnly Property Age As Integer Birthdate (vlastnost) Datum narození pacienta. Public ReadOnly Property BirthDate As DateTime Name (vlastnost) Pracovní jméno pacienta. Public ReadOnly Property Name As String PID (vlastnost) PID (identifikace pacienta). Public ReadOnly Property PID As String
Sex (vlastnost) Pohlaví pacienta (U, M, F). Public ReadOnly Property Sex As String PC Objekt pro práci se stanicí (počítačem). Name (vlastnost) Vrací jméno aktuální stanice (PC) Public ReadOnly Property Name As String Rozp Objekt pro práci s rozpory. AddIf (funkce) Přidání rozporu pokud je splněna podmínka (na žádanku dle bloku - pokud není žádanka v daném bloku, přiřadí se rozpor na žádanku CP; pokud není žádanka CP, přidá se na aktuální žádanku). Public Function AddIf(Blok As String, MTV As String, Podminka As Boolean) As Boolean Public Function AddIf(MTV As String, Podminka As Boolean) As Boolean User Objekt pro zpracování informací o aktuálně přihlášeném uživateli. FirstName (vlastnost) Vrací jméno aktuálně přihlášeného uživatele. Public ReadOnly Property FirstName As String LastName (vlastnost) Vrací příjmení aktuálně přihlášeného uživatele. Public ReadOnly Property LastName As String WorkName (vlastnost) Vrací pracovní jméno aktuálně přihlášeného uživatele. Public ReadOnly Property WorkName As String Předdefinované typy objektů Dále jsou předdefinovány následující typy objektů (uživatel může vytvořit jeden objekt pro instalaci, pro každou laboratoř nebo libovolný počet objektů. Jeden objekt pro instalaci: Globální rozpory Globální výpočty Jeden objekt pro každou laboratoř: Lokální rozpory Lokální výpočty
Mikrobiologie Podmínky mezí Libovolný počet objektů: Uživatelský objekt Sekce Aplikace obsahuje následující sekce (uživatelsky definovatelné části kódu, volané z různých částí aplikce): Centrální příjem (zatím nepoužito) Metody a výsledky v žádance (mikrobiologie) Odhlášení uživatele Přihlášení uživatele Příjem z analyzátoru (zatím nepoužito) Uložení žádanky Výpočet rozporů Příklady Jednoduchý výpočet: Dim m_103 As Method = Met.GetMet("U_KMOC_", MetFilter.IsNumRes) ' dohledani metody If IsNothing(m_103) Then Return True ' metoda nenalezena -> konec vypoctu Dim m_100 As Method = Met.GetMet("U_OBJ.", MetFilter.IsNumRes) If IsNothing(m_100) Then Return True Met.SetRes("fU_KMOC", m_103.numres * m_100.numres / 1000) ' nastaveni vysledku Return True Jednoduchý výpočet s testem pro dělení nulou: Dim m_25 As Method = Met.GetMet("S_CHOL", MetFilter.IsNumRes) If IsNothing(m_25) Then Return True Dim m_26 As Method = Met.GetMet("S_HDLC", MetFilter.IsNumRes) If IsNothing(m_26) OrElse m_26.numres = 0 Then Return True ' test na 0 Met.SetRes("qS_IA..", (m_25.numres - m_26.numres) / m_26.numres) Return True Úprava výsledku pro více metod (příklad 1): Dim metlist() As Method = Met.GetMetList("U_EPKU, U_ERY.", MetFilter.IsRes) For Each m As Method In metlist If m.charres = "< 1" Then m.setres(1, True) Next Úprava výsledku pro více metod (příklad 2): Dim metlist() As Method = Met.GetMetList("U_OXAL, U_TRPF, U_DRT", MetFilter.IsCharRes) For Each m As Method In metlist
Next If m.charres = "NONE" Then m.setres(0, True) Úprava výsledku pro více vstupních výsledků: Dim m As Method = Met.GetMet("S_HB.E", MetFilter.IsNumRes) If Not IsNothing(m) Then Dim vysledek As Decimal = m.numres If vysledek = -1 Then m.setres("negat.", True) ElseIf vysledek = 1 Then m.setres("pozitiv.", True) ElseIf vysledek = 0 Then m.setres("hraniční", True) End If End If Dohledání metody s číselným výsledkem z analyzátoru: Dim m_1699 As Method = Met.GetMet("B_SO2c", MetFilter.IsNumRes Or MetFilter.IsDevice) Kopie výsledku do jiné metody (pokud metoda není, přidá se) (s případným nulováním / smazáním původní metody): Dim m_1698 As Method = Met.GetMet("B_Hb.I", MetFilter.IsNumRes) If Not IsNothing (m_1698) Then Met.SetRes("B_HB..", m_1698.numres) m_1698.setres("****", True) ' pripadne nulovani puvodni metody Met.Del("B_Hb.I") ' pripadne smazani puvodni metody End If Jednoduchý rozpor: Dim m_125 As Method = Met.GetMet("S_STAV", MetFilter.IsCharRes) If IsNothing(m_125) Then Return True Dim podminka As Boolean = (m_125.charres = "hem+chyl") Rozp.AddIf("Centrální příjem", "Pozor: CHYLOZITA a HEMOLÝZA", podminka) Return True