Miten kirjoitan VBScript-koodin M-Filesia varten?

Edellä olevia linkkejä napsauttamalla näet ohjeet VBScript-koodin lisäämisestä kussakin tapauksessa.

Edellä mainituissa tapauksissa voit käyttää ja hallita dokumenttivarastossa olevia kohteita M-Files APIn ja VBScriptin avulla.

VBScriptin perusteet

Seuraavassa käsitellään VBScriptin perusasioita, joilla pääset alkuun. Huomaa, että tässä raapaistaan vain pintaa. Katso lisäohjeita kohdasta Hyödyllisiä ohjeita. Jos et ole kokenut komentosarjojen kirjoittaja etkä tunne muuttujien ja funktioiden kaltaisia käsitteitä, kannattaa lukea ensin aloittelijalle suunnattu opas, kuten Learn Beginning Scripting.

Lauseet

VBScriptissä lause loppuu rivinvaihtoon eikä mihinkään erilliseen lopetusmerkkiin. Seuraava esimerkki sisältää kaksi lausetta:
Dim szPropertyName
szPropertyName = PropertyDef.Name
Jos haluat jakaa lauseen eri riveille, voit käyttää alaviivaa (_) osoittamassa, että lause jatkuu seuraavalla rivillä:
Err.Raise MFScriptCancel, _
    "The document vault already contains an object with the same title. Please choose another title."

Kommentit

Lisää koodiin aina selventäviä kommentteja, jotta muutkin koodia lukevat ymmärtäisivät, mistä siinä on kyse. Voit lisätä koodiin kommentin käyttämällä '-merkkiä:
' Get the title of the object.
Dim szCurrentTitle
szCurrentTitle = oCurrentTitleProp.GetValueAsUnlocalizedText
Hyvä periaate on lisätä kommentti kaikkien sellaisten koodirivien yläpuolelle, joiden merkityksen ymmärtämisessä lukijalla voi olla vaikeuksia.

Muuttujat

Muuttujat määritellään käyttäen avainsanaa Dim:
Dim szCurrentTitleProp
Muuttujille määritetään arvot yhtäsuuruusmerkillä (=). Sinun tulisi aina määritellä muuttujat, ennen kuin määrität niille uusia arvoja:
Dim szCurrentTitleProp
szCurrentTitleProp = PropertyValues.SearchForProperty( iTitleProperty ).GetValueAsUnlocalizedText
Option Explicit -lauseella voit pakottaa käyttämään muuttujamäärittelyä. Jos yrität käyttää määrittelemätöntä muuttujaa komentosarjassa, jossa on käytössä Option Explicit, komentosarja ei toimi. Esimerkiksi seuraava komentosarja ei toimi, koska muuttujaa szValue ei ole määritelty, ennen kuin sille on määritelty arvo:
Option Explicit
szValue = PropertyValue.GetValueAsUnlocalizedText
M-Files-komentosarjoja tehdessäsi sinulla on käytettävissä joukkoa ennalta määriteltyjä muuttujia. Voit käyttää esimerkiksi muuttujaa PropertyValue ominaisuuden arvon hakemiseen. Katso täydellinen luettelo ennalta määritellyistä muuttujista kohdasta Käytettävissä olevat VBScript-muuttujat.
Huomaa: Muuttujia nimettäessä suosittelemme käyttämään niin sanottua unkarilaista notaatiota. Näin sinulla ja muilla koodia lukevilla on selkeä käsitys muuttujaan tallennetun arvon tietotyypistä. Voit käyttää esimerkiksi seuraavaa notaatiota:
  • "sz" – merkkijono
  • "o" – objekti
  • "i" – kokonaisluku
  • "b" – totuusarvo
  • "f" – liukuluku
  • "d" – päiväys

Vakiot

Voit käyttää vakioita sellaisten arvojen tallentamiseen, joiden on pysyttävä vakioina kautta koko komentosarjan:
Const iMaxNumberOfItems = 50
Huomaa, että sinun on määritettävä vakiolle literaaliarvo. Et voi käyttää muuttujaa, toista vakiota tai funktiota vakion alustamiseen.

Objektit

Muuttujille määritetään objektit lauseella Set. Voit luoda uuden instanssin M-Files APIn objektista ja määrittää sen muuttujaan seuraavasti:
Dim oTitleSearch
Set oTitleSearch = CreateObject( "MFilesAPI.SearchCondition" )
Objektit ovat komponentteja, joilla on omat ominaisuutensa ja metodinsa. Metodit ovat tietylle objektille kuuluvia funktioita, joita voidaan käyttää objektin kontekstissa. Ominaisuuksia taas käytetään objektin arvojen näyttämiseen tai määrittämiseen. Objektin ominaisuuksissa ja metodeissa käytetään pistenotaatiota:
oTitleSearch.Set oTitleExpression, MFConditionTypeEqual, oTitleTypedValue
Metodin argumentit, kuten oTitleExpression, MFConditionTypeEqual ja oTitleTypedValue edellä olevassa esimerkissä, luetellaan metodin jälkeen erotettuna pilkuilla. Parametrit välitetään joko arvona tai viittauksena. Jos metodi käyttää parametria arvona, se kopioi argumenttina välitetyn arvon, ja näin ollen alkuperäinen arvo jää muuttumattomaksi. Jos metodi taas käyttää parametria viittauksena, metodin argumenttiin mahdollisesti aiheuttamat muutokset vaikuttavat myös alkuperäiseen viittaukseen. Jos tarkoitus on käyttää parametrin oletusarvoa, tulisi käyttää arvoa Nothing.

Tehdessäsi komentosarjoja M-Filesiin hyödynnät VBScriptissä käytettävissä olevia objekteja ja ennen kaikkea M-Files APIssa käytettävissä olevia objekteja. Katso tarkat tiedot M-Files API -dokumentaatiosta.

Merkkijonojen yhdistäminen

Voit yhdistää vähintään kaksi merkkijonoa käyttämällä &-operaattoria:
' Get proposal number.
Dim szNumber
szNumber = PropertyValues.SearchForProperty( 1156 ).TypedValue.DisplayValue

' Get customer.
Dim szCustomer
szCustomer = PropertyValues.SearchForProperty( 1288 ).TypedValue.DisplayValue

' Create proposal title.
Dim szName
szName = "Proposal #" & szNumber & " / " & szCustomer
Edellä olevassa esimerkissä muuttujaan szName tallennettu tarjouksen otsikko on tulos seuraavien komentosarjojen yhdistämisestä:
  • merkkijonoliteraali Proposal #
  • muuttujaan szNumber tallennettu tarjousnumero
  • toinen merkkijonoliteraali /
  • asiakkaan nimi, joka on tallennettu szCustomer-muuttujaan
Tuloksena saatava tarjouksen otsikko voi siis olla esimerkiksi Proposal #5577 / ESTT.
Voit lisätä merkkijonoosi rivinvaihdon yhdistämällä VbCrLF-vakion merkkijonoilla:
Err.Raise MFScriptCancel, _
    "The document vault already contains an object with the same title." & VbCrLF & "Please choose another title."

Virheiden tuottaminen

Jos sinun on esimerkiksi tarkistettava ominaisuuden arvo VBScriptillä, käyttäjälle on näytettävä virheilmoitus, kun hän on antanut virheellisen arvon. Voit tuottaa virheen VBScriptissä käyttämällä Raise-metodia ja Err-objektia:
Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."
Metodi käyttää virhenumeroa ja kuvausta parametreina. M-Filesin komentosarjoissa käytetään MFScriptCancel-muuttujaa, koska se tallentaa M-Filesin virhenumeron.

If-lauseet

If-lauseita käytetään lauseryhmän suorittamiseen, jos If-lause saa arvon tosi:
If Len( szValue ) < 10 Then

    Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."

End If
if-lohkon on päätyttävä End If-lauseeseen. Kaikki If- ja End If-lauseiden välissä olevat lauseet suoritetaan, jos If- ja Then-lauseiden välissä oleva ehto saa arvon tosi. Voit käyttää And-operaattoria määritelläksesi useita ehtoja, joiden kaikkien arvon on oltava tosi if-lohkon suorittamiseksi. Or-operaattorilla voit määritellä useita operaattoreita, joista yhden on oltava tosi, jotta if-lohko suoritetaan. Voit käyttää ehdon määrittelyyn seuraavia vertailuoperaattoreita:
  • == tarkistaa, onko kahden operandin arvo sama vai ei: jos on, ehto saa arvon tosi.
  • <> tarkistaa, onko kahden operandin arvo sama vai ei: jos ei ole, ehto saa arvon tosi.
  • > tarkistaa, onko vasemmanpuoleisen operandin arvo suurempi kuin oikeanpuoleisen operandin: jos on, ehto saa arvon tosi.
  • < tarkistaa, onko vasemmanpuoleisen operandin arvo pienempi kuin oikeanpuoleisen operandin: jos on, ehto saa arvon tosi.
  • >= tarkistaa, onko vasemmanpuoleisen operandin arvo suurempi tai yhtä suuri kuin oikeanpuoleisen operandin: jos on, ehto saa arvon tosi.
  • <= tarkistaa, onko vasemmanpuoleisen operandin arvo pienempi tai yhtä suuri kuin oikeanpuoleisen operandin: jos on, ehto saa arvon tosi.
Voit myös määrittää If-lauseen toiseen If-lauseeseen tai esimerkiksi Else-lauseeseen sisäkkäiseksi tai luoda komentosarjaan syvemmän haarautumislogiikan käyttämällä ElseIf-lausetta.

Funktiot ja alirutiinit

Voit käyttää alirutiinia määritelläksesi koodin osan käytettäväksi useita kertoja viittauksena koodissasi:
Sub CloseFile()
    oMyFile.Close
    Set oMyFile = Nothing
End Sub
Voit myös määritellä funktion käyttämään useita kertoja koodin osaa, joka palauttaa jonkin arvon:
Function IsOdd( iValue )
    If iValue MOD 2 = 0 Then ' Even value.
        IsOdd = False
    Else ' Odd value.
        IsOdd = True
    End If
End Function
Voit kutsua alirutiinin tai funktion komentosarjastasi yksinkertaisesti viittaamalla siihen nimellä:
Closefile()
IsOdd( 5 )

Hyödyllisiä ohjeita

Parhaat M-Filesin komentosarjojen tekemiseen liittyvät tiedonlähteet:

M-Files APIn dokumentaatiossa käsitellään kattavasti M-Files APIn objektit, metodit, rajapinnat, ominaisuudet ja luetteloinnit, joita voit hyödyntää VBScript-koodissa. Jälkimmäisessä ohjeessa puolestaan listataan ja selitetään kaikki muuttujat, joilla on ennalta määritelty arvo ja joita voit käyttää VBScript-koodissasi.

Näiden kahden ohjeen lisäksi kannattaa tutustua seuraaviin ulkoisiin sivustoihin:

Esimerkki

Seuraava esimerkki on komentosarja, jota voidaan käyttää ominaisuuden tarkistamiseen käyttäjän yrittäessä tehdä muutoksia metatietokortin metatietoihin. Komentosarja varmistaa, että annetun ominaisuuden arvon pituus on vähintään 10 merkkiä. Katsotaanpa komentosarjaa tarkemmin:
Option Explicit

Dim szPropertyName, szValue

szPropertyName = PropertyDef.Name

szValue = PropertyValue.GetValueAsUnlocalizedText

If Len( szValue ) < 10 Then

    Err.Raise MFScriptCancel, "The property """ & szPropertyName & """ must have a value of at least 10 characters."

End If
Ensin määritellään muuttujat szPropertyName ja szValue, minkä jälkeen tarkistettavan ominaisuuden ja sen arvon nimi tallennetaan määriteltyihin muuttujiin. Käytämme GetValueAsUnlocalizedText-metodia (katso lisätietoja M-Files API -dokumentaatiosta), jotta saamme ominaisuuden arvon lokalisoimattomana tekstinä.

Ehtona ominaisuuden arvon vahvistamiselle on, että arvon pituuden on oltava vähintään 10 merkkiä. Tämä ehto arvioidaan If-lauseessa. Olemme määritelleet If-lauseen ehdossa, että ominaisuuden pituuden on oltava vähemmän kuin 10 merkkiä, jotta If-lauseen sisällä oleva lause suoritetaan. Jos ominaisuuden arvossa on 10 merkkiä tai enemmän, If-koodilohkoa ei suoriteta ja komentosarjan suorittaminen lopetetaan.

If-lohkossa käyttäjälle lähetetään virheilmoitus, jossa sanotaan, että käyttäjän antamassa ominaisuuden arvossa on oltava vähintään 10 merkkiä. Käyttäjän on siis annettava pidempi arvo. Virheilmoituksen näyttämisen jälkeen näkyviin tulee taas metatietokortti, jotta käyttäjä voi muokata virheellistä ominaisuuden arvoa.

Katso täydelliset ohjeet ominaisuuksien arvojen tarkistuksesta VBScriptillä kohdasta Ominaisuuksien arvojen automaattinen tarkistus.