SFDocuments. Service Form

Le service Form fournit des méthodes et des propriétés pour gérer les formulaires dans les documents LibreOffice. Ce service prend en charge les formulaires dans les documents Base, Calc et Writer et permet de :

tip

Le service SFDocuments.Form est disponible à partir de LibreOffice 7.2.


Les formulaires sont généralement utilisés dans les documents LibreOffice pour créer des interfaces utilisateur connectées à des bases de données relationnelles. Par conséquent, le service Form fournit un accès rapide à la base de données liée via le service SFDatabases.Database.

tip

Le service SFDocuments.Form est étroitement lié au service SFDocuments.FormControl.


Définitions

FormDocument

Les formulaires sont généralement créés dans les documents Base, mais ils peuvent également être ajoutés aux documents Writer et Calc.

Dans Base, chaque formulaire que vous créez à l'aide de la fonctionnalité Insérer - Formulaire ou via l'Assistant de formulaire est en fait un FormDocument qui peut être géré avec le service Form. Les documents de base peuvent contenir un nombre illimité de documents de formulaire.

Ci-dessous, un exemple montrant la hiérarchie de tous les éléments impliqués dans l'accès aux formulaires et sous-formulaires dans un document Base. Supposons que vous ayez un fichier Base nommé Employees.odb et qu'à l'intérieur vous ayez créé un document de formulaire pour ajouter de nouveaux employés à la base de données. Le document de formulaire contient un formulaire principal nommé EmployeeData qui donne accès à une table. Il existe également un sous-formulaire WorksAtPlant qui permet d'associer le nouvel employé à l'une des usines de l'entreprise.


    Employees.odb (document Base)
     |
     |-- AddEmployee (FormDocument)
          |
          |-- EmployeeData (formulaire principal)
               |
               |-- WorksAtPlant (SubForm)
  
note

Un FormDocument peut être considéré comme un ensemble de formulaires permettant d'accéder à des ensembles de données tels que des tables de base de données et des requêtes à partir de documents LibreOffice. Les noms des formulaires et des sous-formulaires à l'intérieur d'un FormDocument sont accessibles à l'aide du Navigateur de formulaires.


Formulaires et sous-formulaires

Un document de formulaire est composé d'un ou plusieurs formulaires qui, à leur tour, peuvent également contenir n'importe quel nombre de sous-formulaires. Un formulaire est un ensemble abstrait de contrôles liés à une source de données spécifiée, qui peut être une table de base de données, une requête ou une instruction SQL SELECT.

Dans les documents Calc et Writer, chaque formulaire peut être lié à des ensembles de données situés dans différentes bases de données. En revanche, dans les documents Base, la base de données contenue dans le document est commune à tous les formulaires.

tip

Pour invoquer le service SFDocuments.Form reportez-vous aux méthodes Forms(), FormDocuments() et OpenFormDocument() du service SFDocuments.Document


Invocation du service

Avant d'utiliser le service Form, la bibliothèque ScriptForge doit être chargée ou importée :

note

• Les macros Basic nécessitent de charger la bibliothèque ScriptForge à l'aide de l'instruction suivante :
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Les scripts Python nécessitent un import depuis le module scriptforge :
from scriptforge import CreateScriptService


Dans les documents Writer

L'extrait de code ci-dessous montre comment accéder au formulaire nommé Form1 qui se trouve dans un fichier 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")
   
En Python

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

Les formulaires sont accessibles par leurs noms ou par leurs indices, comme indiqué ci-dessous :


     Set myForm = oDoc.Forms(0)
   
En Python

     my_form = doc.Forms(0)
   
warning

Si vous essayez d'accéder à un FormDocument qui est actuellement ouvert en Mode Ébauche une exception sera déclenchée.


Dans les documents Calc

Un formulaire dans un fichier Calc doit avoir un nom unique dans sa feuille. Par conséquent, la méthode Forms nécessite deux arguments, le premier indiquant le nom de la feuille et le second spécifiant le nom du formulaire.


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

Ceci est réalisé de manière identique en utilisant Python :


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

Dans les documents Base

Un FormDocument à l'intérieur d'un document Base est accessible par son nom. L'exemple suivant ouvre le document de formulaire nommé thisFormDocument et accède au formulaire MainForm :


      Dim oDb As Object, myForm As Object
      Set oDb = CreateScriptService("SFDocuments.Document", ThisDatabaseDocument)
      ' L'instruction ci-dessous n'est nécessaire que si le formulaire n'a pas encore été ouvert
      oDb.OpenFormDocument("thisFormDocument")
      Set myForm = oDoc.Forms("thisFormDocument", "MainForm")
      ' Ou, alternativement, pour accéder au formulaire par son index...
      Set myForm = oDb.Forms("thisFormDocument", 0)
   
note

Pour effectuer une action sur un formulaire à l'aide du service Form, le FormDocument doit avoir été ouvert manuellement par l'utilisateur ou par programmation dans un script utilisateur. Cette ouverture peut être effectuée en appelant la méthode OpenFormDocument du service Base .


Pour accéder à un sous-formulaire donné d'un formulaire, utilisez la méthode SubForms. Notez que dans l'exemple ci-dessous mySubForm est une nouvelle instance du service Form.


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

Les exemples précédents se traduisent en Python par :


     db = CreateScriptService('SFDocuments.Document', XSCRIPTCONTEXT.getDocument())
     # L'instruction ci-dessous n'est nécessaire que si le formulaire n'a pas encore été ouvert
     form_doc = db.OpenFormDocument('thisFormDocument')
     form = form_doc.Forms('thisFormDocument', 'MainForm')
     #   Ou, alternativement, pour accéder au formulaire par son index...
     form = form_doc.Forms('thisFormDocument', 0)
     sub_form = form.SubForms('mySubForm')
   

Dans les événements Form

Pour invoquer les service Form lorsqu'un événement de formulaire prend place :


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

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

Le service FormEvent est utilisé exclusivement pour créer des instances des services SFDocuments.Form et SFDocuments.FormControl lorsqu'un événement de formulaire ou de contrôle a lieu.


Il est recommandé de libérer des ressources après utilisation du service Form.


     myForm.Dispose() ' Basic
   

     form.Dispose()  # Python
   

Cette opération est effectuée implicitement lorsqu'un document de formulaire est fermé avec la méthode CloseFormDocument() décrite ci-dessous.

Propriétés

Nom

Lecture seule

Type

Description

AllowDeletes

Non

Boolean

Spécifie si le formulaire autorise la suppression d'enregistrements.

AllowInserts

Non

Boolean

Spécifie si le formulaire autorise l'ajout d'enregistrements.

AllowUpdates

Non

Boolean

Spécifie si le formulaire autorise l'actualisation des enregistrements.

BaseForm

Oui

String

Spécifie le nom hiérarchique du formulaire Base contenant le formulaire réel.

Bookmark

Non

Variant

Spécifie de manière unique l'enregistrement actuel de la table, de la requête ou de l'instruction SQL sous-jacente du formulaire.

CurrentRecord

Non

Long

Identifie l'enregistrement actuel dans l'ensemble de données affiché sur un formulaire. Si le numéro de ligne est positif, le curseur se déplace vers le numéro de ligne donné par rapport au début du jeu de résultats. Le nombre de lignes commence à 1. Si le numéro de ligne donné est négatif, le curseur se déplace vers une position de ligne absolue par rapport à la fin du jeu de résultats. La ligne -1 fait référence à la dernière ligne du jeu de résultats.

Filter

Non

String

Spécifie un sous-ensemble d'enregistrements à afficher sous la forme d'une clause SQL WHERE sans le mot-clé WHERE.

LinkChildFields

Oui

String

Spécifie comment les enregistrements d'un sous-formulaire enfant sont liés aux enregistrements de son formulaire parent.

LinkParentFields

Oui

String

Spécifie comment les enregistrements d'un sous-formulaire enfant sont liés aux enregistrements de son formulaire parent.

Name

Oui

String

Le nom du formulaire actif.

OrderBy

Non

String

Spécifie dans quel ordre les enregistrements doivent être affichés en tant que clause SQL ORDER BY sans les mots clés ORDER BY.

Parent

Oui

Object

Le parent du formulaire actuel. Il peut s'agir d'un objet SFDocuments.Form ou d'un objet SFDocuments.Document.

RecordSource

Non

String

Spécifie la source des données, sous la forme d'un nom de table, d'un nom de requête ou d'une instruction SQL.

XForm

Oui

Objet
UNO

L'objet UNO représentant les interactions avec le formulaire. Reportez-vous à XForm et DataForm dans la documentation de l'API pour des informations détaillées.


Propriétés de l'événement

Les propriétés ci-dessous renvoient ou définissent des chaînes URI qui définissent le script déclenché par l'événement.

Nom

Lecture seule

Description Basic EDI

OnApproveCursorMove

Non

Avant le changement d'enregistrement

OnApproveParameter

Non

Remplir les paramètres

OnApproveReset

Non

Avant de rétablir

OnApproveRowChange

Non

Avant l'action d'enregistrement

OnApproveSubmit

Non

Avant l'envoi

OnConfirmDelete

Non

Confirmer la suppression

OnCursorMoved

Non

Après le changement d'enregistrement

OnErrorOccurred

Non

Erreur survenue

OnLoaded

Non

Lors du chargement

OnReloaded

Non

Lors du rechargement

OnReloading

Non

Avant le rechargement

OnResetted

Non

Après le rétablissement

OnRowChanged

Non

Après l'action d'enregistrement

OnUnloaded

Non

Lors du déchargement

OnUnloading

Non

Avant le déchargement


tip

Pour en savoir plus sur les chaînes URI, reportez-vous à la Spécification de l'URI du cadre de script.


Liste des méthodes dans le service Form

Activate
Controls
GetDatabase
MoveFirst

MoveLast
MoveNext
MoveNew

MovePrevious
Requery
SubForms


Activate

Définit le focus sur l'instance actuelle de Form. Renvoie True si la mise au point a réussi.

Le comportement de la méthode Activate dépend du type de document où se trouve le formulaire :

Syntaxe :

svc.Activate(): bool

Exemple :

L'exemple suivant suppose que vous souhaitez activer le formulaire nommé FormA situé dans Sheet1 du fichier Calc actuellement ouvert. Il obtient d'abord l'accès au document à l'aide du service Document et de ThisComponent, puis active le formulaire.


     'Prend en main le formulaire qui sera activé
     Dim oDoc as Object, myForm as Object
     Set oDoc = CreateScriptService("Document", ThisComponent)
     

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

'Active le formulaire myForm.Activate()
En Python

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

ThisComponent s'applique aux documents Calc et Writer. Pour les documents Base, utilisez ThisDataBaseDocument.


CloseFormDocument

warning

This method is deprecated, use ScriptForge.FormDocument.CloseDocument method instead.


Ferme le document de formulaire contenant l'instance réelle de Form. L'instance Form est supprimée.

Syntaxe :

svc.CloseFormDocument(): bool

Exemple :


      myForm.CloseFormDocument() ' Basic
   
En Python

      form.CloseFormDocument()  # Python
   

Controls

La valeur renvoyée par la méthode Controls dépend des arguments fournis :

Syntaxe :

svc.Controls(opt controlname: str): any

Paramètres :

controlname : un nom de contrôle valide sous forme de chaîne sensible à la casse. S'il est absent, la liste des noms de contrôle est renvoyée sous la forme d'une matrice de base zéro.

Exemple :


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

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

GetDatabase

Renvoie une instance SFDatabases.Database donnant accès à l'exécution des commandes SQL sur la base de données à laquelle le formulaire actif est connecté et/ou qui est stocké dans le document Base actif.

Chaque formulaire a sa propre connexion à la base de données, sauf dans les documents Base où ils partagent tous la même connexion.

Syntaxe :

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

Paramètres :

user, password : Les paramètres optionnels de connexion (par défaut = "").

Exemple :


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

      db = form.GetDatabase()  # SFDatabases.Database
   

MoveFirst

Le curseur de formulaire est positionné sur le premier enregistrement. Renvoie True en cas de succès.

Syntaxe :

svc.MoveFirst(): bool

Exemple :


      myForm.MoveFirst() ' Basic
   
En Python

      form.MoveFirst()  # Python
   

MoveLast

Le curseur de formulaire est positionné sur le dernier enregistrement. Renvoie True en cas de succès.

Syntaxe :

svc.MoveLast(): bool

Exemple :


      myForm.MoveLast() ' Basic
   
En Python

      form.MoveLast()  # Python
   

MoveNew

Le curseur de formulaire est positionné sur la nouvelle zone d'enregistrement. Renvoie True en cas de succès.

Syntaxe :

svc.MoveNew(): bool

Exemple :


      myForm.MoveNew() ' Basic
   
En Python

      form.MoveNew()  # Python
   

MoveNext

Le curseur de formulaire est positionné sur l'enregistrement suivant. Renvoie True en cas de succès.

Syntaxe :

svc.MoveNext(opt offset: int): bool

Paramètres :

offset : le nombre d'enregistrements à avancer (par défaut = 1).

Exemple :


      myForm.MoveNext() ' Basic
   
En Python

      form.MoveNext()  # Python
   

MovePrevious

Le curseur de formulaire est positionné sur l'enregistrement précédent. Renvoie True en cas de succès.

Syntaxe :

svc.MovePrevious(opt offset: int): bool

Paramètres :

offset : le nombre d'enregistrements à reculer (par défaut = 1).

Exemple :


      myForm.MovePrevious() ' Basic
   

      form.MovePrevious()  # Python
   

Requery

Recharge les données actuelles de la base de données et actualise le formulaire. Le curseur est positionné sur le premier enregistrement. Renvoie True en cas de succès.

Syntaxe :

svc.Requery(): bool

Exemple :


      myForm.Requery() ' Basic
   
En Python

      form.Requery()  # Python
   

Subforms

La valeur renvoyée par la méthode Subforms dépend des arguments fournis :

Syntaxe :

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

svc.Subforms(subform: str): svc

svc.Subforms(subform: int): svc

Paramètres :

sous-formulaire : un sous-formulaire stocké dans l'instance actuelle de la classe Form donnée par son nom ou son index.

Lorsque cet argument est absent, la méthode renvoie une liste des sous-formulaires disponibles sous la forme d'une matrice de base zéro. Si le formulaire a un seul sous-formulaire, vous pouvez définir subform = 0 pour y accéder.

Exemple :


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

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

Toutes les routines ou identifiants de base ScriptForge qui sont préfixés par un caractère de soulignement "_" sont réservés à un usage interne. Ils ne sont pas destinés à être utilisés dans des macros de base ou des scripts Python.


Aidez-nous !