Dienst SFDocuments.Form

Der Dienst Form stellt Methoden und Eigenschaften bereit, um Formulare in LibreOffice-Dokumenten zu verwalten. Dieser Dienst unterst√ľtzt Formulare in Base-, Calc- und Writer-Dokumenten und erm√∂glicht Folgendes:

tip

Der Dienst SFDocuments.Form ist ab LibreOffice 7.2 verf√ľgbar.


Formulare werden normalerweise in LibreOffice-Dokumenten verwendet, um Benutzerschnittstellen zu erstellen, die mit relationalen Datenbanken verbunden sind. Daher bietet der Dienst Form schnellen Zugriff auf die verkn√ľpfte Datenbank √ľber den Dienst SFDatabases.Database.

tip

Der Dienst SFDocuments.Form ist eng verwandt mit dem Dienst SFDocuments.FormControl.


Definitionen

FormDocument

Formulare werden normalerweise in Base-Dokumenten erstellt, k√∂nnen aber auch zu Writer- und Calc-Dokumenten hinzugef√ľgt werden.

In Base ist jedes Formular, das mit der Funktion Einf√ľgen ‚Äď Formular‚Ķ oder mit dem Formularassistenten erstellt wird, eigentlich ein FormDocument, das mit dem Dienst Form verarbeitet werden kann. Base-Dokumente k√∂nnen eine unbegrenzte Anzahl von Formulardokumenten enthalten.

Unten ist ein Beispiel, das die Hierarchie aller Elemente zeigt, die am Zugriff auf Formulare und Unterformulare in einem Basisdokument beteiligt sind. Angenommen, Sie haben eine Base-Datei mit dem Namen Employees.odb und darin haben Sie ein Formulardokument erstellt, um neue Mitarbeiter zur Datenbank hinzuzuf√ľgen. Das Formulardokument enth√§lt ein Hauptformular namens EmployeeData, das Zugriff auf eine Tabelle gew√§hrt. Es gibt auch ein Unterformular WorksAtPlant, mit dem Sie den neuen Mitarbeiter einem der Werke des Unternehmens zuordnen k√∂nnen.


    Employees.odb (Base-Dokument)
     |
     |-- AddEmployee (FormDocument)
          |
          |-- EmployeeData (Hauptformular)
               |
               |-- WorksAtPlant (SubForm)
  
note

Ein FormDocument kann als eine Reihe von Formularen betrachtet werden, die Zugriff auf Datensätze wie Datenbanktabellen und Abfragen aus LibreOffice-Dokumenten bieten. Auf die Namen von Formularen und Unterformularen in einem Formulardokument kann mit dem Formularnavigator zugegriffen werden.


Formulare und Unterformulare

Ein Formulardokument besteht aus einem oder mehreren Formularen, die wiederum beliebig viele Unterformulare enthalten k√∂nnen. Ein Formular ist ein abstrakter Satz von Steuerelementen, die mit einer bestimmten Datenquelle verkn√ľpft sind, die eine Datenbanktabelle, eine Abfrage oder eine SQL-Anweisung SELECT sein kann.

In Calc- und Writer-Dokumenten kann jedes Formular mit Datens√§tzen verkn√ľpft werden, die sich in verschiedenen Datenbanken befinden. Bei Base-Dokumenten hingegen ist die im Dokument enthaltene Datenbank allen Formularen gemeinsam.

tip

Um den Dienst SFDocuments.Form aufzurufen, wird auf die Methoden Forms(), FormDocuments() und OpenFormDocument() des Dienstes SFDocuments.Document verwiesen


Dienstaufruf

Vor der Verwendung des Dienstes Form muss die Bibliothek ScriptForge geladen oder importiert werden:

note

‚ÄĘ Grundlegende Makros erfordern das Laden der Bibliothek ScriptForge mit der folgenden Anweisung:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

‚ÄĘ Python-Skripte erfordern einen Import aus dem Modul scriptforge:
from scriptforge import CreateScriptService


In Writer-Dokumenten

Der folgende Code-Schnipsel zeigt, wie auf das Formular mit dem Namen Form1 zugegriffen wird, das sich in einer Writer-Datei befindet:


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

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

Formulare k√∂nnen √ľber ihre Namen oder ihre Indexe aufgerufen werden, wie unten gezeigt:


     Set myForm = oDoc.Forms(0)
   
In Python

     my_form = doc.Forms(0)
   
warning

Wenn Sie versuchen, auf ein FormDocument zuzugreifen, das derzeit im Designmodus geöffnet ist, wird eine Ausnahme ausgelöst.


In Calc-Dokumenten

Ein Formular in einer Calc-Datei muss in seiner Tabelle einen eindeutigen Namen haben. Daher erfordert die Methode Forms zwei Argumente, wobei das erste den Tabellennamen und das zweite den Formularnamen angibt.


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

Dies wird auf identische Weise mit Python erreicht:


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

In Base-Dokumenten

Auf ein FormDocument innerhalb eines Base-Dokuments wird √ľber seinen Namen zugegriffen. Das folgende Beispiel √∂ffnet das Formulardokument namens thisFormDocument und greift auf das Formular MainForm zu:


      Dim oDb As Object, myForm As Object
      Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
      ' Die folgende Anweisung ist nur erforderlich, wenn das Formular noch nicht geöffnet wurde
      oDb.OpenFormDocument("thisFormDocument")
      Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
      ' Oder alternativ, um auf das Formular √ľber seinen Index zuzugreifen ‚Ķ
      Set myForm = oDb.Forms("thisFormDocument", 0)
   
note

Um eine Aktion auf einem Formular mit dem Dienst Form auszuf√ľhren, muss FormDocument entweder manuell vom Benutzer oder programmgesteuert in einem Benutzerskript ge√∂ffnet worden sein. Letzteres kann durch Aufrufen der Methode OpenFormDocument des Dienstes Base erfolgen.


Um auf ein bestimmtes Unterformular eines Formulars zuzugreifen, verwenden Sie die Methode SubForms. Beachten Sie, dass im folgenden Beispiel mySubForm eine neue Instanz des Dienstes Form ist.


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

Vorherige Beispiele wie folgt √ľbersetzt in Python:


     db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
     # Die folgende Anweisung ist nur erforderlich, wenn das Formular noch nicht geöffnet wurde
     form_doc = db.OpenFormDocument('thisFormDocument')
     form = form_doc.Forms('thisFormDocument', 'MainForm')
     # Oder alternativ, um auf das Formular √ľber seinen Index zuzugreifen ‚Ķ
     form = form_doc.Forms('thisFormDocument', 0)
     sub_form = form.SubForms('mySubForm')
   

In Formularereignisse

So rufen Sie den Dienst Form auf, wenn ein Formularereignis stattfindet:


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

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

Der Dienst FormEvent wird ausschließlich zum Erstellen von Instanzen der Dienste SFDocuments.Form und SFDocuments.FormControl verwendet, wenn ein Formular- oder Steuerelementereignis stattfindet.


Es wird empfohlen, Ressourcen nach der Verwendung des Formulardienstes freizugeben.


     myForm.Dispose() ' Basic
   

     form.Dispose()  # Python
   

Diese Operation wird implizit ausgef√ľhrt, wenn ein Formulardokument mit der unten beschriebenen Methode CloseFormDocument() geschlossen wird.

Eigenschaften

Name

Schreibgesch√ľtzt

Typ

Beschreibung

AllowDeletes

Nein

Boolean

Legt fest, ob das Formular das Löschen von Datensätzen zulässt.

AllowInserts

Nein

Boolean

Legt fest, ob das Formular das Hinzuf√ľgen von Datens√§tzen zul√§sst.

AllowUpdates

Nein

Boolean

Legt fest, ob das Formular das Aktualisieren von Datensätzen zulässt.

BaseForm

Ja

String

Legt den hierarchischen Namen des Basisformulars fest, welches das eigentliche Formular enthält.

Bookmark

Nein

Variant

Legt eindeutig den aktuellen Datensatz der zugrunde liegenden Tabelle, Abfrage oder SQL-Anweisung des Formulars fest.

CurrentRecord

Nein

Long

Identifiziert den aktuellen Datensatz im Datensatz, der in einem Formular angezeigt wird. Wenn die Zeilennummer positiv ist, bewegt sich der Cursor auf die angegebene Zeilennummer in Bezug auf den Beginn der Ergebnismenge. Die Zeilenzählung beginnt bei 1. Wenn die angegebene Zeilennummer negativ ist, bewegt sich der Cursor an eine absolute Zeilenposition in Bezug auf das Ende der Ergebnismenge. Zeile -1 bezieht sich auf die letzte Zeile in der Ergebnismenge.

Filter

Nein

String

Legt eine Teilmenge von Datens√§tzen fest, die als SQL-Klausel WHERE ohne das Schl√ľsselwort WHERE angezeigt werden sollen.

LinkChildFields

Ja

String

Legt fest, wie Datens√§tze in einem untergeordneten Unterformular mit Datens√§tzen in seinem √ľbergeordneten Formular verkn√ľpft werden.

LinkParentFields

Ja

String

Legt fest, wie Datens√§tze in einem untergeordneten Unterformular mit Datens√§tzen in seinem √ľbergeordneten Formular verkn√ľpft werden.

Name

Ja

String

Der Name des aktuellen Formulars.

OrderBy

Nein

String

Legt fest, in welcher Reihenfolge die Datens√§tze als SQL-Klausel ORDER BY ohne die Schl√ľsselw√∂rter ORDER BY angezeigt werden sollen.

Parent

Ja

Object

Das √ľbergeordnete Element des aktuellen Formulars. Es kann entweder ein Objekt SFDocuments.Form oder ein Objekt SFDocuments.Document sein.

RecordSource

Nein

String

Legt die Datenquelle als Tabellenname, Abfragename oder SQL-Anweisung fest.

XForm

Ja

UNO
Objekt

Das UNO-Objekt, das Interaktionen mit dem Formular darstellt. Siehe XForm und DataForm in der API-Dokumentation f√ľr detaillierte Informationen.


Ereigniseigenschaften

Die folgenden Eigenschaften geben URI-Zeichenfolgen, die jenes durch das Ereignis ausgel√∂ste Skript definieren, zur√ľck oder legen sie fest.

Name

Schreibgesch√ľtzt

Basic-IDE-Beschreibung

OnApproveCursorMove

Nein

Vor der Datensatzänderung

OnApproveParameter

Nein

Beim Parameter f√ľllen

OnApproveReset

Nein

Vor dem Zur√ľcksetzen

OnApproveRowChange

Nein

Vor der Datensatzaktion

OnApproveSubmit

Nein

Vor dem Absenden

OnConfirmDelete

Nein

Beim Löschung bestätigen

OnCursorMoved

Nein

Nach der Datensatzänderung

OnErrorOccurred

Nein

Wenn Fehler aufgetreten

OnLoaded

Nein

Beim Laden

OnReloaded

Nein

Beim Neuladen

OnReloading

Nein

Vorm Neuladen

OnResetted

Nein

Nach dem Zur√ľcksetzen

OnRowChanged

Nein

Nach der Datensatzaktion

OnUnloaded

Nein

Beim Entladen

OnUnloading

Nein

Vorm Entladen


tip

Weitere Informationen zu URI-Zeichenfolgen finden Sie unter Scripting Framework URI Specification.


Liste der Methoden im Dienst "Form"

Activate
CloseFormDocument
Controls
GetDatabase

MoveFirst
MoveLast
MoveNext
MoveNew

MovePrevious
Requery
SubForms


Activate

Setzt den Fokus auf die aktuelle Instanz von Form. Gibt True zur√ľck, wenn die Fokussierung erfolgreich war.

Das Verhalten der Methode Activate hängt von der Art des Dokuments ab, in dem sich das Formular befindet:

Syntax:

svc.Activate(): bool

Beispiel:

Das folgende Beispiel geht davon aus, dass Sie das Formular mit dem Namen FormA aktivieren m√∂chten, das sich in Sheet1 der aktuell ge√∂ffneten Calc-Datei befindet. Es erh√§lt zun√§chst Zugriff auf das Dokument √ľber den Dienst Document und ThisComponent und aktiviert dann das Formular.


     ' Erhält das Formular, das aktiviert wird
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

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

' Aktiviert das Formular myForm.Activate()
In Python

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

ThisComponent gilt f√ľr Calc- und Writer-Dokumente. F√ľr Base-Dokumente m√ľssen Sie ThisDataBaseDocument verwenden.


CloseFormDocument

Schließt das Formulardokument, das die eigentliche Instanz Form enthält. Die Instanz Form wird verworfen.

Syntax:

svc.CloseFormDocument(): bool

Beispiel:


      myForm.CloseFormDocument() ' Basic
   
In Python

      form.CloseFormDocument()  # Python
   
note

Diese Methode schließt nur Formulardokumente, die sich in Basisdokumenten befinden. Wenn das Formular in einem Writer- oder Calc-Dokument gespeichert ist, hat der Aufruf von CloseFormDocument keine Auswirkung.


Controls

Der von der Methode Controls zur√ľckgegebene Wert h√§ngt von den bereitgestellten Argumenten ab:

Syntax:

svc.Controls(opt controlname: str): any

Parameter:

controlname : Ein g√ľltiger Steuerelementname als Zeichenfolge mit Beachtung der Gro√ü-/Kleinschreibung. Wenn nicht vorhanden, wird die Liste der Steuerelementnamen als nullbasierte Matrix zur√ľckgegeben.

Beispiel:


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

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

GetDatabase

Gibt eine Instanz SFDatabases.Database zur√ľck, die Zugriff auf die Ausf√ľhrung von SQL-Befehlen auf der Datenbank gew√§hrt, mit der das aktuelle Formular verbunden ist und/oder die im aktuellen Base-Dokument gespeichert ist.

Jedes Formular hat seine eigene Datenbankverbindung, außer in Base-Ddokumenten, wo alle dieselbe Verbindung teilen.

Syntax:

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

Parameter:

user, password: Die optionalen Login-Parameter (Standard = "").

Beispiel:


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

Der Formularcursor wird auf den ersten Datensatz positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.MoveFirst(): bool

Beispiel:


      myForm.MoveFirst() ' Basic
   
In Python

      form.MoveFirst()  # Python
   

MoveLast

Der Formularcursor wird auf den letzten Datensatz positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.MoveLast(): bool

Beispiel:


      myForm.MoveLast() ' Basic
   
In Python

      form.MoveLast()  # Python
   

MoveNew

Der Formularcursor wird auf den neuen Datensatzbereich positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.MoveNew(): bool

Beispiel:


      myForm.MoveNew() ' Basic
   
In Python

      form.MoveNew()  # Python
   

MoveNext

Der Formularcursor wird auf den n√§chsten Datensatz positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.MoveNext(opt offset: int): bool

Parameter:

offset: Die Anzahl der Datensätze, die vorwärts gegangen werden soll (Standard = 1).

Beispiel:


      myForm.MoveNext() ' Basic
   
In Python

      form.MoveNext()  # Python
   

MovePrevious

Der Formularcursor wird auf den vorherigen Datensatz positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.MovePrevious(opt offset: int): bool

Parameter:

offset: Die Anzahl der Datens√§tze, die r√ľckw√§rts gegangen werden soll (Standard = 1).

Beispiel:


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

L√§dt die aktuellen Daten aus der Datenbank neu und aktualisiert das Formular. Der Cursor wird auf den ersten Datensatz positioniert. Gibt bei Erfolg True zur√ľck.

Syntax:

svc.Requery(): bool

Beispiel:


      myForm.Requery() ' Basic
   
In Python

      form.Requery()  # Python
   

Subforms

Der von der Methode Subforms zur√ľckgegebene Wert h√§ngt von den bereitgestellten Argumenten ab:

Syntax:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Parameter:

subform: Ein Unterformular, das in der aktuellen Klasseninstanz Form gespeichert ist, angegeben durch seinen Namen oder Index.

Wenn dieses Argument fehlt, gibt die Methode eine Liste der verf√ľgbaren Unterformulare als nullbasierte Matrix zur√ľck. Wenn das Formular ein einzelnes Unterformular hat, k√∂nnen Sie subform = 0 setzen, um Zugriff darauf zu erhalten.

Beispiel:


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

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

Alle ScriptForge Basic-Routinen oder Bezeichner, denen ein Unterstrich "_" vorangestellt ist, sind f√ľr den internen Gebrauch reserviert. Sie sind nicht f√ľr die Verwendung in Basic-Makros oder Python-Skripten vorgesehen.


Bitte unterst√ľtzen Sie uns!