Υπηρεσία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


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

Πριν να χρησιμοποιήσετε την υπηρεσία Form, πρέπει να φορτωθεί ή να εισαχθεί η βιβλιοθήκη ScriptForge:

note

• Οι μακροεντολές Basic απαιτούν τη φόρτωση της βιβλιοθήκης ScriptForge χρησιμοποιώντας την ακόλουθη πρόταση:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService


Σε έγγραφα Writer

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


      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")
   
Σε Python

     from scriptforge import CreateScriptService
     ui = CreateScriptService('UI') 
     doc = ui.OpenDocument('/home/user/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("/home/user/Documents/MyForms.ods")
      Set myForm = oDoc.Forms("Sheet1", "Form1")
   

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


     ui = CreateScriptService('UI')
     doc = ui.OpenDocument('/home/user/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

Η υπηρεσία FormEvent χρησιμοποιείται αποκλειστικά για τη δημιουργία παρουσιών των υπηρεσιών SFDocuments.Form και SFDocuments.FormControl όταν λαμβάνει χώρα μια φόρμα ή ένα συμβάν ελέγχου.


Συνιστάται η απελευθέρωση πόρων μετά τη χρήση της υπηρεσίας 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, ανατρέξτε στις Προδιαγραφές 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 και στη συνέχεια ενεργοποιεί τη φόρμα.


     'Κρατά τη φόρμα που θα ενεργοποιηθεί
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

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

'Ενεργοποιεί τη φόρμα myForm.Activate()
Σε Python

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

ThisComponent (Αυτό το στοιχείο) ισχύει για έγγραφα Calc και Writer. Για έγγραφα Base χρησιμοποιήστε το ThisDataBaseDocument.


CloseFormDocument

Κλείνει το έγγραφο φόρμας που περιέχει την ενεργή παρουσία Form. Η παρουσία Form διατίθεται.

Σύνταξη:

svc.CloseFormDocument(): bool

Παράδειγμα:


      myForm.CloseFormDocument() ' Basic
   
Σε Python

      form.CloseFormDocument()  # Python
   
note

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


Controls

Η τιμή που επιστρέφεται από τη μέθοδο Controls εξαρτάται από τα ορίσματα που παρέχονται:

Σύνταξη:

svc.Controls(opt controlname: str): any

Παράμετροι:

controlname (όνομα ελέγχου): Ένα έγκυρο όνομα ελέγχου ως συμβολοσειρά με διάκριση πεζών-κεφαλαίων. Εάν δεν υπάρχει, ο κατάλογος ονομάτων ελέγχου επιστρέφεται ως πίνακας μηδενικής βάσης.

Παράδειγμα:


      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

Επιστρέφει μια παρουσία SFDatabases.Database που παρέχει πρόσβαση σε την εκτέλεση εντολών SQL στη βάση δεδομένων στην οποία είναι συνδεδεμένη η τρέχουσα φόρμα και/ή που αποθηκεύεται στο τρέχον έγγραφοBase .

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

Σύνταξη:

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

Παράμετροι:

user, password (χρήστης, κωδικός πρόσβασης): Οι προαιρετικές παράμετροι σύνδεσης (Προεπιλογή = "").

Παράδειγμα:


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

Ο δρομέας της φόρμας τοποθετείται στην πρώτη εγγραφή. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

svc.MoveFirst(): bool

Παράδειγμα:


      myForm.MoveFirst() ' Basic
   
Σε Python

      form.MoveFirst()  # Python
   

MoveLast

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

Σύνταξη:

svc.MoveLast(): bool

Παράδειγμα:


      myForm.MoveLast() ' Basic
   
Σε Python

      form.MoveLast()  # Python
   

MoveNew

Ο δρομέας της φόρμας τοποθετείται στη νέα περιοχή εγγραφής. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

svc.MoveNew(): bool

Παράδειγμα:


      myForm.MoveNew() ' Basic
   
Σε Python

      form.MoveNew()  # Python
   

MoveNext

Ο δρομέας της φόρμας τοποθετείται στην επόμενη εγγραφή. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

svc.MoveNext(opt offset: int): bool

Παράμετροι:

offset (μετατόπιση): Ο αριθμός των εγγραφών προς τα μπρος (Προεπιλογή = 1).

Παράδειγμα:


      myForm.MoveNext() ' Basic
   
Σε Python

      form.MoveNext()  # Python
   

MovePrevious

Ο δρομέας της φόρμας τοποθετείται στην προηγούμενη εγγραφή. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

svc.MovePrevious(opt offset: int): bool

Παράμετροι:

offset: Ο αριθμός των εγγραφών προς τα πίσω (Προεπιλογή = 1).

Παράδειγμα:


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

Φορτώνει ξανά τα τρέχοντα δεδομένα από τη βάση δεδομένων και ανανεώνει τη φόρμα. Ο δρομέας τοποθετείται στην πρώτη εγγραφή. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:

svc.Requery(): bool

Παράδειγμα:


      myForm.Requery() ' Basic
   
Σε Python

      form.Requery()  # Python
   

Subforms

Η τιμή που επιστρέφεται από τη μέθοδο Subforms (Υποφόρμες) εξαρτάται από τα ορίσματα που παρέχονται:

Σύνταξη:

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Παράμετροι:

subform: Μια υποφόρμα που είναι αποθηκευμένη στην τρέχουσα παρουσία κλάσης Form που δίνεται από το όνομά της ή το ευρετήριό της.

Όταν αυτό το όρισμα απουσιάζει, η μέθοδος επιστρέφει έναν κατάλογο διαθέσιμων υπομορφών ως πίνακα μηδενικής βάσης. Εάν η φόρμα έχει μία μόνο υποφόρμα, μπορείτε να ορίσετε subform = 0 για να αποκτήσετε πρόσβαση σε αυτήν.

Παράδειγμα:


      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 ή σενάρια Python.


Παρακαλούμε, υποστηρίξτε μας!