Innhold
Innholdsliste 🔎︎

# 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:

- Å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.

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

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.

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:

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

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)

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

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

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:

- 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.

### 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()

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

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:

- 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.

### 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:

- 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.

### 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

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.

Lignende emner

SFDatabaser.Database-tjeneste

SFDocuments.Dokument tjeneste

ScriptForge.UI tjeneste