[Libreoffice-commits] core.git: wizards/source

Jean-Pierre Ledure (via logerrit) logerrit at kemper.freedesktop.org
Tue Jun 22 16:12:39 UTC 2021


 wizards/source/scriptforge/SF_UI.xba             |   36 ++++++++++++++++++-----
 wizards/source/scriptforge/python/scriptforge.py |    5 +--
 2 files changed, 32 insertions(+), 9 deletions(-)

New commits:
commit 8467a8e0587011269e376a65a0e397e096a36cc5
Author:     Jean-Pierre Ledure <jp at ledure.be>
AuthorDate: Tue Jun 22 15:50:06 2021 +0200
Commit:     Jean-Pierre Ledure <jp at ledure.be>
CommitDate: Tue Jun 22 18:10:01 2021 +0200

    ScriptForge - (SF_UI) CreateBaseDocument() new CalcFileName argument
    
    Syntax of CreateBaseDocument() becomes
       FileName, [EmbeddedDatabase=HSQLDB|FIREBIRD|CALC],
       [RegistrationName=""], [CalcFileName]
    
    Only when EmbedddedDatabase = "CALC", the new argument CalcFileName
    represents the file containing the tables as Calc sheets.
    The file must exist or an error is raised.
    
    Example:
        Dim myBase As Object, myCalcBase As Object
        Set myBase = ui.CreateBaseDocument("C:\Databases\MyBaseFile.odb", "FIREBIRD")
        Set myCalcBase = ui.CreateBaseDocument("C:\Databases\MyCalcBaseFile.odb", _
            "CALC", , "C:\Databases\MyCalcFile.ods")
    
    Both Basic and Python are supported.
    
    Change-Id: I9912b110dcec12fe451a47abb61ab143fb543b94
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117665
    Tested-by: Jean-Pierre Ledure <jp at ledure.be>
    Tested-by: Jenkins
    Reviewed-by: Jean-Pierre Ledure <jp at ledure.be>

diff --git a/wizards/source/scriptforge/SF_UI.xba b/wizards/source/scriptforge/SF_UI.xba
index 07108c5fe438..4c9907ec39e3 100644
--- a/wizards/source/scriptforge/SF_UI.xba
+++ b/wizards/source/scriptforge/SF_UI.xba
@@ -42,6 +42,7 @@ Const DOCUMENTERROR				=	"DOCUMENTERROR"				'	Requested document
 Const DOCUMENTCREATIONERROR		=	"DOCUMENTCREATIONERROR"		'	Incoherent arguments, new document could not be created
 Const DOCUMENTOPENERROR			=	"DOCUMENTOPENERROR"			'	Document could not be opened, check the arguments
 Const BASEDOCUMENTOPENERROR		=	"BASEDOCUMENTOPENERROR"		'	Id. for Base document
+Const UNKNOWNFILEERROR			=	"UNKNOWNFILEERROR"			'	Calc datasource does not exist
 
 REM ============================================================= PRIVATE MEMBERS
 
@@ -207,20 +208,27 @@ REM ----------------------------------------------------------------------------
 Public Function CreateBaseDocument(Optional ByVal FileName As Variant _
 							, Optional ByVal EmbeddedDatabase As Variant _
 							, Optional ByVal RegistrationName As Variant _
+							, Optional ByVal CalcFileName As Variant _
 							) As Object
 ''' Create a new LibreOffice Base document embedding an empty database of the given type
 '''	Args:
 '''		FileName: Identifies the file to create. It must follow the SF_FileSystem.FileNaming notation
 '''			If the file already exists, it is overwritten without warning
-'''		EmbeddedDatabase: either "HSQLDB" (default) or "FIREBIRD"
+'''		EmbeddedDatabase: either "HSQLDB" (default) or "FIREBIRD" or "CALC"
 '''		RegistrationName: the name used to store the new database in the databases register
 '''			If "" (default), no registration takes place
 '''			If the name already exists it is overwritten without warning
+'''		CalcFileName: only when EmbedddedDatabase = "CALC", the name of the file containing the tables as Calc sheets
+'''			The name of the file must be given in SF_FileSystem.FileNaming notation
+'''			The file must exist
 '''	Returns:
 '''		 A SFDocuments.SF_Document object or one of its subclasses
+'''	Exceptions
+'''		UNKNOWNFILEERROR				Calc datasource does not exist
 '''	Examples:
-'''		Dim myBase As Object
+'''		Dim myBase As Object, myCalcBase As Object
 '''		Set myBase = ui.CreateBaseDocument("C:\Databases\MyBaseFile.odb", "FIREBIRD")
+'''		Set myCalcBase = ui.CreateBaseDocument("C:\Databases\MyCalcBaseFile.odb", "CALC", , "C:\Databases\MyCalcFile.ods")
 
 Dim oCreate As Variant				'	Return value
 Dim oDBContext As Object			'	com.sun.star.sdb.DatabaseContext
@@ -230,27 +238,38 @@ Dim sFileName As String				'	Alias of FileName
 Dim FSO As Object					'	Alias for FileSystem service
 Const cstDocType = "private:factory/s"
 Const cstThisSub = "UI.CreateBaseDocument"
-Const cstSubArgs = "FileName, [EmbeddedDatabase=""HSQLDB""|""FIREBIRD""], [RegistrationName=""""]"
+Const cstSubArgs = "FileName, [EmbeddedDatabase=""HSQLDB""|""FIREBIRD""|""CALC""], [RegistrationName=""""], [CalcFileName]"
 
 	If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
 	Set oCreate = Nothing
+	Set FSO = CreateScriptService("FileSystem")
 
 Check:
 	If IsMissing(EmbeddedDatabase) Or IsEmpty(EmbeddedDatabase) Then EmbeddedDatabase = "HSQLDB"
 	If IsMissing(RegistrationName) Or IsEmpty(RegistrationName) Then RegistrationName = ""
+	If IsMissing(CalcFileName) Or IsEmpty(CalcFileName) Then CalcFileName = ""
 	If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
 		If Not SF_Utils._ValidateFile(FileName, "FileName") Then GoTo Finally
-		If Not SF_Utils._Validate(EmbeddedDatabase, "EmbeddedDatabase", V_STRING, Array("HSQLDB", "FIREBIRD")) Then GoTo Finally
+		If Not SF_Utils._Validate(EmbeddedDatabase, "EmbeddedDatabase", V_STRING, Array("CALC", "HSQLDB", "FIREBIRD")) Then GoTo Finally
 		If Not SF_Utils._Validate(RegistrationName, "RegistrationName", V_STRING) Then GoTo Finally
+		If UCase(EmbeddedDatabase) = "CALC" Then
+			If Not SF_Utils._ValidateFile(CalcFileName, "CalcFileName") Then GoTo Finally
+			If Not FSO.FileExists(CalcFileName) Then GoTo CatchNotExists
+		End If
 	End If
 
 Try:
 	Set oDBContext = SF_Utils._GetUNOService("DatabaseContext")
 	With oDBContext
 		Set oDatabase = .createInstance()
-		oDatabase.URL = "sdbc:embedded:" & LCase(EmbeddedDatabase)
+		'	Build the url link to the database
+		Select Case UCase(EmbeddedDatabase)
+			Case "HSQLDB", "FIREBIRD"
+				oDatabase.URL = "sdbc:embedded:" & LCase(EmbeddedDatabase)
+			Case "CALC"
+				oDatabase.URL = "sdbc:calc:" & FSO._ConvertToUrl(CalcFileName)
+		End Select
 		'	Create empty Base document
-		Set FSO = CreateScriptService("FileSystem")
 		sFileName = FSO._ConvertToUrl(FileName)
 		'	An existing file is overwritten without warning
 		If FSO.FileExists(FileName) Then FSO.DeleteFile(FileName)
@@ -274,6 +293,9 @@ Finally:
 	Exit Function
 Catch:
 	GoTo Finally
+CatchNotExists:
+	SF_Exception.RaiseFatal(UNKNOWNFILEERROR, "CalcFileName", CalcFileName)
+	GoTo Finally
 End Function    '   ScriptForge.SF_UI.CreateBaseDocument
 
 REM -----------------------------------------------------------------------------
@@ -1196,4 +1218,4 @@ Private Function _Repr() As String
 End Function	'	ScriptForge.SF_UI._Repr
 
 REM ============================================ END OF SCRIPTFORGE.SF_UI
-</script:module>
+</script:module>
\ No newline at end of file
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py
index d94a7781cb97..57a67a0c9c3d 100644
--- a/wizards/source/scriptforge/python/scriptforge.py
+++ b/wizards/source/scriptforge/python/scriptforge.py
@@ -1472,8 +1472,9 @@ class SFScriptForge:
         def Activate(self, windowname = ''):
             return self.ExecMethod(self.vbMethod, 'Activate', windowname)
 
-        def CreateBaseDocument(self, filename, embeddeddatabase = 'HSQLDB', registrationname = ''):
-            return self.ExecMethod(self.vbMethod, 'CreateBaseDocument', filename, embeddeddatabase, registrationname)
+        def CreateBaseDocument(self, filename, embeddeddatabase = 'HSQLDB', registrationname = '', calcfilename = ''):
+            return self.ExecMethod(self.vbMethod, 'CreateBaseDocument', filename, embeddeddatabase, registrationname,
+                                   calcfilename)
 
         def CreateDocument(self, documenttype = '', templatefile = '', hidden = False):
             return self.ExecMethod(self.vbMethod, 'CreateDocument', documenttype, templatefile, hidden)


More information about the Libreoffice-commits mailing list