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

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

The FormEvent service is used exclusively to create instances of the SFDocuments.Form and SFDocuments.FormControl services when a form or control event takes place.


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

ReadOnly

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

ReadOnly

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 in der 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 applies to Calc and Writer documents. For Base documents use ThisDataBaseDocument.


CloseFormDocument

Closes the form document containing the actual Form instance. The Form instance is disposed.

Syntax:

svc.CloseFormDocument(): bool

Beispiel:


      myForm.CloseFormDocument() ' Basic
   
In Python

      form.CloseFormDocument()  # Python
   
note

This method only closes form documents located in Base documents. If the form is stored in a Writer or Calc document, calling CloseFormDocument will have no effect.


Controls

The value returned by the Controls method depends on the arguments provided:

Syntax:

svc.Controls(opt controlname: str): any

Parameter:

controlname : A valid control name as a case-sensitive string. If absent, the list of control names is returned as a zero-based array.

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

Return a SFDatabases.Database instance giving access to the execution of SQL commands on the database the current form is connected to and/or that is stored in the current Base document.

Each form has its own database connection, except in Base documents where they all share the same connection.

Syntax:

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

Parameter:

user, password: The login optional parameters (Default = "").

Beispiel:


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

The form cursor is positioned on the first record. Returns True if successful.

Syntax:

svc.MoveFirst(): bool

Beispiel:


      myForm.MoveFirst() ' Basic
   
In Python

      form.MoveFirst()  # Python
   

MoveLast

The form cursor is positioned on the last record. Returns True if successful.

Syntax:

svc.MoveLast(): bool

Beispiel:


      myForm.MoveLast() ' Basic
   
In Python

      form.MoveLast()  # Python
   

MoveNew

The form cursor is positioned on the new record area. Returns True if successful.

Syntax:

svc.MoveNew(): bool

Beispiel:


      myForm.MoveNew() ' Basic
   
In Python

      form.MoveNew()  # Python
   

MoveNext

The form cursor is positioned on the next record. Returns True if successful.

Syntax:

svc.MoveNext(opt offset: int): bool

Parameter:

offset: The number of records to go forward (Default = 1).

Beispiel:


      myForm.MoveNext() ' Basic
   
In Python

      form.MoveNext()  # Python
   

MovePrevious

The form cursor is positioned on the previous record. Returns True if successful.

Syntax:

svc.MovePrevious(opt offset: int): bool

Parameter:

offset: The number of records to go backwards (Default = 1).

Beispiel:


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

Reloads the current data from the database and refreshes the form. The cursor is positioned on the first record. Returns True if successful.

Syntax:

svc.Requery(): bool

Beispiel:


      myForm.Requery() ' Basic
   
In Python

      form.Requery()  # Python
   

Subforms

The value returned by the Subforms method depends on the arguments provided:

Syntax:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Parameter:

subform: A subform stored in the current Form class instance given by its name or index.

When this argument is absent, the method returns a list of available subforms as a zero-based array. If the form has a single subform, you can set subform = 0 to get access to it.

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.