Tenesta SFDocuments. Form

Tenesta Form har metodar og eigenskapar for Ă„ administrera skjema i LibreOffice-dokument. Denne tenesta har stĂžtte for skjema i Base-, Calc- og Writer-dokument og tillet:

tip

Tenesta SFDocuments.Form er tilgjengeleg frÄ LibreOffice 7.2 og seinare.


Skjema vert til vanleg brukte i LibreOffice-dokument for Ă„ laga brukargrensesnitt kopla til relasjonsdatabasar. Difor gjev tenesta Form rask tilgang til den tilkopla databasen gjennom tenesta SFDatabases .Database.

tip

Tenesta SFDocuments.Form er nĂŠrt knytt til tenesta SFDocuments.FormControl.


Definisjonar

FormDocument

Skjema vert til vanleg laga i Base-dokument, men de kan ogsÄ leggjast til i Writer- og Calc-dokument.

I Base er kvart skjema som er laga med funksjonen Set inn → Skjema
 eller med skjemavegvisaren eit FormDocument som kan handsamast ved hjelp av tenesta Form. Det er inga grense for kor mange skjemadokument grunndokumenta kan innehalda.

Nedanfor er eit eksempel som viser hierarkiet til alle elementa som er involverte i tilgang til skjema og underskjema i eit basisdokument. GÄ ut frÄ at du har ei basisfil med namnet Employees.odb der du har laga eit skjemadokument for Ä leggja til nye tilsette i databasen. Skjemadokumentet inneheld eit hovudskjema kalla EmployeeData som gir tilgang til ein tabell. Det finst ogsÄ eit underskjema WorksAtPlant som du kan bruka til Ä kopla den nye medarbeidaren til ei av avdelingane i selskapet.


    Employees.odb (Tilsette) (Base-dokument)
     |
     |-- AddEmployee (FormDocument)
          |
          |-- EmployeeData (TilsetteData) (Hovudskjema)
               |
               |-- WorksAtPlant (SubForm)
  
note

Eit FormDocument (skjemadokument) kan sjÄast pÄ som eit sett med skjema som gjev tilgang til datasett som for eksempel database-tabellar og -spÞrjinghar i LibreOffice- dokument. Du har tilgang til namna pÄ skjema og underskjema i eit skjemadokument med Skjemanavigatoren.


Skjema og underskjema

Eit skjemadokument er sett saman ev eitt eller fleire skjema, som igjen kan innehalda eit vilkÄrleg tal pÄ underskjema. Eit skjema er eit abstrakt sett av kontrollelement som er knytte til ei bestemt datakjelde, som kan vera ei bestemt datakjelde, som igjen kan vera ein databasetabell, ei spÞrjing eller eit SQL SELECT-uttrykk.

I Calc- og Writer-dokument kan kvart skjema koplast til datasett plassert i ulike databasar. PĂ„ den andre sida, kan databasar i Base-dokument vera felles for alle skjemaa.

tip

For Ă„ kalla opp tenesta SFDocuments.Form referererd dutil metodane Forms(), FormDocuments() og OpenFormDocument() i tenesta SFDocuments.Document


Oppkall av tenester

FÞr du brukar tenesta Form, mÄ ScriptForge-biblioteket lastast inn eller importerast:

note

‱ Grunnleggjande makroar krev innlasting av biblioteket ScriptForge ved hjelp av denne setninga:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

‱ Python-skript krev import frĂ„ scriptforge-modulen:
from scriptforge import CreateScriptService


I Writer-dokument

Kodesnutten nedanfor viser korleis du fÄr tilgang til skjemaet med namnet Form1 i ei 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')
   

Du kan fÄ tilgang til skjema etter namnet deira eller med indeksar slik som vist nedanfor:


     Set myForm = oDoc.Forms(0)
   
I Python

     my_form = doc.Forms(0)
   
warning

Viss du prÞver Ä fÄ tilgang til eit FormDocument som er opna i Utformingsmodus, vert det sett opp eit unntak.


I Calc-dokument

Eit skjema i ei Calc-fil mÄ ha eit unikt namn i tabellen. Difor krev metoden Forms to argument, det fÞrste som viser tabellnamnet og det andre som viser skjemanamnet.


      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Är du pÄ same mÄte med Python:


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

I Base-dokument

Eit FormDocument i eit Base-dokument vert opna med namnet. Eksempelet nedanfor opnar skjemadokumentet kalla thisFormDocument og fÄr tilgang til skjemaet MainForm


      Dim oDb As Object, myForm As Object
      Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
      ' Uttrykket nedanfor er nĂždvendig berre viss skjemaet ikkje er opna.
      oDb.OpenFormDocument("thisFormDocument")
      Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
      ' Eller alternativt for Ä fÄ tilgang til skjemaet med indeksen for det 

      Set myForm = oDb.Forms("thisFormDocument", 0)
   
note

For Ä utfÞra ei handling pÄ eit skjema ved Ä bruka tenesta Form, mÄ FormDocument vera opna anten manuelt av brukaren eller av programmet i eit brukarskript. Det siste kan ein gjera ved Ä kalla opp metoden OpenFormDocument i tenesta Base.


For Ä fÄ tilgang til eit gjeve underskjema brukar du metoden SubForms. Merk at i eksempelet nedanfor er mySubForm ein ny fÞrekomst av tenesta Form.


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

Dei tidlegare eksempla vert omsette i Python som:


     db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
     # Uttrykket nedanfor er nĂždvendig berre viss skjemaet ikkje er opna.
     form_doc = db.OpenFormDocument('thisFormDocument')
     form = form_doc.Forms('thisFormDocument', 'MainForm')
     #  eller alternativt for Ä fÄ tilgang til skjemaet med indeksen for det 

     form = form_doc.Forms('thisFormDocument', 0)
     sub_form = form.SubForms('mySubForm')
   

I skjemahendingar

For Ä kalla opp tenesta Form nÄr ei hending finn stad:


      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

Tenesta FormEvent vert brukt berre til Ä laga fÞrekomstar av tenestene SFDocuments.Form og SFDocuments.FormControl nÄr nÄr det dukkar opp ei skjema- eller kontrollhending.


Det vert tilrÄdd Ä frigjera resursar etter Ä ha brukt tenesta «Form».


     myForm.Dispose() ' Basic
   

     form.Dispose()  # Python
   

Denne handlinga vert utfÞrt utan vilkÄr nÄr eit skjemadokument vert lukka med metoden CloseFormDocument() forklart nedanfor.

Eigenskapar

Namn

Skriveverna

Type

Beskriving

AllowDeletes

Nei

Boolean

Spesifiserer om skjemaet tillet at postar vert sletta.

AllowInserts

Nei

Boolean

Spesifiserer om skjemaet tillet at det vert lagt til postar.

AllowUpdates

Nei

Boolean

Spesifiserer om skjemaet tillet at postar vert oppdaterte.

BaseForm

Ja

String

Spesifiserer det hierarkiske namnet pÄ Base-formularet som inneheld det aktuelle skjemaet.

Bookmark

Nei

Variant

Spesifiserer eintydig den aktuelle posten i skjemaet sin underliggjande tabell, spĂžrjing eller SQL-uttrykk.

CurrentRecord

Nei

Long

Identifiserer den gjeldande posten i datasettet som vert vist i eit skjema. Viss radnummeret er positivt,vert markÞren flytt til det gjevne radnummeret i forhold til byrjinga av resultatsettet. Talet pÄ rader byrjar pÄ 1. Viss det gjevne radnummeret er negativt, vert markÞren flytt til ei absolutt radplassering i forhold til slutten av resultatsettet. Rad -1 refererer til den siste rada i resultatsettet.

Filter

Nei

String

Spesifiserer ei delmengd av postar som skal visast som ein SQL WHERE-setning utan nĂžkkelordet WHERE.

LinkChildFields

Ja

String

Set korleis postar i eit underliggjande skjema er lenkja til eit overliggjande skjema.

LinkParentFields

Ja

String

Set korleis postar i eit underliggjande skjema er lenkja til eit overliggjande skjema.

Name

Ja

String

Namnet pÄ det gjeldande skjemaet.

OrderBy

Nei

String

Spesifiserer kva rekkjefĂžlgje postar skal visast som ein SQL ORDER BY-setning utan nĂžkkelordet ORDER BY.

Parent

Ja

Object

Opphavet til det gjeldande skjemaet. Det kan vera eit av objekta SFDocuments.Form eller SFDocuments.Document

RecordSource

Nei

String

Gjev datakjelda som eit tabellnamn, eit spĂžrjingsnamn eller eit SQL-yttrykk.

XForm

Ja

UNO
objekt

UNO-objektet som representerer samhandlingar med skjemaet. Du finn detaljert informasjon i API-dokumentasjonen XForm og DataFoirm.


Hendingseigenskapar

Eigenskapane nedanfor returnerer eller set URI-strengar som definerer eit skript som vert opna av hendinga.

Namn

Skriveverna

Basic IDE-beskriving

OnApproveCursorMove

Nei

FĂžr endring av post

OnApproveParameter

Nei

Fyllparameterar

OnApproveReset

Nei

FĂžr nullstilling

OnApproveRowChange

Nei

FĂžr posthandlinga

OnApproveSubmit

Nei

FĂžr sendinga

OnConfirmDelete

Nei

Stadfest sletting

OnCursorMoved

Nei

Etter endring av post

OnErrorOccurred

Nei

Det oppstod ein feil

OnLoaded

Nei

Ved lasting

OnReloaded

Nei

Ved lasting pÄ nytt

OnReloading

Nei

FÞr lasting pÄ nytt

OnResetted

Nei

Etter tilbakestilling

OnRowChanged

Nei

Etter posthandling

OnUnloaded

Nei

Ved utlasting

OnUnloading

Nei

FĂžr utlasting


tip

Du kan lĂŠra meir om URI-strengar i Scripting Framework URI Specification.


Liste over metodar i tenesta Form

Activate
CloseFormDocument
Controls
GetDatabase

MoveFirst
MoveLast
MoveNext
MoveNew

MovePrevious
Requery
SubForms


Activate

Set fokus pÄ det gjeldande fÞrekomsten av Form. Returner Sann viss fokuseringa lukkast.

VerkemÄten til metoden Activate er avhengig av kva type dokument skjemaet er i:

Syntaks:

svc.Activate(): bool

Eksempel:

Det fÞlgjande eksempelet gÄr ut frÄ at du Þnskjer Ä aktiverer skjemaet FormA (skjemaA) pÄ Ark1 i den gjeldande opne Calc-fila. Det fÄr fÞrst tilgang til dokumentet med tenesta Document og ThisComponent og aktiverer deretter skjemaet.


     ' Mottek skjemaet som vert aktivert
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

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

' Aktivere skjemaet myForm.Activate()
I Python

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

ThisComponent gjeld for Calc- og Writer-dokument. For Base-dokument, bruk ThisDataBaseDocument.


CloseFormDocument

Lukker det skjemadokumentet som inneheld den aktuelle fĂžrekomsten av Form. FĂžrekomsten av Form vert sletta.

Syntaks:

svc.CloseFormDocument(): bool

Eksempel:


      myForm.CloseFormDocument() ' Basic
   
I Python

      form.CloseFormDocument()  # Python
   
note

Denne metoden lukkar berre skjemadokument i Base-dokument. Viss skjemaet er lagra i eit Writer- eller Calc-dokument, er oppkall av CloseFormDocument utan verknad.


Controls

Verdien som vert returnert av metoden Controls er avhengig av dei gjevne argumenta:

Syntaks:

svc.Controls(opt controlname: str): any

Parametrar:

controlname: Eit gyldig kontrollnamn som ein streng (som skil mellom smÄ og store bokstavar). Viss denne manglar vert lista over kontrollnamn returnert som ei 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

Returnerer ein fÞrekomst av SFDatabases.Database som gjev tilgang til Ä utfÞra SQL-kommandoar pÄ den databasen det gjeldande skjemaet er knytt til og/eller lagra i.

Kvart skjema har si eiga databasetilkopling, bortsett frÄ i Base-dokument der alle deler same tilkoplinga.

Syntaks:

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

Parametrar:

user, password: Dei valfrie parameterane for pÄlogging (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 viss det lukkast.

Syntaks:

svc.MoveFirst(): bool

Eksempel:


      myForm.MoveFirst() ' Basic
   
I Python

      form.MoveFirst()  # Python
   

MoveLast

SkjemamarkÞren er plassert pÄ den siste posten. Returnerer Sann viss det lukkast.

Syntaks:

svc.MoveLast(): bool

Eksempel:


      myForm.MoveLast() ' Basic
   
I Python

      form.MoveLast()  # Python
   

MoveNew

SkjemamarkÞren er plassert pÄ omrÄdet for ny post. Returnerer Sann viss det lukkast.

Syntaks:

svc.MoveNew(): bool

Eksempel:


      myForm.MoveNew() ' Basic
   
I Python

      form.MoveNew()  # Python
   

MoveNext

SkjemamarkÞren er plassert pÄ den neste posten. Returnerer Sann viss det lukkast.

Syntaks:

svc.MoveNext(opt offset: int): bool

Parametrar:

offset: Talet pÄ postar som du skal gÄ framover (standard = 1).

Eksempel:


      myForm.MoveNext() ' Basic
   
I Python

      form.MoveNext()  # Python
   

MovePrevious

SkjemamarkÞren er plassert pÄ den fÞrre posten. Returnerer Sann viss det lukkast.

Syntaks:

svc.MovePrevious(opt offset: int): bool

Parametrar:

offset: Talet pÄ postar som du skal gÄ bakover (standard = 1).

Eksempel:


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

Lastar inn gjeldande data frÄ databasen pÄ nytt og oppdaterer skjemaet. MarkÞren er plassert pÄ den fÞrste posten. Returnerer Sann viss det lukkast.

Syntaks:

svc.Requery(): bool

Eksempel:


      myForm.Requery() ' Basic
   
I Python

      form.Requery()  # Python
   

Subforms

Verdien som vert returnert av metoden Subforms avhenger av dei gjevne argumenta:

Syntaks:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Parametrar:

subform: Eit underskjema lagra i den gjeldande klassefĂžrekomsten Form gjeve ved namnet eller indeksen.

NÄr dette argumentet manglar, returnerer metoden ei liste over tilgjengelege underskjema som ei null-basert matrise. Viss skjemaet har eitt enkelt underskjema, kan du setja subform = 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 Basic-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.