VB6 und MailMerge, Ergebnis leere Felder

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

jpmart
Beiträge: 1
Registriert: Do, 06.05.2010 21:57

VB6 und MailMerge, Ergebnis leere Felder

Beitrag von jpmart »

Hi Leute,

ich entwickle gerade eine Schnittstelle zu einem kommerziellen Produkt (WinHaus - Hausverwaltung). In diesem Zuge sollen Serienbriefe erstellt werden. Alles schön - alles wird gut! - Ich habe einen Code erzeugt und zunächst aus einem bereitgestellten CSV-Flat-File eine odb erzeugt, die ich erfolgreich dem Wunschtext zuordne. Nach dem ich den Merge beauftragt habe, werden so viele Dokumente erzeugt, wie Datensätze vorhanden sind. Das ist schön! - hat aber den Nebeneffekt, dass die Felder in den neuen Dokumenten leer sind. Wenn ich das Basisdokument öffne und über den Serienbriefmanager personalisieren in Auftrag gebe, funktioniert das alles wunderbar, auch mit dem automatisch zugewiesenen Dokument. Hat irgendwer eine Idee, wo genau ich auf dem Schlauch stehe? - Ach, es wäre noch schön, wenn nur eine Datei mit den einzelnen Dokumnten erzeugt werden würde. Hier nun mein Code:

Code: Alles auswählen

Dim oServiceManager As Object
    Dim oMailMerge As Object
    Dim MMArgs(0 To 6)
    Dim Names

    Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
    
   'Creating a public object to use reflection for structured properties
   Set objCoreReflection = objServiceManager.createInstance("com.sun.star.reflection.CoreReflection")
   'Creating a mailmerge object
   Set objmailmerge = objServiceManager.createInstance("com.sun.star.text.MailMerge")
    
   Set objDesk = objServiceManager.createInstance("com.sun.star.frame.Desktop")
    
   'connecteren met de DatabaseContext
   Set DatabaseContext = objServiceManager.createInstance("com.sun.star.sdb.DatabaseContext")
   
   
   
   
   
   
   'Before we can start the merge: creating and registering the datasource
   'Creating a empty datasource
   Set dbInstance = DatabaseContext.createInstance()
    
    ' First rename DatabaseBasic
    'tagesdatum$ = Format$(Now, "yyyymmddhhss")
    'oldOne$ = "c:\temp1\WinHaus.csv"
    'NewOne$ = "c:\temp1\WinHaus" + tagesdatum$ + ".csv"
    'FileCopy oldOne$, NewOne$
    'Kill oldOne$
    NewOne$ = "WinHaus"
    
    
   'DatabaseDocument is een storable Object. The normale dbInstance isn't:
   'dbInstance.storeAsURL doesn't work. dd.storeAsURL does
   Set dd = dbInstance.DatabaseDocument
    
        'Datasource parameters
        Dim csvParams(0 To 3)
        Set csvParams(0) = OOO_MakeProperty("Extension", "csv", objServiceManager)
        Set csvParams(1) = OOO_MakeProperty("HeaderLine", True, objServiceManager)
        Set csvParams(2) = OOO_MakeProperty("FieldDelimiter", ",", objServiceManager)
        Set csvParams(3) = OOO_MakeProperty("Charset", "iso-8859-1", objServiceManager)
    
        dbInstance.Info = csvParams
        dbInstance.URL = "sdbc:flat:file:///C:/temp1/"
    
        ' Datasource has to be saved as an odb - file before it can be registered in OpenOffice
        Dim array1()
        dd.storeAsURL "file:///C:/temp1/WinHausData1.odb", array1
    
    
    'Registering the datasource in OpenOffice
    'dsName = Mid$(NewOne$, 1, Len(NewOne$) - 4)
    dsName = NewOne$
   'if there is already a Datasource with this name: remove it
   If DatabaseContext.hasByName(dsName) Then
      DatabaseContext.revokeObject (dsName)
   End If
    
   'Registering the datasource
   DatabaseContext.registerObject dsName, dbInstance
   
   dd.store
   dd.Close (True)
   Set dd = Nothing


   'And now the real mailmerge
   Dim args(0 To 6)
    
   ' Template
   Set args(1) = OOoNamedValue("DocumentURL", "file:///C:/temp1/WinHausText.odt")
   ' Datasource. This datasource points to a dir
   Set args(0) = OOoNamedValue("DataSourceName", "file:///C:/temp1/WinHausData1.odb")
   
   ' CommandType = 0 => The field 'Command' must contain a table-name of the datasource
   ' in this case: datasource is a dir: 'Command' must contain a csv-file from that dir. (without the csv-extension)
   Set args(2) = OOoNamedValue("CommandType", 0)
   Set args(3) = OOoNamedValue("Command", dsName)
   
   ' OutputType = 2 => output to file
   Set args(4) = OOoNamedValue("OutputType", 2)
   
   'Dir for the results
   Set args(5) = OOoNamedValue("OutputURL", "file:///C:/temp1/")
   
   'Prefix for the results
   Set args(6) = OOoNamedValue("FileNamePrefix", "new")
       
   'start the merge
   objmailmerge.Execute args()

   Set objmailmerge = Nothing

    Set dbInstance = Nothing
Set DatabaseContext = Nothing
Set objDesk = Nothing

Set objCoreReflection = Nothing




    Set objServiceManager = Nothing