SFDocuments.Form tjeneste

Tjenesten Form gir metoder og egenskaper for å administrere skjemaer i LibreOffice-dokumenter. Denne tjenesten støtter skjemaer i Base-, Calc- og Writer-dokumenter og lar deg:

tip

Tjenesten SFDocuments.Skjema er tilgjengelig fra LibreOffice 7.2 og utover.


Skjemaer brukes vanligvis i LibreOffice-dokumenter for å lage brukergrensesnitt koblet til relasjonsdatabaser. Derfor gir Skjema-tjenesten rask tilgang til den koblede databasen gjennom SFDatabases .Database-tjeneste.

tip

Tjenesten SFDocuments.Skjema er nært knyttet til SFDocuments.FormControl-tjeneste.


Definisjoner

FormDocument

Skjemaer lages vanligvis i Base- dokumenter, men de kan også legges til Writer- og Calc-dokumenter.

I Base, hvert skjema du oppretter ved å bruke Sett inn - Skjema-funksjonaliteten eller gjennom Skjemaveiviseren er faktisk et FormDocument som kan håndteres med Form-tjenesten. Base-dokumenter kan inneholde et ubegrenset antall skjemadokumenter.

Nedenfor er et eksempel som viser hierarkiet til alle elementene som er involvert i tilgang til skjemaer og underskjemaer i et basisdokument. Anta at du har en Base-fil kalt Employees.odb og inne i den har du opprettet et skjemadokument for å legge til nye ansatte i databasen. Skjemadokumentet inneholder et hovedskjema kalt EmployeeData som gir tilgang til en tabell. Det er også et underskjema WorksAtPlant som lar deg knytte den nye medarbeideren til en av anleggene i selskapet.


    Employees.odb (Base dokument)
     |
     |-- AddEmployee (FormDocument)
          |
          |-- EmployeeData (Hovedskjema)
               |
               |-- WorksAtPlant (SubForm)
  
note

Et FormDocument kan sees på som et sett med skjemaer som gir tilgang til datasett som databasetabeller og spørringer fra LibreOffice-dokumenter. Navnene på skjemaer og underskjemaer i et FormDocument kan nås ved å bruke Skjema Navigator.


Skjemaer og underskjemaer

Et skjemadokument er satt sammen av ett eller flere skjemaer som på sin side også kan inneholde et hvilket som helst antall underskjemaer. Et skjema er et abstrakt sett med kontroller som er koblet til en spesifisert datakilde, som kan være en databasetabell, en spørring eller en SQL SELECT-setning.

I Calc- og Writer-dokumenter kan hvert skjema kobles til datasett som ligger i forskjellige databaser. På den annen side, i Base-dokumenter er databasen i dokumentet felles for alle skjemaer.

tip

For å påkalle SFDocuments.Form-tjenesten, referer til metodene Forms(), FormDocuments() og OpenFormDocument() av SFDocuments.Dokument tjeneste


Tjenestepåkallelse

Før du bruker Skjema-tjenesten, må ScriptForge-biblioteket lastes eller importeres:

note

• Grunnleggende makroer krever å laste ScriptForge-biblioteket ved hjelp av følgende setning:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python-skript krever import fra scriptforge-modulen:
fra scriptforge import CreateScriptService


I Writer-dokumenter

Kodebiten nedenfor viser hvordan du får tilgang til skjemaet Form1 som er inne i en Writer-fil:


      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")
   
I Python

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

Skjemaer kan nås med navn eller indekser, som vist nedenfor:


     Set myForm = oDoc.Forms(0)
   
I Python

     my_form = doc.Forms(0)
   
warning

Hvis du prøver å få tilgang til et FormDocument som for øyeblikket er åpnet i Design Mode, vil et unntak bli skapt.


I Calc-dokumenter

Et skjema i en Calc-fil må ha et unikt navn i arket. Derfor krever Skjema-metoden to argumenter, det første angir arknavnet og det andre angir skjemanavnet.


      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")
   

Dette oppnås identisk med Python:


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

I Base dokumenter

Et FormDocument inne i et Base-dokument åpnes med navnet. Følgende eksempel åpner skjemadokumentet kalt thisFormDocument og får tilgang til skjemaet MainForm:


      Dim oDb As Object, myForm As Object
      Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
      ' Uttalelsen nedenfor er bare nødvendig hvis skjemaet ikke er åpnet ennå
      oDb.OpenFormDocument("thisFormDocument")
      Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
      ' Eller, alternativt, for å få tilgang til skjemaet ved hjelp av indeksen ...
      Set myForm = oDb.Forms("thisFormDocument", 0)
   
note

For å utføre noen handling på et skjema ved å bruke Skjema-tjenesten, må FormDocument ha blitt åpnet enten manuelt av brukeren eller programmatisk i et brukerskript. Sistnevnte kan gjøres ved å kalle OpenFormDocument-metoden til Base tjeneste.


For å få tilgang til et gitt underskjema av et skjema, bruk SubForms-metoden. Merk at i eksemplet nedenfor er mySubForm en ny forekomst av Skjema-tjenesten.


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

Tidligere eksempler oversettes i Python som:


     db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
     # Uttalelsen nedenfor er bare nødvendig hvis skjemaet ikke er åpnet ennå
     form_doc = db.OpenFormDocument('thisFormDocument')
     form = form_doc.Forms('thisFormDocument', 'MainForm')
     # Eller, alternativt, for å få tilgang til skjemaet ved hjelp av indeksen ...
     form = form_doc.Forms('thisFormDocument', 0)
     sub_form = form.SubForms('mySubForm')
   

I Skjema-hendelser

Slik aktiverer du Skjema-tjenesten når en skjemahendelse finner sted:


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

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

Tjenesten FormEvent brukes utelukkende til å lage forekomster av tjenestene SFDocuments.Form og SFDocuments.FormControl når en skjema- eller kontrollhendelse finner sted.


Det anbefales å frigjøre ressurser etter bruk av skjematjenesten.


     myForm.Dispose() ' Basic
   

     form.Dispose()  # Python
   

Denne operasjonen gjøres implisitt når et skjemadokument lukkes med metoden CloseFormDocument() beskrevet nedenfor.

Egenskaper

Navn

Skrivebeskyttet

Type

Beskrivelse

AllowDeletes

Nei

Boolean

Angir om skjemaet tillater å slette poster.

AllowInserts

Nei

Boolean

Angir om skjemaet tillater å legge til poster.

AllowUpdates

Nei

Boolean

Angir om skjemaet tillater å oppdatere poster.

BaseForm

Ja

String

Angir det hierarkiske navnet på basisskjemaet som inneholder det faktiske skjemaet.

Bookmark

Nei

Variant

Spesifiserer unikt gjeldende post for skjemaets underliggende tabell, spørring eller SQL-uttrykk.

CurrentRecord

Nei

Long

Identifiserer gjeldende posten i datasettet som vises i et skjema. Hvis radnummeret er positivt, flytter markøren til det gitte radnummeret til begynnelsen av resultatsettet. Antall rader starter på 1. Hvis det gitte radnummeret er negativt, flyttes markøren til en absolutt radposisjon i forhold til slutten av resultatsettet. Rad -1 refererer til den siste raden i resultatsettet.

Filter

Nei

String

Spesifiserer et undersett av poster som skal vises som en SQL WHERE-ledd uten WHERE nøkkelordet.

LinkChildFields

Ja

String

Angir hvordan poster i et underskjema er koblet til poster i det overordnede skjemaet.

LinkParentFields

Ja

String

Angir hvordan poster i et underskjema er koblet til poster i det overordnede skjemaet.

Name

Ja

String

Navnet på gjeldende skjema.

OrderBy

Nei

String

Spesifiserer i hvilken rekkefølge postene skal vises som en SQL ORDER BY-klausul uten ORDER BY-nøkkelordene.

Parent

Ja

Object

Forelderen til gjeldende skjema. Det kan enten være et SFDocuments.Form eller et SFDocuments.Document-objekt.

RecordSource

Nei

String

Angir kilden til dataene, som et tabellnavn, et spørringsnavn eller en SQL-setning.

XForm

Ja

UNO
objekt

UNO-objektet som representerer interaksjoner med skjemaet. Refererer til XForm og DataForm i API-dokumentasjonen for detaljert informasjon.


Hendelsesegenskaper

Egenskapene nedenfor returnerer eller setter URI-strenger som definerer skriptet som utløses av hendelsen.

Navn

Skrivebeskyttet

Basic IDE Beskrivelse

OnApproveCursorMove

Nei

Før postendring

OnApproveParameter

Nei

Fyllparametere

OnApproveReset

Nei

Før tilbakestilling

OnApproveRowChange

Nei

Før post handling

OnApproveSubmit

Nei

Før innsending

OnConfirmDelete

Nei

Bekreft sletting

OnCursorMoved

Nei

Etter posteendring

OnErrorOccurred

Nei

En feil oppsto

OnLoaded

Nei

Ved lasting

OnReloaded

Nei

Ved omlasting

OnReloading

Nei

Før omlasting

OnResetted

Nei

Etter tilbakestilling

OnRowChanged

Nei

Etter posthandling

OnUnloaded

Nei

Under avlasting

OnUnloading

Nei

Før avlasting


tip

For å lære mer om URI-strenger, se Scripting Framework URI-spesifikasjonen.


Liste over metoder for skjematjenesten

Activate
CloseFormDocument
Controls
GetDatabase

MoveFirst
MoveLast
MoveNext
MoveNew

MovePrevious
Requery
SubForms


Activate

Setter fokus på gjeldende Skjema-forekomst. Returnerer Sann hvis fokuseringen var vellykket.

Oppførselen til Aktiver-metoden avhenger av dokumenttypen der skjemaet er plassert:

Syntaks:

svc.Activate(): bool

Eksempel:

Følgende eksempel forutsetter at du ønsker å aktivere skjemaet FormA som ligger i Sheet1 i den åpne Calc-filen. Den får først tilgang til dokumentet ved å bruke Dokument-tjenesten og ThisComponent og deretter aktivere skjemaet.


     'Får tak i skjemaet som skal aktiveres
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

Set myForm = oDoc.Forms("Sheet1", "FormA")

'Aktiverer skjemaet myForm.Activate()
I Python

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

Denne komponenten gjelder for Calc- og Writer-dokumenter. For basisdokumenter bruk ThisDataBaseDocument.


CloseFormDocument

Lukker skjemadokumentet som inneholder den faktiske Skjema-forekomsten. Skjema-forekomsten er fjernet.

Syntaks:

svc.CloseFormDocument(): bool

Eksempel:


      myForm.CloseFormDocument() ' Basic
   
I Python

      form.CloseFormDocument()  # Python
   
note

Denne metoden lukker bare skjemadokumenter som ligger i basisdokumenter. Hvis skjemaet er lagret i et Writer- eller Calc-dokument, vil det ikke ha noen effekt å kalle CloseFormDocument.


Controls

Verdien som returneres av metoden Controls avhenger av argumentene som er oppgitt:

Syntaks:

svc.Controls(opt controlname: str): any

Parametre:

kontrollnavn : Et gyldig kontrollnavn som en streng som skiller mellom store og små bokstaver. Hvis fraværende, returneres listen over kontrollnavn som en nullbasert matrise.

Eksempel:


      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
   
I Python

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

GetDatabase

Returner en SFDatabases.Database-forekomst som gir tilgang til utførelse av SQL-kommandoer på databasen det gjeldende skjemaet er koblet til og/eller som er lagret i gjeldende Base-dokument.

Hvert skjema har sin egen databasetilkobling, bortsett fra i Base-dokumenter hvor alle deler samme tilkobling.

Syntaks:

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

Parametre:

bruker, passord: De valgfrie påloggingsparametrene (Standard = "").

Eksempel:


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

Skjemamarkøren er plassert på den første posten. Returnerer Sann hvis vellykket.

Syntaks:

svc.MoveFirst(): bool

Eksempel:


      myForm.MoveFirst() ' Basic
   
I Python

      form.MoveFirst()  # Python
   

MoveLast

Skjemamarkøren er plassert på den siste posten. Returnerer Sann hvis vellykket.

Syntaks:

svc.MoveLast(): bool

Eksempel:


      myForm.MoveLast() ' Basic
   
I Python

      form.MoveLast()  # Python
   

MoveNew

Skjemamarkøren er plassert på det nye postområdet. Returnerer Sann hvis vellykket.

Syntaks:

svc.MoveNew(): bool

Eksempel:


      myForm.MoveNew() ' Basic
   
I Python

      form.MoveNew()  # Python
   

MoveNext

Skjemamarkøren er plassert på neste post. Returnerer Sann hvis vellykket.

Syntaks:

svc.MoveNext(opt offset: int): bool

Parametre:

offset: Antall poster som skal gå fremover (standard = 1).

Eksempel:


      myForm.MoveNext() ' Basic
   
I Python

      form.MoveNext()  # Python
   

MovePrevious

Skjemamarkøren er plassert på forrige post. Returnerer Sann hvis vellykket.

Syntaks:

svc.MovePrevious(opt offset: int): bool

Parametre:

offset: Antall poster å gå bakover (standard = 1).

Eksempel:


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

Laster inn gjeldende data fra databasen på nytt og oppdaterer skjemaet. Markøren er plassert på den første posten. Returnerer Sann hvis vellykket.

Syntaks:

svc.Requery(): bool

Eksempel:


      myForm.Requery() ' Basic
   
I Python

      form.Requery()  # Python
   

Subforms

Verdien som returneres av metoden Subforms avhenger av argumentene som er oppgitt:

Syntaks:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Parametre:

underskjema: Et underskjema lagret i den gjeldende klasseforekomsten Skjema gitt av navnet eller indeksen.

Når dette argumentet er fraværende, returnerer metoden en liste over tilgjengelige underskjemaer som en nullbasert matrise. Hvis skjemaet har et enkelt underskjema, kan du sette underskjema = 0 for å få tilgang til det.

Eksempel:


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

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

Alle ScriptForge Grunnleggende rutiner eller identifikatorer som er prefikset med et understrekingstegn "_" er reservert for intern bruk. De er ikke ment å brukes i grunnleggende makroer eller Python-skript.


Supporter oss!