Bericht mehrfach in Schleife öffenen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

Hallo zusammen,

ich bin gerade dabei, eine individuelle Serienmail per Makro zu erstellen. Ich lese die Empfänger aus der DB aus und arbeite dann in einer Schleife das Resultset ab. Jeder bekommt einen individuellen Bericht ect.

Den Bericht rufe ich innerhalb der Schleife so auf:

Code: Alles auswählen

'========= Bericht laden:
       Dim Context AS Object
       Dim Conn As Object
       Dim DB As Object
       Dim ReportDoc As Object
       Dim Args(2) As New com.sun.star.beans.PropertyValue
       Dim ReportName As String
       
       ReportName = "MeinPersönlicherBericht"
       Context=CreateUnoService("com.sun.star.sdb.DatabaseContext")
       DB=Context.getByName("MeineDB")
       Conn=DB.getconnection("","")
       Args(0).Name="ActiveConnection" : Args(0).Value=Conn
       Args(1).Name="OpenMode" : Args(1).Value="open"
	   Args(2).Name="Hidden" : Args(2).Value=true
       ReportDoc=DB.DatabaseDocument.ReportDocuments.loadComponentFromURL(ReportName,"_self",2,Args)
      
'========= Bericht als PDF unter TMP speichern:

DIM dokument AS OBJECT
dokument = ReportDoc

DIM filter AS STRING

IF dokument.supportsService( "com.sun.star.text.TextDocument" ) THEN
  filter = "writer_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) THEN
  filter = "calc_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.presentation.PresentationDocument" ) THEN
  filter = "impress_pdf_Export"
ELSEIF dokument.supportsService( "com.sun.star.draw.DrawDocument" ) THEN
  filter = "draw_pdf_Export"
Else
  MsgBox "Dokument-Typ unbehandelt."
  Exit Sub
End If

DIM Eigenschaften( 1 ) AS New com.sun.star.beans.PropertyValue

Eigenschaften( 0 ).Name = "FilterName"
Eigenschaften( 0 ).Value = filter

Eigenschaften( 1 ).Name = "CompressMode"
Eigenschaften( 1 ).Value = 0
dokument.storeToUrl( tmpURL, Eigenschaften( ) ) 

ReportDoc.close(true) 'Bericht schliessen

Der erste Durchlauf der Schleife funktioniert problemlos, aber beim Aufruf des 2. Berichts kommt es zum Fehler: "com.sun.star.IllegalArgumentException Message: ."
In dieser Zeile:

Code: Alles auswählen

       ReportDoc=DB.DatabaseDocument.ReportDocuments.loadComponentFromURL(ReportName,"_self",2,Args)
Muss ich den Bericht erst noch anderweitig beenden oder schließen?
Habt ihr eine Idee?
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bericht mehrfach in Schleife öffenen

Beitrag von F3K Total »

Hi,
ich weiß nicht ob es einen Unterschied macht, habe gerade eine DB von mir angesehen, bei der das klappt.
Ich verwende zum Öffnen:

Code: Alles auswählen

oreportdoc = thisdatabasedocument.reportdocuments.getbyname("Ausgabe")

    Dim args(0) as new com.sun.star.beans.PropertyValue
    args(0).Name = "Hidden"
    args(0).Value = true

   oreport = ocontroller.loadComponentWithArguments(com.sun.star.sdb.application.DatabaseObject.REPORT, "Ausgabe", FALSE,args() )
und zum Schliessen:

Code: Alles auswählen

oreport.close -1
Gruß R
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

Die Aufrufmethode mit "thisdatabasedocument" funktioniert ja mit meiner 3.1 Version noch nicht.

Beenden mit oreport.close -1 hilft leider nicht …
Gleicher Fehler wie vorher.
Zum Test habe ich auch mal 10s Pause eingebaut, hat aber auch keine Auswirkung :(
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bericht mehrfach in Schleife öffenen

Beitrag von F3K Total »

dann fällt mir noch

Code: Alles auswählen

oreport.dispose

vor oder hinter dem close ein.
Versuch macht kluch
R
EDIT
Stephan hat geschrieben:Da ich ja aber noch mit einer älteren OOo-Version arbeiten muss, gab es wohl die Ansprechbarkeit in Form von thisdatabasedocument noch nicht.
Warum eigentlich?
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

F3K Total hat geschrieben:dann fällt mir noch

Code: Alles auswählen

oreport.dispose

vor oder hinter dem close ein.
Hat auch nicht geholfen …
Im Basic-Buch von Thomas wurde noch auf eine "sichere Methode" von Andrew Pitonyak verwiesen und ist ja im Prinzip das Gleiche wie dein Vorschlag, ändert aber nichts am Fehler. Auch in einem aktuellen LibreOffice war das selbe Verhalten.

Code: Alles auswählen

if HasUnoInterfaces(ReportDoc, "com.sun.star.util.XCLoseable") then
	ReportDoc.close(true) 'Bericht schliessen
else
	ReportDoc.dispose
end if
Aber ich habe dennoch einen Weg gefunden:
Ich habe den Berichtsaufruf in ein anderes Makro ausgelagert - so geht's :D
F3K Total hat geschrieben:
Stephan hat geschrieben:Da ich ja aber noch mit einer älteren OOo-Version arbeiten muss, gab es wohl die Ansprechbarkeit in Form von thisdatabasedocument noch nicht.
Warum eigentlich?
Ab der Version 3.2 kam es immer zu nicht reproduzierbaren I/0 Fehlermeldungen wonach kein weiteres Arbeiten mehr möglich ist (OOo Neustart notwendig / alle Daten verloren). Es ließ sich nicht offenkundig auf ein einzelnes Makro oder Aktion zurückführen. Daher noch 3.1.1 …

Vielen Dank für deine Mühe!
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bericht mehrfach in Schleife öffenen

Beitrag von F3K Total »

Hallo geimist,
du schreibst von Fehlermeldungen, ich bin dem Link gefolgt, das Problem wurde damals nicht abgestellt.
Auch ich hatte zwischenzeitlich mit meinen .odb's solche Probleme. Konnte sie aber lösen, mal war es ein Dispatcher-Befehl der Ärger machte, mal ein Fehler mit updaterow und insertrow.
Es ist, glaube ich, der falsche Weg nur deshalb auf die z.T. echt guten Neuerungen zu verzicheten, wie du bereits mit ThisDatabasedocument leidlich erfahren hast.
Ich empfehle die Fehler zu beheben.

Gruß R
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

Habe ich auf jeden Fall noch vor :-)
Ich bin eigentlich auch eher der Typ, der eher zu schnell updatet … (die Neugier halt :lol: )
Ich würde am liebsten das aktuelle Apache-OO parallel installieren, aber das ist ja nicht mit dem älteren Benutzerverzeichnis kompatibel, d.h. ich könnte die ältere Version nicht weiter verwenden. Mal sehen - irgendwann wird es.
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

F3K Total hat geschrieben:…, mal war es ein Dispatcher-Befehl der Ärger machte, mal ein Fehler mit updaterow und insertrow.
# FÜHLERAUSTRECK (true)

Auch wenn es jetzt etwas pauschal ist, aber was konntest du an den Funktionen ändern, wenn sie doch 'normalerweise' funktionieren? Grob gesagt: entweder es geht, oder eben nicht. Manchmal hilft ja auch ein kleines 'wait', aber mehr fällt mir dann auch nicht ein …

# FÜHLERAUSTRECK (false)
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bericht mehrfach in Schleife öffenen

Beitrag von F3K Total »

Moinsen,
geimist hat geschrieben:aber das ist ja nicht mit dem älteren Benutzerverzeichnis kompatibel, d.h. ich könnte die ältere Version nicht weiter verwenden. Mal sehen - irgendwann wird es.
Dem ist nicht ganz so, du kannst für die parallele Instalation ein eigenes Benutzerverzeichnis, zumindest unter Windows und Linux, anlegen.
Dazu muss, nach der Installation, vor dem Erststart, der Pfad in der Datei Bootstrap.ini angepasst werden.
Gruß R
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: Bericht mehrfach in Schleife öffenen

Beitrag von geimist »

F3K Total hat geschrieben:Dem ist nicht ganz so, du kannst für die parallele Installation ein eigenes Benutzerverzeichnis, zumindest unter Windows und Linux, anlegen.
… ich bin doch ein Apfelkind ;-)
Erste Tests werde ich wahrscheinlich via Crossover ect. laufen lassen.
Kannst du dich noch erinnern, was du damals ändern musstest, um die Fehler abzustellen?
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bericht mehrfach in Schleife öffenen

Beitrag von F3K Total »

Nö, ausser dispatcher und update Probleme.
Seitdem lasse ich dispatcher - Befehle, die ich bis dato nur für den .pdf Export verwendet hatte, komplett weg. Das geht ja schließlich auch mit Storetourl oder Storeasurl.
Gruß R
Antworten