Obsah
Rejstřík 🔎︎

# Služba ScriptForge.Services

Knihovna ScriptForge je založena na rozšířitelné sadě takzvaných „služeb“.
Tato sada je implementována v podobě těchto kategorií knihoven Basicu nebo modulů Pythonu:

1. standardní knihovna ScriptForge instalovaná v rámci LibreOffice

2. řada „přidružených“ knihoven rovněž instalovaných v rámci LibreOffice

3. rozšíření LibreOffice od jakéhokoliv uživatele/přispěvatele, který chce používat stejné prostředí jako tyto knihovny

Služba je soubor vlastností a metod, které službu implementují.

Pro autora uživatelského skriptu může být službou buď modul v knihovně, nebo instance modulu třídy.

Správce událostí je skript obsažený v knihovně, který spojuje událost spouštějící marko - obvykle definovanou v nabídce Nástroje - Přizpůsobit s dotčenou instancí služby.

Pokud například několik dokumentů spouští při načítání totéž makro, může být užitečné znát, který dokument v daném případě makro spustil. To je úloha správce událostí.

Následující metody tvoří jádro prostředí ScriptForge:

- RegisterScriptServices

  Volána interně knihovnou ScriptForge, aby zaregistrovala pro knihovnu seznam služeb, které implementuje.
  Každá knihovna, která je ke knihovně ScriptForge připojena nebo která ji rozšiřuje, musí implementovat vlastní metodu RegisterScriptServices.

- RegisterService

  Volána - tolikrát, kolik existuje služeb k zaregistrování v knihovně - metodou RegisterScriptServices.

- RegisterEventManager

  Volána za účelem zaregistrování správce událostí knihovny, a to metodou RegisterScriptServices.

- CreateScriptService

  Volána uživatelskými skripty za účelem získání objektu, který poskytuje přístup ke službě zadané jako argument.
  Metodou CreateScriptService by měly být vytvářeny instance všech služeb.

Konvencí je, že služby String, Array a Exception mohou být volány přímo, resp. jako SF_String, SF_Array a SF_Exception.

Seznam metod služby Services
CreateScriptService | RegisterScriptServices RegisterService | RegisterEventManager

## CreateScriptService

Získá přístup k některé službě knihovny pro účely uživatelského skriptu.
Návratovou hodnotou je objekt Basicu nebo objekt Nothing, pokud nastane chyba.

Službu je možné chápat jako:

- sadu metod sdružených ve standardním modulu Basicu,

- nebo jako sadu metod a vlastností sdružených v modulu třídy Basicu.

### Syntaxe:

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

### Parametry:

Service: Název služby ve formátu "knihovna.služba".
Knihovna je knihovna jazyka Basic, která musí existovat v oblasti GlobalScope. Výchozí hodnotou je "ScriptForge".
Služba je některá ze služeb zaregistrovaných knihovnou prostřednictvím metody RegisterScriptServices().

arg0, ...: Seznam argumentů vyžadovaných vytvářenou službou.
Pokud první argument odkazuje na správce událostí, poté je arg0 povinný a musí se jednat o objekt UNO představující událost, která byla předána jako argument uživatelskému makru.

### Příklad:

            GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
            ' Stačí provést jednou
            Dim svc As Object
            Set svc = CreateScriptService("Array")
            ' Odkazuje na službu "ScriptForgeArray" či SF_Array
            Set svc = CreateScriptService("ScriptForge.Dictionary")
            ' Vrátí novou, prázdnou instanci třídy slovník; část "ScriptForge." je nepovinná
            Set svc = CreateScriptService("SFDocuments.Calc")
            ' Odkazuje na službu Calc, implementovanou v připojené knihovně SFDocuments
            Set svc = CreateScriptService("Timer", True)
            ' Vrátí instanci třídy Timer, která se okamžitě spustí
            Set svc = CreateScriptService("SFDocuments.DocumentEvent", oEvent)
            ' Odkazuje na službu DocumentEvent, implementovanou v připojené knihovně SFDocuments
            ' Vrátí instanci třídy dokument, která událost spustila

## RegisterScriptServices

Metoda RegisterScriptServices() začlení knihovnu do prostředí ScriptForge, a to pomocí volání metod RegisterService() and RegisterEventManager().
Každá knihovny příslušná k tomuto prostředí musí implementovat vlastní verzi této metody.

Na rozdíl od modulu třídy je nutné, aby byla tato metoda uložena v modulu Basicu standard.

Služba je:

- Standardní modul Basicu předaný jako objekt Basicu.

- Nebo řetězec označující funkci, která se má spustit, aby se získala instance služby. Jedná se o funkci obsahující klíčové slovo New pro příkaz Set, který instanci vytváří.

              GlobalScope.LibraryName.ModuleName ' Objekt
              "LibraryName.ModuleName.FunctionName" ' Řetězec

### Příklad:

          Public Sub RegisterScriptServices()
          ' To be stored in library = myLibrary
              With GlobalScope.ScriptForge.SF_Services
                  .RegisterService("myService1", GlobalScope.myLibrary.myModule)
                  ' Odkazuje na standardní modul Basicu implementující službu jako sadu metod
                  .RegisterService("myService2", "myLibrary.someModule.someFunction")
                  ' Funkce by měla vrátit instanci třídy s objektem Basicu, která implementuje službu
                  ' ...
              End With
          End Sub

Pokud uživatelský skript obsahuje například tento příkaz:

    Set myServ = CreateScriptService("myLibrary.myService1")

Knihovna ScriptForge provede tyto kroky:

1. Je-li to nutné, načte knihovnu myLibrary.

2. Zavolá metodu RegisterScriptServices, kterou se načte do paměti seznam služeb myLibrary.

3. Inicializuje proměnnou myServ danou službou.

## RegisterService

Metoda vrátí True, pokud může být dvojice název a hodnota, zadaná jako argument, úspěšně zaregistrována.

### Syntaxe:

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

### Parametry:

ServiceName: Název služby jako řetězec, u něhož se nerozlišuje velikost písmen. Musí být jedinečný.

ServiceReference: Odkaz na službu je:

- Standardní modul Basicu předaný jako objekt Basicu.

- Nebo řetězec označující funkci, která se má spustit, aby se získala instance služby. Jedná se o funkci obsahující klíčové slovo New pro příkaz Set, který instanci vytváří.

              GlobalScope.LibraryName.ModuleName ' Objekt
              "LibraryName.ModuleName.FunctionName" ' Řetězec

### Příklad:

              With GlobalScope.ScriptForge.SF_Services
                  .RegisterService("myService1", GlobalScope.myLibrary.myModule)
                  ' Odkazuje na standardní modul Basicu implementující službu jako sadu metod
                  .RegisterService("myService2", "myLibrary.someModule.someFunction")
                  ' Funkce by měla vrátit instanci třídy s objektem Basicu, která implementuje službu
                  ' ...
              End With

## RegisterEventManager

Metoda vrátí True, pokud může být dvojice název a hodnota, zadaná jako argument, úspěšně zaregistrována.

### Syntaxe:

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

### Parametry:

ServiceName: Název služby jako řetězec, u něhož se nerozlišuje velikost písmen. Musí být jedinečný.

ServiceReference: Nebo řetězec označující funkci, která se má spustit, aby se získala instance služby. Jedná se o funkci obsahující klíčové slovo New pro příkaz Set, který instanci vytváří.

        "LibraryName.ModuleName.FunctionName" ' String

### Příklad:

              With GlobalScope.ScriptForge.SF_Services
                  .RegisterEventManager("myEventMgr", "myLibrary.someModule.someFunction")
                  ' Funkce by měla vrátit instanci třídy s objektem Basicu, která implementuje službu
                  ' ...
              End With

Všechny procedury nebo identifikátory knihovny ScriptForge, které jsou uvozeny podtržítkem "_", jsou určeny pro interní použití. Není zamýšleno je používat v makrech Basicu.

Související témata

Příkaz Set

Specifikátor GlobalScope