summaryrefslogtreecommitdiff
path: root/wizards
diff options
context:
space:
mode:
authorJean-Pierre Ledure <jp@ledure.be>2021-06-22 15:50:06 +0200
committerJean-Pierre Ledure <jp@ledure.be>2021-06-22 18:10:01 +0200
commit8467a8e0587011269e376a65a0e397e096a36cc5 (patch)
tree40eb769d3ee4f7d5dc0ba2e514c6dddbad521939 /wizards
parentce20614b630e50fbfcc82e4cd2f565b04dfb788e (diff)
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@ledure.be> Tested-by: Jenkins Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Diffstat (limited to 'wizards')
-rw-r--r--wizards/source/scriptforge/SF_UI.xba36
-rw-r--r--wizards/source/scriptforge/python/scriptforge.py5
2 files changed, 32 insertions, 9 deletions
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 = &quot;DOCUMENTERROR&quot; &apos; Requested document
Const DOCUMENTCREATIONERROR = &quot;DOCUMENTCREATIONERROR&quot; &apos; Incoherent arguments, new document could not be created
Const DOCUMENTOPENERROR = &quot;DOCUMENTOPENERROR&quot; &apos; Document could not be opened, check the arguments
Const BASEDOCUMENTOPENERROR = &quot;BASEDOCUMENTOPENERROR&quot; &apos; Id. for Base document
+Const UNKNOWNFILEERROR = &quot;UNKNOWNFILEERROR&quot; &apos; 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
&apos;&apos;&apos; Create a new LibreOffice Base document embedding an empty database of the given type
&apos;&apos;&apos; Args:
&apos;&apos;&apos; FileName: Identifies the file to create. It must follow the SF_FileSystem.FileNaming notation
&apos;&apos;&apos; If the file already exists, it is overwritten without warning
-&apos;&apos;&apos; EmbeddedDatabase: either &quot;HSQLDB&quot; (default) or &quot;FIREBIRD&quot;
+&apos;&apos;&apos; EmbeddedDatabase: either &quot;HSQLDB&quot; (default) or &quot;FIREBIRD&quot; or &quot;CALC&quot;
&apos;&apos;&apos; RegistrationName: the name used to store the new database in the databases register
&apos;&apos;&apos; If &quot;&quot; (default), no registration takes place
&apos;&apos;&apos; If the name already exists it is overwritten without warning
+&apos;&apos;&apos; CalcFileName: only when EmbedddedDatabase = &quot;CALC&quot;, the name of the file containing the tables as Calc sheets
+&apos;&apos;&apos; The name of the file must be given in SF_FileSystem.FileNaming notation
+&apos;&apos;&apos; The file must exist
&apos;&apos;&apos; Returns:
&apos;&apos;&apos; A SFDocuments.SF_Document object or one of its subclasses
+&apos;&apos;&apos; Exceptions
+&apos;&apos;&apos; UNKNOWNFILEERROR Calc datasource does not exist
&apos;&apos;&apos; Examples:
-&apos;&apos;&apos; Dim myBase As Object
+&apos;&apos;&apos; Dim myBase As Object, myCalcBase As Object
&apos;&apos;&apos; Set myBase = ui.CreateBaseDocument(&quot;C:\Databases\MyBaseFile.odb&quot;, &quot;FIREBIRD&quot;)
+&apos;&apos;&apos; Set myCalcBase = ui.CreateBaseDocument(&quot;C:\Databases\MyCalcBaseFile.odb&quot;, &quot;CALC&quot;, , &quot;C:\Databases\MyCalcFile.ods&quot;)
Dim oCreate As Variant &apos; Return value
Dim oDBContext As Object &apos; com.sun.star.sdb.DatabaseContext
@@ -230,27 +238,38 @@ Dim sFileName As String &apos; Alias of FileName
Dim FSO As Object &apos; Alias for FileSystem service
Const cstDocType = &quot;private:factory/s&quot;
Const cstThisSub = &quot;UI.CreateBaseDocument&quot;
-Const cstSubArgs = &quot;FileName, [EmbeddedDatabase=&quot;&quot;HSQLDB&quot;&quot;|&quot;&quot;FIREBIRD&quot;&quot;], [RegistrationName=&quot;&quot;&quot;&quot;]&quot;
+Const cstSubArgs = &quot;FileName, [EmbeddedDatabase=&quot;&quot;HSQLDB&quot;&quot;|&quot;&quot;FIREBIRD&quot;&quot;|&quot;&quot;CALC&quot;&quot;], [RegistrationName=&quot;&quot;&quot;&quot;], [CalcFileName]&quot;
If SF_Utils._ErrorHandling() Then On Local Error GoTo Catch
Set oCreate = Nothing
+ Set FSO = CreateScriptService(&quot;FileSystem&quot;)
Check:
If IsMissing(EmbeddedDatabase) Or IsEmpty(EmbeddedDatabase) Then EmbeddedDatabase = &quot;HSQLDB&quot;
If IsMissing(RegistrationName) Or IsEmpty(RegistrationName) Then RegistrationName = &quot;&quot;
+ If IsMissing(CalcFileName) Or IsEmpty(CalcFileName) Then CalcFileName = &quot;&quot;
If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not SF_Utils._ValidateFile(FileName, &quot;FileName&quot;) Then GoTo Finally
- If Not SF_Utils._Validate(EmbeddedDatabase, &quot;EmbeddedDatabase&quot;, V_STRING, Array(&quot;HSQLDB&quot;, &quot;FIREBIRD&quot;)) Then GoTo Finally
+ If Not SF_Utils._Validate(EmbeddedDatabase, &quot;EmbeddedDatabase&quot;, V_STRING, Array(&quot;CALC&quot;, &quot;HSQLDB&quot;, &quot;FIREBIRD&quot;)) Then GoTo Finally
If Not SF_Utils._Validate(RegistrationName, &quot;RegistrationName&quot;, V_STRING) Then GoTo Finally
+ If UCase(EmbeddedDatabase) = &quot;CALC&quot; Then
+ If Not SF_Utils._ValidateFile(CalcFileName, &quot;CalcFileName&quot;) Then GoTo Finally
+ If Not FSO.FileExists(CalcFileName) Then GoTo CatchNotExists
+ End If
End If
Try:
Set oDBContext = SF_Utils._GetUNOService(&quot;DatabaseContext&quot;)
With oDBContext
Set oDatabase = .createInstance()
- oDatabase.URL = &quot;sdbc:embedded:&quot; &amp; LCase(EmbeddedDatabase)
+ &apos; Build the url link to the database
+ Select Case UCase(EmbeddedDatabase)
+ Case &quot;HSQLDB&quot;, &quot;FIREBIRD&quot;
+ oDatabase.URL = &quot;sdbc:embedded:&quot; &amp; LCase(EmbeddedDatabase)
+ Case &quot;CALC&quot;
+ oDatabase.URL = &quot;sdbc:calc:&quot; &amp; FSO._ConvertToUrl(CalcFileName)
+ End Select
&apos; Create empty Base document
- Set FSO = CreateScriptService(&quot;FileSystem&quot;)
sFileName = FSO._ConvertToUrl(FileName)
&apos; 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, &quot;CalcFileName&quot;, CalcFileName)
+ GoTo Finally
End Function &apos; ScriptForge.SF_UI.CreateBaseDocument
REM -----------------------------------------------------------------------------
@@ -1196,4 +1218,4 @@ Private Function _Repr() As String
End Function &apos; 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)