Seite 1 von 1

Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: So 9. Mär 2014, 17:08
von Vinosaurus
Hallo,

ich versuche derzeit LO verzweifelt dazu zu bewegen einen Serienbrief von der Kommandozeile aus zu drucken.
Mit dem Kommandozeilenparameter -p wird nur einfach gedruckt obwohl eine MySQL Tabelle eingebunden ist. Bei der Suche nach einer Makro-Lösung bin ich auch nicht fündig geworden. Per Makro-Aufzeichnung kommt nichts brauchbares zu stande.
Kennt vielleicht jemand einen Lösungsweg.

Hintergrund:
Eine Webanwendung (Intranet) erzeugt verschiedenene zu druckende Serienbriefe (diverse Firmenstandardbriefe welche mit Kundendaten angereichert sind). Die Daten sind in einer MySql Tabelle abgelegt. Per JavaScript wird via URL-Handler swriter mit dem entsprechenden Dokument aufgerufen was auch einschließlich einfachem Druck klappt.

Sollte sich hierfür eine Lösung finden, gibt es noch das Problem, dass ich per Makro noch einen Filter auf die Tabelle setzen möchte. Das klappt allerdings auch nur manuelle. Die Makro Lösungen welche ich gefunden habe bezogen sich immer auf Calc und nicht auf Writer/Base. Dieses Probleme ließe sich allerdings auch im Vorfeld mit verschiedenen Tabellen lösen, was allerdings nicht sehr elegant wäre.

Wünsche noch einen schönen Tag
Vinosaurus

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: So 9. Mär 2014, 18:00
von F3K Total
Hi,
dein Suchbegriff in den Foren lautet
MailMerge
Gruß R

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: So 9. Mär 2014, 22:16
von Vinosaurus
Hallo

danke für den Tipp. Das war genau das was ich gesucht habe! Da man sogar noch das Dokument wählen kann, übertrifft es meine Erwartungen noch.

Allerdings bin ich jetzt noch auf ein Problem gestoßen. Die SQL Abfrage funktioniert nicht. Wenn ich CommandType =0 (Table) setze funktioniert alles. Wenn ich aber mit CommandType=1 oder 2 eine Abfrage laufen lasse, dann wird zwar für jeden Datensatz eine Seite gedruckt, aber die Felder bleiben leer. Irgendwie haben die erzeugten Feldnamen nicht die richtige Bezeichnung könnte ich mir vorstellen.

select * from lhdb.dokument_versand

Die Abfrage funktioniert sowohl in Base als auch in PHPmyAdmin wie sie soll.


Code: Alles auswählen

Sub Test
Dim MM as Object
MM = CreateUnoService("com.sun.star.text.MailMerge")
With MM
'Output file
'   .OutputType = com.sun.star.text.MailMergeType.FILE
'   .OutputUrl = "file:///home/peter/"
'   .FileNamePrefix = "MM_"
'   .SaveAsSingleFile=True
'Output email
   .DocumentURL = "file:///c:\diverses\lh_test.odt" 'sourceDocName
   .OutputType = 1 '  1 Drucker   2 File    3 Mail
   .DataSourceName =  "cake" 'Datenbankname von Libreoffice => MySql DB registriert
   .CommandType = 1 '0=Table   1 = predefined query, 2 SQL
 ' .Command = "select * from lhdb.dokument_versand"  
   .Command = "Abfrage1"     ' "select * from lhdb.dokument_versand"  
'   .Subject = "Betreff"
'   .MailBody = "Das ist ein Test"
'   .AddressFromColumn = "Email"
'         .BlindCopiesTo= Array("x@x.xx")
'  .SendAsAttachment = 1
'  .AttachmentName = "xtest.pdf"
'   .AttachmentFilter = "writer_pdf_Export"
   .execute(Array())
'   .dispose()
End With
'MsgBox "Versendet!" 'HInweis Mailvorgang abgeschlossen
End Sub

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: Mo 10. Mär 2014, 08:12
von pmoegenb
Hallo Vinosaurus,
das Problem dürfte im Serienbrief-Dokument zu suchen sein.

Der qualifizierte Name eines Seriendruck-Feldes besteht aus Datenbank.Tabelle.Feldname, bzw. Datenbank.Abfrage.Feldname. Soll der Seriendruck bei gleichbleibenden Feldnamen für eine andere Datenbank, Tabelle oder Abfrage ausgeführt werden, muss zuvor über Bearbeiten/Datenbank austauschen... die Datenbank, Tabelle oder Abfrage zugeordnet werden.

Wie dies als Makro vonstatten geht kann ich Dir leider mitteilen, nach dem hier lediglich der Austausch der Datenbank beschrieben ist.

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: Mo 10. Mär 2014, 21:19
von Vinosaurus
Hallo Peter,

danke für Deinen Ansatz. Irgendwo scheint dort das Problem zu liegen.
Die Feldnamen lauten auf die genutzte Datenbank/Tabelle (z.B. cake.lhdb.dokument_versand.benutzer) Wahrscheinlich erzeugt die Abfrage anders lautende Feldnamen. Aber wie heißen diese dann? Über "as" lässt sich in der Abfrage ja noch etwas verändern, solange kein Punkt drin vor kommt.
Für "Datenbank austauschen" muss ich ja irgendwas passendes zum Austauschen haben.

Gruß
Vinosaurus

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: Mo 10. Mär 2014, 21:23
von F3K Total
Hi,
wenn möglich, versuch mal eine Ansicht anstelle einer Abfrage zu verwenden.
Gruß R

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: Do 13. Mär 2014, 09:33
von Vinosaurus
Hallo

ein View funktioniert genauso wie eine ganze Tabelle (Commandtype=0). Damit werde ich wohl irgendwie zum Ziel kommen, in dem ich die Select Anweisung vorher ausführe innerhalb des Makros.
Abfragen aus der ODB Datenbank funktionieren dann, wenn man einzelne Serienbrieffelder ensprechend benennt. Ein neue Zuordnung über "Datenbank austauschen" wird für Abfragen nicht unterstützt. Da die Abfragen nicht zur Laufzeit vom Makro verändert werden können (oder ich weiß nicht wie es geht) ist der Weg über ein View der wohl gangbarste.

Falls jemand wissen sollte wie die Benennung der Felder/Datenbank/Tabelle erfolgen muss, damit es mit einer Select-Anweisung(Commandtype=2) funktioniert wäre ich dankbar - auch in einem Jahr noch. Nachdem ich eine Flasche Grauburgunder lang alle mir erdenklichen Möglichkeiten durchprobiert habe, kapituliere ich fürs erste.

Prost
Vinosaurus

Re: Seriendruck/Serienbrief von der Kommandozeile aus

Verfasst: Do 13. Mär 2014, 10:17
von pmoegenb
Hallo Vinosaurus,
Vinosaurus hat geschrieben:Falls jemand wissen sollte wie die Benennung der Felder/Datenbank/Tabelle erfolgen muss, damit es mit einer Select-Anweisung(Commandtype=2) funktioniert wäre ich dankbar - auch in einem Jahr noch. Nachdem ich eine Flasche Grauburgunder lang alle mir erdenklichen Möglichkeiten durchprobiert habe, kapituliere ich fürs erste.
Du hast dann wenigstens gut geschlafen.

Dannenhöfer hat hier den Austausch einer Datenbank beschrieben, Du könntest dann, falls Du es noch nicht getan hast, testen, ob Du den Namen der Abfrage gleich mitgeben kannst. Wie z. B.

Code: Alles auswählen

Sub databasechange
  Doc = ThisComponent
  TextFelderEnumration = Doc.getTextFields.createEnumeration
    While TextFelderEnumration.hasMoreElements()
      TextField = TextFelderEnumration.nextElement()
      If TextField.supportsService("com.sun.star.text.TextField.Database") Then  
           textfield.textfieldmaster.databasename="Datenbank.Abfrage1"
      end if
  Wend
end sub