Innhald
Innhaldsliste 🔎︎

# Tenesta ScriptForge.Services

ScriptForge-biblioteket er bygd på ei utvidbar samling av såkalla «Tenester».
Denne samlinga vert lagd til som kategoriar av grunnleggjande bibliotek eller Python-modular:

1. standard-biblioteket ScriptForge levert med LibreOffice

2. ein del «tilknytte» bibliotek også levert med LibreOffice

3. kvar LibreOffice-utviding frå brukar/bidragsytar som helst som ønskjer å passa inn i same rammeverk

Ei teneste er ei samling eigenskapar eller metodar som implementerer tenesta.

For forfattaren av eit brukarskript kan ei teneste anten vera ein modul i eit bibliotek eller ein instance (førekomst) i ein klassemodul.

Ein event manager (hendingshandsamar) er eit skript i eit bibliotek som bind ei hending som utløyser ein makro , som oftast definert av menyen Verktøy → Tilpass – til den aktuelle tenesteførekomsten.

Viss for eksempel fleire dokument utløyser den same makroen når dei vert lasta inn, kan det vera nyttig å vite kva for dokument som utløyste makroen denne gongen. Det er i slike tilfelle ein hendingshandsamar kjem til nytte.

Desse metodane er kjernen i konstruksjonen ScriptForge:

- RegisterScriptServices

  Vert kalla opp internt av ScriptForge for å registrera lista over tenester som vert implementerte for eit bibliotek.
  Kvart bibliotek som er knytt til Scriptforge eller utvidar det, må implementere sin eigen RegisterScriptServices-metode.

- RegisterService

  Kalla opp – så mange gongar som det er tenester å registrere i biblioteket – av RegisterScriptServices.

- RegisterEventManager

  Kalla opp av RegisterScriptServices for å registrera hendingshandsaminga av biblioteket.

- CreateScriptService

  Vert kalla opp av brukarskript for å få eit objekt som gjev tilgang til tenesta gjeve som argument.
  Alle tenester bør kallast ved hjelp av metoden CreateScriptService.

Konvensjonelt kan tenestene String, Array og Exception kallast direkte som SF_String, SF_Array og SF_Exception.

Liste over metodar i tenesta Service
CreateScriptService | RegisterScriptServices RegisterService | RegisterEventManager

## CreateScriptService

Få tilgang til ei av tenestene i eit bibliotek for å bruka eit bruarrskript.
Den returnerte verdien er eit Basic-objekt, eller Nothing viss det oppstod ein feil.

Ei teneste kan forståast som anten:

- som eit sett av metodar som er samla i ein Basic-standardmodul

- eller som eit sett metodar og eigenskapar som er samla i ein Basic-klassemodul.

### Syntaks:

           CreateScriptService(Service As String, [arg0, ...] As Variant) As Variant

### Parametrar:

Service: Namnet på den tenesta som er definert som "library.service".
Biblioteket er eit Basic-bibliotek som må finnast i GlobalScope. Standardverdien er "ScriptForge".
Tenesta er ei av de tenestene som er registrert av biblioteket ved hjelp av metoden RegisterScriptServices().

arg0, …: Ei liste over argument som krevst av den aktiverte tenesta.
Viss det første argumentet viser til ei hendingshandsaming, er arg0 obligatorisk og må vera det UNO-objektet som representerer den hendinga som vart gjeven som argument til brukarmakroen.

### Eksempel:

            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            ' Skal gjerast éin gong
            Dim svc As Object
            Set svc = CreateScriptService("Array")
            ' Refererer til tenesta «ScriptForge.Array» eller SF_Array
            Set svc = CreateScriptService("ScriptForge.Dictionary")
            ' Returnerer ein ny tom klasseførekomst av ei ordbok; «ScriptForge.» er valfri
            Set svc = CreateScriptService("SFDocuments.Calc")
            ' Refererer til Calc-tenesta, implementert i det tilknytte SFDocuments-biblioteket
            Set svc = CreateScriptService("Timer", True)
            ' Returnerer ein klasseførekomst Timer, som startar med ein gong
            Set svc = CreateScriptService("SFDocuments.DocumentEvent", oEvent)
            ' Refererer til DocumentEvent implementert i det tilknytte SFDocuments-biblioteket
            ' Returnerer den førekomsten av klassen Document som utløyste hendinga

## RegisterScriptServices

Ved å gjera ein serie av oppkall til RegisterService() og RegisterEventManager(), vil metoden RegisterScriptServices()inkorporerer et bibliotek i strukturen ScriptForge.
Kvart bibliotek knytt til strukturen, må implementera sin eigen versjon av denne metoden.

Metoden må lagrast i ein Basic-standardmodul i motsetnad til ein klassemodul.

Ei teneste er anten:

- ein Basic standardmodul som vart sendt som eit Basic-objekt.

- eller ein streng som gjev funksjonen som skal køyrast for å henta ein førekomst av tenesta. Det er faktisk den funksjonen som inneheld nøkkelordet New i uttrykket Set som oppretta førekomsten.

              GlobalScope.LibraryName.ModuleName ' Objekt
              "LibraryName.ModuleName.FunctionName" ' Streng

### Eksempel:

          Public Sub RegisterScriptServices()
          ' To be stored in library = myLibrary
              With GlobalScope.ScriptForge.SF_Services
                  .RegisterService("myService1", GlobalScope.myLibrary.myModule)
                  ' Referere til ein Basic standardmodul som implementerer tenesta som eit sett med metodar
                  .RegisterService("myService2", "myLibrary.someModule.someFunction")
                  ' Funksjonen skal returnera ein førekomst av ein Basic-objektklasse som implementerer tenesta
                  ' ...
              End With
          End Sub

Når eit brukarskript inneheld eit uttrykk som for eksempel:

    Set myServ = CreateScriptService("myLibrary.myService1")

ScriptForge utfører desse opgåvene:

1. hent biblioteket myLibrary når det er nødvendig

2. kall opp metoden RegisterScriptServices for å henta lista over tenester i myLibrary inn i minnet

3. initialiser variabelen myServ med den gjevne tenesta

## RegisterService

Metoden returnerer Sann viss namneverdiparet gjeve som argument kunne registrerast.

### Syntaks:

          GlobalScope.ScriptForge.SF_Services.RegisterService(ServiceName As String, ServiceReference As Variant) As Boolean

### Parametrar:

ServiceName: Namnet på tenesta som ein streng som ikkje skil mellom store og små bokstavar. Namnet må vera unikt.

ServiceReference: Ein tenestereferanse er anten:

- ein Basic standardmodul som vart sendt som eit Basic-objekt.

- eller ein streng som gjev funksjonen som skal køyrast for å henta ein førekomst av tenesta. Det er faktisk den funksjonen som inneheld nøkkelordet New i uttrykket Set som oppretta førekomsten.

              GlobalScope.LibraryName.ModuleName ' Objekt
              "LibraryName.ModuleName.FunctionName" ' Streng

### Eksempel:

              With GlobalScope.ScriptForge.SF_Services
                  .RegisterService("myService1", GlobalScope.myLibrary.myModule)
                  ' Referere til ein Basic standardmodul som implementerer tenesta som eit sett med metodar
                  .RegisterService("myService2", "myLibrary.someModule.someFunction")
                  ' Funksjonen skal returnera ein førekomst av ein Basic-objektklasse som implementerer tenesta
                  ' ...
              End With

## RegisterEventManager

Metoden returnerer Sann viss namneverdiparet gjeve som argument kunne registrerast.

### Syntaks:

          GlobalScope.ScriptForge.SF_Services.RegisterEventManager(ServiceName As String, ServiceReference As String) As Boolean

### Parametrar:

ServiceName: Namnet på tenesta som ein streng som ikkje skil mellom store og små bokstavar. Namnet må vera unikt.

ServiceReference: A string designating the function to execute to get an instance of the service. It is in fact the function containing the New keyword of a Set statement creating the instance.:

        "LibraryName.ModuleName.FunctionName" ' String

### Eksempel:

              With GlobalScope.ScriptForge.SF_Services
                  .RegisterEventManager("myEventMgr", "myLibrary.someModule.someFunction")
                  ' The function should return an instance of a Basic object class implementing the service
                  ' ...
              End With

Alle Basic-rutinane og -identifikatorane i ScriptForge som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje tenkt brukte i Basic-makroar.

Liknande emne

Set-uttrykket

GlobalScope-spesifikator