Wobsah

# Słužba SFDocuments.Form

Słužba Form metody a kajkosće skići, zo by formulary w dokumentach LibreOfficeDev rjadowała. Tuta słužba formulary w dokumentach Base, Calc a Writer podpěruje a zmóžnja:

- Formulary wočinić a aktiwizować.

- Po datowych sadźbach nawigěrować, kotrež so přez formular pokazuja.

- Přistup k wodźenskim elementam we formularje.

- Přistup k podformularam nadrjadowaneho formulara.

Słužba SFDocuments.Form je wot LibreOfficeDev 7.2 k dispoziciji.

Formulary so zwjetša w dokumentach LibreOfficeDev wužiwaja, zo bychu wužiwarske powjerchi wutworili, kotrež su z relacionalnymi datowymi bankami zwjazane. Tohodla słužba Form spěšny přistup k wotkazanej datowej bance ze słužbu SFDatabases-Database skići.

Słužba SFDocuments.Form je jara na słužbu SFDocuments.FormControl podobna.

## Definicije

### FormDocument

Formulary so zwjetša w dokumentach Base załožuja, ale dadźa so tež dokumentam Writer a Calc přidać.

W Base je kóždy formular, kotryž z pomocu funkcionalnosće Zasadźić – Formular abo formularoweho asistenta załožujeće, woprawdźe FormDocument, z kotrymž móžeće ze słužbu Form wobchadźeć. Dokumenty Base móža njewobmjezowanu ličbu formularowych dokumentow wobsahować.

Deleka je přikład, kotryž hierarchiju wšěch elementow, kotrež so při přistupje na formulary a podformulary w dokumenće Base zapřijimaja. Připušćmy, zo maće dataju Bases z mjenom Employees.odb a w njej sće formularowy dokument załožił, zo byšće datowej bance nowych sobudźěłaćerjow přidał. Formularowy dokument hłowny formular z mjenom EmployeeData wobsahuje, kotryž přistup k tabeli zmóžnja. Je tež podformular WorksAtPlant, kotryž wam zmóžnja, nowu sobudźěłaćerja jednomu ze zawodow předewzaća přirjadować.

        Employees.odb (dokument Base)
         |
         |-- AddEmployee (FormDocument)
              |
              |-- EmployeeData (hłowny formular)
                   |
                   |-- WorksAtPlant (SubForm)

FormDocument hodźi so jako sadźba formularow wobhladować, kotraž přistup k datowym wobstawkam kaž tabele a wotprašowanja datoweje banki w dokumentach LibreOfficeDev skići. K mjenam formularow a podformularow we formularowym dokumenće maće z pomocu formularoweho nawigatora přistup.

### Formulary a podformulary

formularowy dokument z jednoho formulara abo wjacorych formularow wobsteji, kotrež móža ze swojeje strony wjele podformularow wobsahować. Formular je abstraktna sadźba wodźenskich elementow, kotrež su z datym datowym žórłom zwjazane, kotrež móže tabela datoweje banki, wotprašowanje abo SQL-přikaz SELECT być.

W dokumentach Calc a Writer da so kóždy formular z datowymi wobstawkami w rozdźělnych datowych bankach zwjazać. Z druheje strony je datowa banka, kotraž je w dokumenće wobsahowana, w dokumentach Base wšěm formularam zhromadna.

Zo byšće słužbu SFDocuments.Form wuwołał, hlejće metody Form(), FormDocuments() a OpenFormDocument() słužby SFDocuments.Document

## Słužbowe wuwołanje

Před wužiwanjom słužby Form dyrbi so biblioteka ScriptForge začitać abo importować:

• Makra Basic sej wužaduja, zo so biblioteka ScriptForge z pomocu slědowaceho přikaza začituje:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Skripty Python sej import z modula scriptforge wužaduja:
from scriptforge import CreateScriptService

### W dokumentach Writer

Slědowaca kodowa šlipka pokazuje, kak móžeće přistup k formularej z mjenom Form1 dóstać, kotryž je w dataji Writer:

          Dim oDoc As Object, myForm As Object, ui as Object
          Set ui = CreateScriptService("UI")
          Set oDoc = ui.OpenDocument("/home/user/Documents/MyForm.odt")
          Set myForm = oDoc.Forms("Form1")

##### W Python

         from scriptforge import CreateScriptService
         ui = CreateScriptService('UI')
         doc = ui.OpenDocument('/home/user/Documents/MyForm.odt')
         my_form = doc.Forms('Form1')

formulary dadźa so po swojich mjenach abo swojich indeksach wuwołać, kaž so deleka pokazuje:

         Set myForm = oDoc.Forms(0)

##### W Python

         my_form = doc.Forms(0)

Jeli pospytujeće, přistup k FormDocument dóstał, kotryž je tuchwilu w naćiskowym modusu wočinjeny, so wuwzaće wuwabi.

### W dokumentach Calc

Formular w dataji Calc dyrbi jónkróćne mjeno w swojej tabeli měć. Tohodla sej metoda Forms dwajj argumentaj wužaduje, prěni mjeno tabele podawa a druhi mjeno formulara.

          Dim oDoc As Object, myForm As Object, ui as Object
          Set ui = CreateScriptService("UI")
          Set oDoc = ui.OpenDocument("/home/user/Documents/MyForms.ods")
          Set myForm = oDoc.Forms("Sheet1", "Form1")

To so na samsne wašnje z Python docpěwa:

         ui = CreateScriptService('UI')
         doc = ui.OpenDocument('/home/user/Documents/MyForms.ods')
         my_form = doc.Forms('Sheet1', 'Form1')

### W dokumentach Base

FormDocument w dokumenće Base so po swojim mjenje wuwołuje. Slědowacy přikład formularowy dokument z mjenom thisFormDocument wočinja a ma přistup k formularej MainForm:

          Dim oDb As Object, myForm As Object
          Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
          ' Slědowacy přikaz je jenož trěbna, jeli formular hišće wočinjeny njeje
          oDb.OpenFormDocument("thisFormDocument")
          Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
          ' Abo, jako alternatiwa, zo byšće přistup k formularej po jeho indeksu měł …
          Set myForm = oDb.Forms("thisFormDocument", 0)

Zo byšće akciju na formularje z pomocu słužby Form wuwjedł, dyrbi FormDocument pak manuelnje wot wužiwarja pak jako program we wužiwarskim skripće hižo wočinjeny być. Druhe da so činić, hdyž so metoda OpenFormDocument słužby Base wuwołuje.

Zo byšće přistup k podformularej formulara měł, wužiwajće metodu SubForms. Dźiwajće na to, zo w slědowacym přikładźe mySubForm je nowa instanca słužby Form.

         Dim mySubForm As Object
         Set mySubForm = myForm.SubForms("mySubForm")

Předchadne přikłady so do Python takle přełožuja:

         db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
         # Slědowacy přikaz je jenož trěbna, jeli formular hišće wočinjeny njeje
         form_doc = db.OpenFormDocument('thisFormDocument')
         form = form_doc.Forms('thisFormDocument', 'MainForm')
         # Abo, jako alternatiwa, zo byšće přistup k formularej po jeho indeksu měł …
         form = form_doc.Forms('thisFormDocument', 0)
         sub_form = form.SubForms('mySubForm')

### W formularowych podawkach

Zo byšće słužbu Form wuwołał, hdyž so formularowy podawk wotměwa:

          Sub OnEvent(ByRef poEvent As Object)
              Dim myForm As Object
              Set myForm = CreateScriptService("SFDocuments.FormEvent", poEvent)
              '(...)
          End sub

##### W Python

         def OnEvent(event: uno):
             form = CreateScriptService('SFDocuments.FormEvent', event)
             pass

Słužba FormEvent so jenož wužiwa, zo by instancy słužbow SFDocuments.Form a SFDocuments.FormControl wutworiła, hdyž so formular abo wodźenski element wotměwa.

Poruča so, resursy po wužiwanju słužby Form wuswobodźić.

         myForm.Dispose() ' Basic

         form.Dispose()  # Python

Tuta operacija so implicitnje wuwjedźe, hdyž so formularowy dokument z metodu CloseFormDocument() začinja, tak kaž so deleka wopisuje.

## Kajkosće

Mjeno | Přećiwo pisanju škitany | Typ | Wopisanje
--- | --- | --- | ---
AllowDeletes | Ně | Boolean | Podawa, hač formular zmóžnja, datowe sadźby zhašeć.
AllowInserts | Ně | Boolean | Podawa, hač formular zmóžnja, datowe sadźby přidać.
AllowUpdates | Ně | Boolean | Podawa, hač formular zmóžnja, datowe sadźby aktualizować.
BaseForm | Haj | String | Podawa hierarchiske mjeno formulara Base, kotryž poprawny formular wobsahuje.
Bookmark | Ně | Variant | Podawa jednozmyslnje aktualnu datowu sadźbu, kotraž so na tabelu, wotprašowanje abo přikaz SQL formulara zepěra.
CurrentRecord | Ně | Long | Identifikuje aktualnu datowu sadźbu w datowym wobstatku, kotryž so na formularje pokazuje. Jeli linkowe čisło je pozitiwne, so kursor do datoweho linkoweho čisła nastupajo spočatk wuslědkoweje sadźby. Ličenje linkow so z 1 započina. Jeli date linkowe čisło je negatiwne, so kursor k absolutnej linkowej poziciji nastupajo kónc wuslědkoweje sadźby. Linka -1 so na poslednju linku we wuslědkowej sadźbje poćahuje.
Filter | Ně | String | Podawa dźěl datowych sadźbow, kotryž ma jako klawsla SQL WHERE bjez klučoweho słowa WHERE pokazać.
LinkChildFields | Haj | String | Podawa, kak so datowe sadźby w podrjadowanym podformularje z datowymi sadźbami w jeho nadrjadowanym formularje zwjazuja.
LinkParentFields | Haj | String | Podawa, kak so datowe sadźby w podrjadowanym podformularje z datowymi sadźbami w jeho nadrjadowanym formularje zwjazuja.
Name | Haj | String | Mjeno aktualneho formulara.
OrderBy | Ně | String | Podawa, po kotrym porjedźe maja so datowe sadźby jako klawsla SQL ORDER BY bjez klučowych słowow ORDER BY pokazać.
Parent | Haj | Object | Nadrjadowany element aktualneho formulara. Móže pak objekt SFDocuments.Form pak objekt SFDocuments.Document być.
RecordSource | Ně | String | Podawa žórło datow jako mjeno tabele, wotprašowanja abo přikaza SQL.
XForm | Haj | Objekt UNO | Objekt UNO, kotryž interakcije z formularom reprezentuje. Hlejće XForm a DataForm w dokumentaciji API za podrobne informacije.

## Podawkowe kajkosće

Slědowace kajkosće znamješkowe rjećazki URI wróćeja abo stajeja, kotrež skript definuja, kotryž je so přez podawk wuwabił.

Mjeno | Přećiwo pisanju škitany | Wopisanje Basic IDE
--- | --- | ---
OnApproveCursorMove | Ně | Před změnu datoweje sadźby
OnApproveParameter | Ně | Parametry pjelnić
OnApproveReset | Ně | Před wróćostajenjom
OnApproveRowChange | Ně | Před akciju datoweje sadźby
OnApproveSubmit | Ně | Před wotpósłanjom
OnConfirmDelete | Ně | Zhašenje wobkrućić
OnCursorMoved | Ně | Po změnje datoweje sadźby
OnErrorOccurred | Ně | Zmylk je wustupił
OnLoaded | Ně | Při začitowanju
OnReloaded | Ně | Při wospjetowanym začitowanju
OnReloading | Ně | Před wospjetowanym začitowanjom
OnResetted | Ně | Po wróćostajenju
OnRowChanged | Ně | Po akciji datoweje sadźby
OnUnloaded | Ně | Při wuprózdnjenju
OnUnloading | Ně | Před wuprózdnjenjom

Zo byšće wjace wo znamješkowych rjećazkach URI zhonił, hlejće Scripting Framework URI Specification.

Lisćina metodow słužbje Form
Activate Controls GetDatabase MoveFirst | MoveLast MoveNext MoveNew | MovePrevious Requery SubForms

## Activate

Staja fokus na aktualnu instancu Form. Wróći True, jeli fokusěrowanje běše wuspěšne.

Zadźerženje metody Activate wot typa dokumenta wotwisuje, hdźež formular je:

- W dokumentach Writer: Staja fokus na dokument.

- W dokumentach Calc: Staja fokus na tabelu, ke kotrejž formular słuša.

- W dokumentach Base: Staja fokus na FormDocument, na kotryž so Form poćahuje.

### Syntaksa:

svc.Activate(): bool

### Přikład:

Slědowacy přikład wot toho wuchadźa, zo chceće formular z mjenom FormA aktiwizować, kotryž je w Sheet1 tuchwilu wočinjeneje dataje Calc. Dóstawa najprjedy přistup k dokumentej z pomocu słužby Document a ThisComponent a aktiwizuje potom formular.

         ' Dóstawa formular, kotryž so aktiwizuje
         Dim oDoc as Object, myForm as Object
         Set oDoc = CreateScriptService("Document", ThisComponent)
         Set myForm = oDoc.Forms("Sheet1", "FormA")
         ' Aktiwizuje formular
         myForm.Activate()

##### W Python

         doc = CreateScriptService('Document', XSCRIPTCONTEXT.getDocument())
         form = doc.Forms('Sheet1', 'FormA')
         form.Activate()

ThisComponent za dokumenty Calc a Writer płaći. Za dokumenty Base dyrbiće ThisDataBaseDocument wužiwać.

## CloseFormDocument

Tuta metoda je zestarjena, wužiwajće metodu ScriptForge.FormDocument.CloseDocument město toho.

Začinja formularowy dokument, kotryž poprawnu instancu Form wobsahuje. Instanca Form so zaćisni.

### Syntaksa:

svc.CloseFormDocument(): bool

### Přikład:

          myForm.CloseFormDocument() ' Basic

##### W Python

          form.CloseFormDocument()  # Python

## Controls

Hódnota, kotraž je so přez metodu Controls wróćiła, wot k dispoziciji stajenych argumentow wotwisuje:

- Jeli so metoda bjez argumentow wuwołuje, wróća lisćinu wodźenskich elementow, kotrež su we formularje wobsahowane. Dźiwajće na to, zo wróćena lisćina wodźenske elementy podformularow njewobsahuje.

- Jeli opcionalny argument ControlName je k dispoziciji, metoda klasowu instancu FormControl wróća, kotraž na podaty wodźenski element wotkazuje.

### Syntaksa:

svc.Controls(opt controlname: str): any

### Parametry:

controlname: Płaćiwe mjeno wodźenskeho elementa jako znamješkowy rjećazk, kotryž na wulkopisanje dźiwa. Jeli faluje, so lisćina mjeno wodźenskich elementow jako matriks z bazu nula wróći.

### Přikład:

          Dim myForm As Object, myList As Variant, myControl As Object
          Set myForm = myDoc.Forms("myForm")
          myList = myform.Controls()
          Set myControl = myform.Controls("myTextBox") ' SFDocuments.FormControl

##### W Python

          form = doc.Forms('myForm')
          form_names = form.Controls()
          form_control = form.Controls('myTextBox')  # SFDocuments.FormControl

## GetDatabase

Wróći instancu SFDatabases.Database, kotraž přistup k wuwjedźenju přikazow SQL w datowej bance dawa, z kotrejž aktualny formular je zwjazany a/abo kotraž je w aktualnym dokumenće Base składowana.

Kóždy formular ma swójski zwisk datoweje banki, nimo dokumenty w Base, hdźež wšě samsny zwisk dźěla.

### Syntaksa:

svc.GetDatabase(opt user: str, opt password: str): svc

### Parametry:

user, password: Opcionalne přizjewjenske parametry (standard = "").

### Přikład:

          Dim myDb As Object ' SFDatabases.Database
          Set myDb = oForm.GetDatabase()

##### W Python

          db = form.GetDatabase()  # SFDatabases.Database

## MoveFirst

Formularowy kursor so na prěnjej datowej sadźbje pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.MoveFirst(): bool

### Přikład:

          myForm.MoveFirst() ' Basic

##### W Python

          form.MoveFirst()  # Python

## MoveLast

Formularowy kursor so na poslednjej datowej sadźbje pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.MoveLast(): bool

### Přikład:

          myForm.MoveLast() ' Basic

##### W Python

          form.MoveLast()  # Python

## MoveNew

Formularowy kursor so na nowym wobłuku datoweje sadźby pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.MoveNew(): bool

### Přikład:

          myForm.MoveNew() ' Basic

##### W Python

          form.MoveNew()  # Python

## MoveNext

Formularowy kursor so na přichodnej datowej sadźbje pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.MoveNext(opt offset: int): bool

### Parametry:

offset: Ličba datowych sadźbow, wo kotrež so ma postupować (standard = 1).

### Přikład:

          myForm.MoveNext() ' Basic

##### W Python

          form.MoveNext()  # Python

## MovePrevious

Formularowy kursor so na prědnjej datowej sadźbje pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.MovePrevious(opt offset: int): bool

### Parametry:

offset: Ličba datowych sadźbow, wo kotrež ma wróćo hić (standard = 1).

### Přikład:

          myForm.MovePrevious() ' Basic

          form.MovePrevious()  # Python

## Requery

Začituje aktualny datowy formular z datoweje banki znowa a aktualizuje formular. Kursor so na prěnjej datowej sadźbje pozicioněruje. Wróći True, jeli je wuspěšny.

### Syntaksa:

svc.Requery(): bool

### Přikład:

          myForm.Requery() ' Basic

##### W Python

          form.Requery()  # Python

## Subforms

Hódnota, kotraž so přez metodu Subforms wróća, wot k dispoziciji stajenych argumentow wotwisuje:

- Jeli so metoda bjez argumentow wuwołuje, wróća lisćinu podformularow, kotrež su w aktualnym formularje abo w instancy podformulara wobsahowane.

- Jeli opcionalny argument subform je k dispoziciji, metoda nowu instancu SFDocuments.Form wróća, kotraž na podatym mjenje abo indeksu formulara/podformulara bazuje.

### Syntaksa:

svc.Subforms(): str[0..*]

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

### Parametry:

subform: Podformular, kotryž je w aktualnej klasowej instancy form składowany, po jeho mjenje abo indeksu podaty.

Hdyž tutón argument faluje, metoda lisćinu k dispoziciji stejacych podformularow jako na nuli bazowacu matriks wróća. Jeli formular ma jednotliwy podformular, móžeće subform = 0 stajić, zo byšće přistup k njemu dóstał.

### Přikład:

          Dim myForm As Object, myList As Variant, mySubform As Object
          myList = myform.Subforms()
          Set mySubform = myForm.Subforms("mySubform") ' SFDocuments.Form

##### W Python

          subform_names = form.Subforms()
         subform = form.Subforms('mySubform')  # SFDocuments.Form

Wšě rutiny Basic ScriptForge abo identifikatory, kotrež so z podsmužku „_“ započinaja, su za interne wužiwanje wuměnjene. Njejsu za to myslene, so w makrach Basic abo skriptach Python wužiwać.

Podobne temy

Słužba SFDatabases.Database

Słužba SFDocuments.Document

ScriptForge.UI service

Prošu podpěrajće nas!