LibreOffice 24.2 Hjelp
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:
Åpne og aktiver skjemaer.
Naviger gjennom poster som vises i skjemaet.
Få tilgang til kontrollene inne i skjemaet.
Få tilgang til underskjemaer til et overordnet skjema.
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.
Tjenesten SFDocuments.Skjema er nært knyttet til SFDocuments.FormControl-tjeneste.
Skjemaer lages vanligvis i Base- dokumenter, men de kan også legges til Writer- og Calc-dokumenter.
I Base, hvert skjema du oppretter ved å bruke -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)
  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.
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.
For å påkalle SFDocuments.Form-tjenesten, referer til metodene Forms(), FormDocuments() og OpenFormDocument() av SFDocuments.Dokument tjeneste
Før du bruker Skjema-tjenesten, må ScriptForge-biblioteket lastes eller importeres:
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")
   
     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)
   
     my_form = doc.Forms(0)
   Hvis du prøver å få tilgang til et FormDocument som for øyeblikket er åpnet i Design Mode, vil et unntak bli skapt.
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')
   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)
   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')
   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
   
     def OnEvent(event: uno):
         form = CreateScriptService('SFDocuments.FormEvent', event)
         pass
   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.
| 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 | UNO-objektet som representerer interaksjoner med skjemaet. Refererer til XForm og DataForm i API-dokumentasjonen for detaljert informasjon. | 
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 | 
For å lære mer om URI-strenger, se Scripting Framework URI-spesifikasjonen.
| Liste over metoder for skjematjenesten | ||
|---|---|---|
Setter fokus på gjeldende Skjema-forekomst. Returnerer Sann hvis fokuseringen var vellykket.
Oppførselen til Aktiver-metoden avhenger av dokumenttypen der skjemaet er plassert:
I Writer-dokumenter: Setter fokus på det dokumentet.
I Calc-dokumenter: Setter fokus på arket som skjemaet tilhører.
I Base-dokumenter: Setter fokus på FormDocumentet Skjemaet refererer til.
svc.Activate(): bool
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()
   
     doc = CreateScriptService('Document', XSCRIPTCONTEXT.getDocument())
     form = doc.Forms('Sheet1', 'FormA')
     form.Activate()
   Denne komponenten gjelder for Calc- og Writer-dokumenter. For basisdokumenter bruk ThisDataBaseDocument.
Lukker skjemadokumentet som inneholder den faktiske Skjema-forekomsten. Skjema-forekomsten er fjernet.
svc.CloseFormDocument(): bool
      myForm.CloseFormDocument() ' Basic
   
      form.CloseFormDocument()  # Python
   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.
Verdien som returneres av metoden Controls avhenger av argumentene som er oppgitt:
Hvis metoden kalles uten argumenter, returnerer den listen over kontrollene i skjemaet. Vær oppmerksom på at den returnerte listen ikke inneholder noen underskjemakontroller.
Hvis det valgfrie argumentet Kontrollnavn er oppgitt, returnerer metoden en klasseforekomst FormControl som refererer til den angitte kontrollen.
svc.Controls(opt controlname: str): any
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.
      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
   
      form = doc.Forms('myForm')
      form_names = form.Controls()
      form_control = form.Controls('myTextBox')  # SFDocuments.FormControl
   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.
svc.GetDatabase(opt user: str, opt password: str): svc
bruker, passord: De valgfrie påloggingsparametrene (Standard = "").
      Dim myDb As Object ' SFDatabases.Database
      Set myDb = oForm.GetDatabase()
   
      db = form.GetDatabase()  # SFDatabases.Database
   Skjemamarkøren er plassert på den første posten. Returnerer Sann hvis vellykket.
svc.MoveFirst(): bool
      myForm.MoveFirst() ' Basic
   
      form.MoveFirst()  # Python
   Skjemamarkøren er plassert på den siste posten. Returnerer Sann hvis vellykket.
svc.MoveLast(): bool
      myForm.MoveLast() ' Basic
   
      form.MoveLast()  # Python
   Skjemamarkøren er plassert på det nye postområdet. Returnerer Sann hvis vellykket.
svc.MoveNew(): bool
      myForm.MoveNew() ' Basic
   
      form.MoveNew()  # Python
   Skjemamarkøren er plassert på neste post. Returnerer Sann hvis vellykket.
svc.MoveNext(opt offset: int): bool
offset: Antall poster som skal gå fremover (standard = 1).
      myForm.MoveNext() ' Basic
   
      form.MoveNext()  # Python
   Skjemamarkøren er plassert på forrige post. Returnerer Sann hvis vellykket.
svc.MovePrevious(opt offset: int): bool
offset: Antall poster å gå bakover (standard = 1).
      myForm.MovePrevious() ' Basic
   
      form.MovePrevious()  # Python
   Laster inn gjeldende data fra databasen på nytt og oppdaterer skjemaet. Markøren er plassert på den første posten. Returnerer Sann hvis vellykket.
svc.Requery(): bool
      myForm.Requery() ' Basic
   
      form.Requery()  # Python
   Verdien som returneres av metoden Subforms avhenger av argumentene som er oppgitt:
Hvis metoden kalles uten noen argumenter, returnerer den listen over underskjemaer i gjeldende skjema eller underskjemaforekomst.
Hvis det valgfrie subform-argumentet er oppgitt, returnerer metoden et nytt SFDocuments.Skjema-forekomst basert på det angitte skjemaet/underskjemanavnet eller indeksen.
svc.Subforms(): str[0..*]
svc.Subforms(subform: str): svc
svc.Subforms(subform: int): svc
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.
      Dim myForm As Object, myList As Variant, mySubform As Object
      myList = myform.Subforms()
      Set mySubform = myForm.Subforms("mySubform") ' SFDocuments.Form
   
      subform_names = form.Subforms()
     subform = form.Subforms('mySubform')  # SFDocuments.Form