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 Dim Dim Dim Dim
pravda As Boolean = True ' definice promenne s inicializaci cislo As Integer = 1 desetinneCislo As Double = 2.18564 datum As Date 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