Autor Thema: ExcelExport als Background Thread / Agent  (Gelesen 8495 mal)

Offline booltrue

  • Frischling
  • *
  • Beiträge: 42
ExcelExport als Background Thread / Agent
« am: 18.07.19 - 10:17:34 »
Hallo,

ich habe eine ExcelExport Funktion, die durch einen Button getriggert wird.
Das möchte ich nun in einen Hintergrundthread / Agent verschieben,
der weiterhin von dem Button getriggert wird.

Was ich gemacht habe, ich habe die ExcelExport Funktion in einen Agent kopiert, der folgendermaßen konfiguriert ist:
- Auslöser "Ereignis"
- Auswahl im Menü 'Aktionen'
- Ziel 'Keine' (wenn hier etwas anderes gewählt wird, kommt ein Notes Fehler)
- Im Hintergrund-Client-Thread ausführen

Der Button ruft den Agent auf:
- mit Run funktioniert das auch, nur eben läuft das ganze nicht im Hintergrund
- rufe ich den Agent mit RunOnServer auf, passiert gar nichts

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ExcelExport als Background Thread / Agent
« Antwort #1 am: 18.07.19 - 10:47:03 »
Hast Du Excel auf dem Server installiert?

Offline booltrue

  • Frischling
  • *
  • Beiträge: 42
Re: ExcelExport als Background Thread / Agent
« Antwort #2 am: 18.07.19 - 10:55:47 »
Ah ok, nein.
Das läuft nur auf den Clients.
Excel muß für RunOnServer auf dem Server installiert sein?

Gibt es eine andere Möglichkeit?

Offline ronka

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Was macht der hier denn, muß der überall sein ?
    • das nächste DominoCamp kommt in Juni 2023
Re: ExcelExport als Background Thread / Agent
« Antwort #3 am: 18.07.19 - 11:22:42 »
Vielleicht solltest du mal überlegen was du selber mit "Hintergrund" meinst.

Ich nehme an das die Datei die exportiert wird LOKAL (oder auf ein netzlaufwerk in direkten zugriff des Users) Gespeichert werden muss, oder ?

Wenn ja, dann hast du keine andere wahl als es auch dort auszuführen.

wenn du mit "Hintergrund" meinst das der User weiter arbeiten kann ohne einschränkungen, dann brauchst du einen 2. Process (wie z.B. Excel) das dort alles ausführt. 
das neueste von Notes und Domino auf den DominoCamp vom 19 bis 21 Juni 2023 auf www.DominoCamp.de

Offline booltrue

  • Frischling
  • *
  • Beiträge: 42
Re: ExcelExport als Background Thread / Agent
« Antwort #4 am: 18.07.19 - 11:28:44 »

User exportieren damit eine Auswahl des aktuell geöffneten Views.
ExportFunktion->Excel wird geöffnet->Daten werden in Excel geschrieben
Passiert alles lokal bei den Usern selber.

Beim Export wird leider für dessen Dauer der Notes Client geblockt.

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re: ExcelExport als Background Thread / Agent
« Antwort #5 am: 18.07.19 - 11:59:23 »
Ah ok, nein.
Das läuft nur auf den Clients.
Excel muß für RunOnServer auf dem Server installiert sein?

Gibt es eine andere Möglichkeit?

Geht auf dem Server auch ohne Excel. Mit Java.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline booltrue

  • Frischling
  • *
  • Beiträge: 42
Re: ExcelExport als Background Thread / Agent
« Antwort #6 am: 18.07.19 - 12:03:39 »

Hast du da ein Beispiel oder einen Ansatz für mich?

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ExcelExport als Background Thread / Agent
« Antwort #8 am: 18.07.19 - 12:34:43 »
1. Woher weiß der Agent bei RunOnServer, welche Dokumente markiert sind? Musst Du dem irgendwie mitgeben. UnprocessedDocuments wird sicherlich nicht funktionieren

2. Wartet der Client auch, bis das RunOnServer ausgeführt wurde

Natürlich kann man das mit STRG+Pause abbrechen, aber sag das den Usern, dann brechen die jeden Prozess, der denen zu lange dauert, mit STRG+Pause ab.

Dauert das wirklich so lange, ein paar markierte Dokumente in Excel zu schreiben, dass das ein Problem darstellt? Vielleicht kann die Routine optimiert werden. Um wieviele Dokumente geht es denn?

Offline Patrick Schneider

  • Aktives Mitglied
  • ***
  • Beiträge: 227
Re: ExcelExport als Background Thread / Agent
« Antwort #9 am: 18.07.19 - 13:13:13 »
https://de.m.wikipedia.org/wiki/Apache_POI

Zitat
Das Apache-POI-Projekt enthält die folgenden Teilkomponenten:

POIFS (Poor Obfuscation Implementation File System): Diese Komponente liest und schreibt Dateien in Microsofts OLE-2-Compound-Document-Format. Beim OLE-2-Compound-Document-Format handelt es sich um ein Dateisystem, in dem die Daten eines Microsoft-Office-Dokuments in Form von Dateien abgelegt werden. Das Wort Obfuscation spielt darauf an, dass dieses Dateisystem etwas verschleiert ist.
HSSF (Horrible Spreadsheet Format) und XSSF: Diese Komponente liest und schreibt Dateien im Excel-Format (Excel-97, Excel-XP, Excel-2003, Excel-2007, Excel-2008).
HPSF (Horrible Property Set Format): Diese Komponente liest und schreibt Informationen über die Dokumenteigenschaften einer Datei im Microsoft-Office-Format (»Datei → Eigenschaften«).
HWPF (Horrible Word Processor Format) und XWPF: Diese Komponente liest und schreibt Dateien im Word-Format (Word-97, Word-XP, Word-2003, Word-2007). Die Komponente befindet sich im Scratchpad (siehe unten).
...
Danke - made my day  ;D

Offline booltrue

  • Frischling
  • *
  • Beiträge: 42
Re: ExcelExport als Background Thread / Agent
« Antwort #10 am: 18.07.19 - 13:30:37 »

Wie gesagt, mit RunOnServer kann ich den Agent ja nicht starten, da kommt eine Fehlermeldung.
Starten des Agent geht nur mit Run.

Der Button, der den Agent ausführt, ruft diesen nur auf
Set agent = db.GetAgent("test")
Call agent.RunOnServer

Der Rest passiert im Agent selber.
Habe wie gesagt nur die Exportfunktion,
die vorher der Button ausgeführt hat, in den Agent kopiert.

Es wird der ganze View exportiert, aktuell ~5000 Zeilen.
Die Routine ist schon ziemlich schnell, jedoch blockiert der Client für ~5 bis 10s

Beim Exportieren von selektierten Dokumenten hatte ich Probleme,
da im View Multivalues angezeigt werden, aber nicht in einem Feld,
sondern verteilt auf mehrere Zeilen.


Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re: ExcelExport als Background Thread / Agent
« Antwort #11 am: 18.07.19 - 13:50:22 »
Das da „eine Fehlermeldung „ kommt, ist doch logisch, oder? Wenn auf dem Server kein Excel installiert ist, dann rennt der Code gegen die Wand, wenn Excel angesprochen wird.
Mitdem Java Code brauchst du aber kein Excel mehr. Kannst es sogar auf Linux laufen lassen.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline PromITheus

  • Aktives Mitglied
  • ***
  • Beiträge: 131
Re: ExcelExport als Background Thread / Agent
« Antwort #12 am: 19.07.19 - 10:09:02 »
Ich fasse mal die 3 Ansätze zusammen. Du könntest...

1. Das Ganze über Java laufen lassen

2. Es über Excel auf dem Server laufen lassen
Dafür muss Excel auf dem Server installiert sein. Außerdem musst du sicherstellen, dass der Server die markierten Dokumente(oder View) übermittelt bekommt.
Der Server muss den Pfad für die Ablage der Datei kennen und auch Zugriff darauf haben.

3. Du lässt es weiter beim Benutzer laufen (da 5-10 Sekunden zumutbar sind)
Beim Benutzer "verschönern" z.B.:
- Excel beim Benutzer ausblenden mit "objxl.visible = False"
- Über die Statuszeile den aktuellen Stand des Exports ausgeben, per "Print Starte Excel , Print Exportiere Dokument 1..."
- Meldungsfenster vorschalten."Export starten? Kann 10 Sekunden dauern..."
« Letzte Änderung: 22.07.19 - 07:27:55 von PromITheus »
Gruß Marcel

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ExcelExport als Background Thread / Agent
« Antwort #13 am: 19.07.19 - 12:32:32 »
Zu 1. (falls das auf dem Server laufen soll) und 2.:

Die Wartezeit bleibt erhalten, da das Script auf die Beendigung des Agenten auf dem Server wartet - hatte ich weiter oben schon mal erwähnt (vielleicht gibt es bei Java eine Möglichkeit, das parallel laufen zu lassen, weiß ich aber nicht, nicht mein Gebiet).

Bei 5-10 Sekunden ist die Frage, wieviel schneller das auf dem Server läuft. Vielleicht gehst Du dann runter auf 4-8 Sekunden. Wow, da lohnt sich der Aufwand ...

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.870
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: ExcelExport als Background Thread / Agent
« Antwort #14 am: 19.07.19 - 13:24:14 »
Also mich wundert, dass bisher niemand die offensichtliche Lösung genannt hat: ich löse sowas immer mit üblicherweise 3 Agenten.

Der erste Agent hat nur 2 Zeilen Formelsprache:

Code
@Command([RunAgent] ; "Agent2" );
@Command([RunAgent] ; "LongRunningBackgroundAgent" );

Im Agent2 werden die ganzen Vorbereitungen gemacht (reagieren auf Selektionen, User- Abfragen, z.B. Dateiname festlegen, etc). Die Informationen schreibt der Agent dann in ein "JobDokument".
LongRunningBackgroundAgent hat die Eigenschaft "im Client Hintergrundthread laufen" aktiviert und öffnet das JobDokument und arbeitet die ab. Der User muss nicht auf den Agenten warten, weil der aufrufende Agent 1 sofort terminiert, nachdem er die zweite Zeile Code abgearbeitet hat. Die Laufzeit des Hintergundagenten sieht man dann am Laufband unten Rechts im Client...

Die übergabe des JobDokuments kann man entweder über einen Notes.ini- Eintrag mit dessen UNID machen oder indem man ein Dokument pro User / Aktion erstellt, das dann in einer Ansicht gesucht werden kann...

Natürlich kann man hierbei dann nicht auf das Ende des Agenten reagieren, aber das könnte man mit einem LotusScript- Timer in einer offenen Maske machen, der z.B. prüft, ob die Ausgabedatei fertig ist.

Etwas komplizierter das Ganze, aber funktioniert zuverlässig.


ABER: Wenn das generieren einer Excel- Datei aus Notes- Daten so lange dauert, dass es dem User zu lange geht, dann ist was mit dem Code falsch. Ich habe hier Excel- Export- Code, der 20.000 Dokumente innerhalb weniger Sekunden verarbeitet...
« Letzte Änderung: 19.07.19 - 13:29:03 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz