ΥπηρεσίαSFDocuments.Form

Η υπηρεσία Form παρέχει μεθόδους και ιδιότητες για τη διαχείριση φορμών σε έγγραφα του LibreOffice. Αυτή η υπηρεσία υποστηρίζει φόρμες σε έγγραφα Base, Calc και Writer και επιτρέπει:

tip

Η υπηρεσία SFDocuments.Form (Φόρμα) είναι διαθέσιμη από το LibreOffice 7.2 και μετά.


Οι φόρμες χρησιμοποιούνται συνήθως σε έγγραφα του LibreOffice για τη δημιουργία διεπαφών χρήστη που συνδέονται με σχεσιακές βάσεις δεδομένων. Ως εκ τούτου, η υπηρεσία Form παρέχει γρήγορη πρόσβαση στη συνδεδεμένη βάση δεδομένων μέσω της υπηρεσίας SFDatabase . Database.

tip

Η υπηρεσία SFDocuments.Form σχετίζεται στενά με την υπηρεσία SFDocuments. FormControl.


Ορισμοί

FormDocument

Οι φόρμες δημιουργούνται συνήθως σε έγγραφα Base, αλλά μπορούν να προστεθούν και στα έγγραφα Writer και Calc.

Στη Base, κάθε φόρμα που δημιουργείτε χρησιμοποιώντας τη λειτουργία Εισαγωγή - Φόρμα ή μέσω του Οδηγού φόρμας είναι στην πραγματικότητα ένα FormDocument που μπορεί να χειριστεί με την υπηρεσία Form. Τα έγγραφα Base μπορούν να περιέχουν απεριόριστο αριθμό εγγράφων φορμών.

Ακολουθεί ένα παράδειγμα που δείχνει την ιεραρχία όλων των στοιχείων που εμπλέκονται στην πρόσβαση σε φόρμες και υποφόρμες σε ένα έγγραφο Base. Ας υποθέσουμε ότι έχετε ένα αρχείο Base με το όνομα Employees.odb και μέσα σε αυτό δημιουργήσατε ένα έγγραφο φόρμας για να προσθέσετε νέους υπαλλήλους στη βάση δεδομένων. Το έγγραφο φόρμας περιέχει μια κύρια φόρμα με το όνομα EmployeeData που δίνει πρόσβαση σε έναν πίνακα. Υπάρχει επίσης μια υποφόρμα WorksAtPlant που σας επιτρέπει να συσχετίσετε τον νέο υπάλληλο σε ένα από τα εργοστάσια της εταιρείας.


    Employees.odb (έγγραφο Base)
     |
     |-- AddEmployee (FormDocument)
          |
          |-- EmployeeData (κύρια φόρμα)
               |
               |-- WorksAtPlant (SubForm)
  
note

Ένα FormDocument μπορεί να θεωρηθεί ως ένα σύνολο φορμών που παρέχουν πρόσβαση σε σύνολα δεδομένων, όπως πίνακες βάσεων δεδομένων και ερωτήματα από τα έγγραφα του LibreOffice. Μπορείτε να προσπελάσετε τα ονόματα των φορμών και των υποφορμών μέσα σε ένα FormDocument χρησιμοποιώντας το Πλοήγηση φόρμας.


Φόρμες και υποφόρμες

Ένα έγγραφο φόρμας αποτελείται από μία ή περισσότερες φόρμες οι οποίες, με τη σειρά τους, μπορεί επίσης να περιέχουν οποιονδήποτε αριθμό υπομορφών. Μια φόρμα είναι ένα αφηρημένο σύνολο στοιχείων ελέγχου που συνδέονται με μια καθορισμένη πηγή δεδομένων, η οποία μπορεί να είναι ένας πίνακας βάσης δεδομένων, ένα ερώτημα ή μια πρόταση SQL SELECT.

Στα έγγραφα Calc και Writer, κάθε φόρμα μπορεί να συνδεθεί με σύνολα δεδομένων που βρίσκονται σε διαφορετικές βάσεις δεδομένων. Από την άλλη πλευρά, στα έγγραφα Base η βάση δεδομένων που περιέχεται στο έγγραφο είναι κοινή για όλες τις μορφές.

tip

Για να καλέσετε την υπηρεσία SFDocuments. Form ανατρέξτε στις μεθόδους Forms(), FormDocuments() και OpenFormDocument() της υπηρεσίας SFDocuments.Document


Κλήση υπηρεσίας

Σε έγγραφα Writer

Το παρακάτω απόσπασμα κώδικα δείχνει πώς να προσπελάσετε τη φόρμα με το όνομα Form1 που βρίσκεται μέσα σε ένα αρχείο Writer:


      Dim oDoc As Object, myForm As Object, ui as Object
      Set ui = CreateScriptService("UI")
      Set oDoc = ui.OpenDocument("~/Documents/MyForm.odt")
      Set myForm = oDoc.Forms("Form1")
   
Σε Python

     from scriptforge import CreateScriptService
     svc = CreateScriptService('UI') 
     doc = svc.OpenDocument('~/Documents/MyForm.odt')
     my_form = doc.Forms('Form1')
   

Οι φόρμες είναι προσβάσιμες με τα ονόματά τους ή με τα ευρετήριά τους, όπως φαίνεται παρακάτω:


     Set myForm = oDoc.Forms(0)
   
Σε Python

     my_form = doc.Forms(0)
   
warning

Εάν προσπαθήσετε να προσπελάσετε ένα FormDocument που είναι ανοιχτό αυτήν τη στιγμή σε Λειτουργία σχεδίασης θα δημιουργηθεί μια εξαίρεση.


Σε έγγραφα Calc

Μια φόρμα σε ένα αρχείο Calc πρέπει να έχει ένα μοναδικό όνομα μέσα στο φύλλο της. Επομένως, η μέθοδος Forms απαιτεί δύο ορίσματα, το πρώτο που υποδεικνύει το όνομα του φύλλου και το δεύτερο το όνομα της φόρμας.


      Dim oDoc As Object, myForm As Object, ui as Object
      Set ui = CreateScriptService("UI")
      Set oDoc = ui.OpenDocument("~/Documents/MyForms.ods")
      Set myForm = oDoc.Forms("Sheet1", "Form1")
   

Αυτό επιτυγχάνεται με τον ίδιο τρόπο χρησιμοποιώντας Python:


     svc = CreateScriptService('UI')
     doc = svc.OpenDocument('~/Documents/MyForms.ods')
     my_form = doc.Forms('Sheet1', 'Form1')
   

Σε έγγραφα Base

Ένα FormDocument μέσα σε ένα έγγραφο Base είναι προσβάσιμο με το όνομά του. Το ακόλουθο παράδειγμα ανοίγει το έγγραφο φόρμας με το όνομα thisFormDocument και αποκτά πρόσβαση στη φόρμα MainForm:


      Dim oDb As Object, myForm As Object
      Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
      ' Η παρακάτω δήλωση είναι απαραίτητη μόνο εάν η φόρμα δεν έχει ανοίξει ακόμα
      oDb.OpenFormDocument("thisFormDocument")
      Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
      ' Ή, εναλλακτικά, για πρόσβαση στη φόρμα από το ευρετήριό της ...
      Set myForm = oDb.Forms("thisFormDocument", 0)
   
note

Για να εκτελέσετε οποιαδήποτε ενέργεια σε μια φόρμα χρησιμοποιώντας την υπηρεσία Form, το FormDocument πρέπει να έχει ανοίξει είτε με μη αυτόματο τρόπο από τον χρήστη είτε μέσω προγραμματισμού σε ένα σενάριο χρήστη. Το τελευταίο μπορεί να γίνει καλώντας τη μέθοδο OpenFormDocument της υπηρεσίας Base.


Για να προσπελάσετε μια δεδομένη υποφόρμα μιας φόρμας χρησιμοποιήστε τη μέθοδο SubForms. Σημειώστε ότι στο παρακάτω παράδειγμα το mySubForm είναι μια νέα παρουσία της υπηρεσίας Form.


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

Τα προηγούμενα παραδείγματα μεταφράζονται στην Python ως:


     db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
     # Η παρακάτω δήλωση είναι απαραίτητη μόνο εάν η φόρμα δεν έχει ανοίξει ακόμα
     form_doc = db.OpenFormDocument('thisFormDocument')
     form = form_doc.Forms('thisFormDocument', 'MainForm')
     # Ή, εναλλακτικά, για πρόσβαση στη φόρμα από το ευρετήριό της ...
     form = form_doc.Forms('thisFormDocument', 0)
     sub_form = form.SubForms('mySubForm')
   

Για συμβάντα φόρμας

Για να καλέσετε την υπηρεσία Form όταν λαμβάνει χώρα ένα συμβάν φόρμας:


      Sub OnEvent(ByRef poEvent As Object)
          Dim myForm As Object
          Set myForm = CreateScriptService("SFDocuments.FormEvent", poEvent)
          '(...)
      End sub
   
Σε 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.


Συνιστάται η απελευθέρωση πόρων μετά τη χρήση της υπηρεσίας Form (Φόρμας).


     myForm.Dispose() ' Basic
   

     form.Dispose()  # Python
   

Αυτή η λειτουργία εκτελείται σιωπηρά όταν ένα έγγραφο φόρμας κλείνει με τη μέθοδο CloseFormDocument() που περιγράφεται παρακάτω.

Ιδιότητες

Όνομα

Μόνο για ανάγνωση

Τύπος

Περιγραφή

AllowDeletes

Όχι

Boolean

Καθορίζει εάν η φόρμα επιτρέπει τη διαγραφή εγγραφών.

AllowInserts

Όχι

Boolean

Καθορίζει εάν η φόρμα επιτρέπει την προσθήκη εγγραφών.

AllowUpdates

Όχι

Boolean

Καθορίζει εάν η φόρμα επιτρέπει την ενημέρωση των εγγραφών.

BaseForm

Ναι

String

Καθορίζει το ιεραρχικό όνομα της φόρμας Base που περιέχει την πραγματική φόρμα.

Bookmark

Όχι

Variant

Καθορίζει με μοναδικό τρόπο την τρέχουσα εγγραφή του υποκείμενου πίνακα, του ερωτήματος ή της δήλωσης SQL της φόρμας.

CurrentRecord

Όχι

Long

Προσδιορίζει την τρέχουσα εγγραφή στο σύνολο δεδομένων που προβάλλεται σε μια φόρμα. Εάν ο αριθμός σειράς είναι θετικός, ο δρομέας μετακινείται στον δεδομένο αριθμό σειράς σε σχέση με την αρχή του συνόλου των αποτελεσμάτων. Η μέτρηση σειρών ξεκινά από το 1. Εάν ο δεδομένος αριθμός σειράς είναι αρνητικός, ο δρομέας μετακινείται σε μια απόλυτη θέση σειράς ως προς το τέλος του συνόλου των αποτελεσμάτων. Η σειρά -1 αναφέρεται στην τελευταία σειρά στο σύνολο των αποτελεσμάτων.

Filter

Όχι

String

Καθορίζει ένα υποσύνολο εγγραφών που θα εμφανίζεται ως πρόταση WHEREτης SQL χωρίς τη λέξη-κλειδί WHERE.

LinkChildFields

Ναι

String

Καθορίζει τον τρόπο με τον οποίο οι εγγραφές σε μια θυγατρική υποφόρμα συνδέονται με τις εγγραφές στη γονική της μορφή.

LinkParentFields

Ναι

String

Καθορίζει τον τρόπο με τον οποίο οι εγγραφές σε μια θυγατρική υποφόρμα συνδέονται με τις εγγραφές στη γονική της μορφή.

Name

Ναι

String

Το όνομα της τρέχουσας φόρμας.

OrderBy

Όχι

String

Καθορίζει με ποια σειρά θα εμφανίζονται οι εγγραφές ως πρόταση ORDER BY της SQL χωρίς τις λέξεις-κλειδιά ORDER BY.

Parent

Ναι

Object

Ο γονέας της τρέχουσας φόρμας. Μπορεί να είναι είτε SFDocuments.Form, είτε αντικείμενο SFDocuments.Document.

RecordSource

Όχι

String

Καθορίζει την προέλευση των δεδομένων, ως όνομα πίνακα, όνομα ερωτήματος ή πρόταση SQL.

XForm

Ναι

Αντικείμενο
UNO

Το αντικείμενο UNO που αντιπροσωπεύει τις αλληλεπιδράσεις με τη φόρμα. Ανατρέξτε στα XForm και στο DataForm στην τεκμηρίωση του API για λεπτομερείς πληροφορίες.


Ιδιότητες συμβάντος

Οι παρακάτω ιδιότητες επιστρέφουν ή ορίζουν συμβολοσειρές URI που ορίζουν το σενάριο που ενεργοποιείται από το συμβάν.

Όνομα

Μόνο για ανάγνωση

Περιγραφή IDE Basic

OnApproveCursorMove

Όχι

Πριν την αλλαγή της εγγραφής

OnApproveParameter

Όχι

Συμπλήρωση παραμέτρων

OnApproveReset

Όχι

Πριν την επαναφορά

OnApproveRowChange

Όχι

Πριν την ενέργεια της εγγραφής

OnApproveSubmit

Όχι

Πριν την υποβολή

OnConfirmDelete

Όχι

Επιβεβαίωση διαγραφής

OnCursorMoved

Όχι

Μετά την αλλαγή της εγγραφής

OnErrorOccurred

Όχι

Παρουσιάστηκε σφάλμα

OnLoaded

Όχι

Κατά τη φόρτωση

OnReloaded

Όχι

Κατά την επαναφόρτωση

OnReloading

Όχι

Πριν από την επαναφόρτωση

OnResetted

Όχι

Μετά την επαναφορά

OnRowChanged

Όχι

Μετά την ενέργεια της εγγραφής

OnUnloaded

Όχι

Κατά την αποφόρτωση

OnUnloading

Όχι

Πριν την αποφόρτωση


tip

Για να μάθετε περισσότερα σχετικά με τις συμβολοσειρές URI, ανατρέξτε στo Προδιαγραφές URI πλαισίου δέσμης ενεργειών .


Κατάλογος μεθόδων στην υπηρεσία Form (Φόρμα)

Activate
CloseFormDocument
Controls
GetDatabase

MoveFirst
MoveLast
MoveNext
MoveNew

MovePrevious
Requery
SubForms


Activate

Ορίζει την εστίαση στην τρέχουσα παρουσία Form. Επιστρέφει True εάν η εστίαση ήταν επιτυχής.

Η συμπεριφορά της μεθόδου Activate (Ενεργοποίηση) εξαρτάται από τον τύπο του εγγράφου όπου βρίσκεται η φόρμα:

Σύνταξη:

svc.Activate(): bool

Παράδειγμα:

Το παρακάτω παράδειγμα προϋποθέτει ότι θέλετε να ενεργοποιήσετε τη φόρμα με το όνομα FormA που βρίσκεται στο Sheet1 (Φύλλο1) του τρέχοντος ανοιχτού αρχείου Calc. Αρχικά αποκτά πρόσβαση στο έγγραφο χρησιμοποιώντας την υπηρεσία Document και το ThisComponent και στη συνέχεια ενεργοποιεί τη φόρμα.


     'Gets hold of the form that will be activated
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

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

'Activates the form myForm.Activate()
Σε 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.

Σύνταξη:

svc.CloseFormDocument(): bool

Παράδειγμα:


      myForm.CloseFormDocument() ' Basic
   
Σε 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:

Σύνταξη:

svc.Controls(opt controlname: str): any

Παράμετροι:

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

Παράδειγμα:


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

Σύνταξη:

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

Παράμετροι:

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

Παράδειγμα:


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

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

Σύνταξη:

svc.MoveFirst(): bool

Παράδειγμα:


      myForm.MoveFirst() ' Basic
   
Σε Python

      form.MoveFirst()  # Python
   

MoveLast

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

Σύνταξη:

svc.MoveLast(): bool

Παράδειγμα:


      myForm.MoveLast() ' Basic
   
Σε Python

      form.MoveLast()  # Python
   

MoveNew

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

Σύνταξη:

svc.MoveNew(): bool

Παράδειγμα:


      myForm.MoveNew() ' Basic
   
Σε Python

      form.MoveNew()  # Python
   

MoveNext

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

Σύνταξη:

svc.MoveNext(opt offset: int): bool

Παράμετροι:

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

Παράδειγμα:


      myForm.MoveNext() ' Basic
   
Σε Python

      form.MoveNext()  # Python
   

MovePrevious

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

Σύνταξη:

svc.MovePrevious(opt offset: int): bool

Παράμετροι:

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

Παράδειγμα:


      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.

Σύνταξη:

svc.Requery(): bool

Παράδειγμα:


      myForm.Requery() ' Basic
   
Σε Python

      form.Requery()  # Python
   

Subforms

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

Σύνταξη:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Παράμετροι:

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.

Παράδειγμα:


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

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

Όλες οι ScriptForge ρουτίνες Basic ή αναγνωριστικά που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζεται να χρησιμοποιηθούν σε μακροεντολές Basic.