Autor Thema: XML-Datei aus Mail einlesen  (Gelesen 7552 mal)

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
XML-Datei aus Mail einlesen
« am: 18.10.06 - 10:15:58 »
Hallo zusammen.

Ich weiß, dieses Thema wurde bereits des öfteren angesprochen. jedoch konnte ich in den verschiedenen Foren keine befriedigende Antwort finden. Vielleicht hat ja einer von euch eine Idee, bzw. einen Lösungsansatz.

Folgende Herausforderung stellt sich mir:

Per E-Mail bekomme ich ein XML-File in eine speziell hierfür eingerichtete Mail-In-Datenbank.
Die dort eingehenden XML-Files möchte ich jetzt gerne per Lotus Script Agent verarbeiten.
Mit verarbeiten meine ich, den Inhalt des XML-Files analysieren, dann einen bestimmten Inhalt (ein Ergebnis einer Geräteprüfung) in ein anderes Dokument (befindet sich in einer anderen DB) schreiben.

Das Auslesen des XML-Files von einem lokalen Dateipdfad (C:\Temp\xxx.XML) ist nicht das Problem.
Jedoch habe Schwierigkeiten mit dem Auslesen des XML-File, solange es sich noch in der E-Mail befindet (will es nicht Lokal abhängen).

Ist es nicht möglich, das XML-File als Objekt (sei es ein EmbeddedObject oder Attachment) abzugreifen und den Inhalt zu analysieren? Mit Java-Script geht das. Da ich aber Java-Script nicht so gut beherrsche, suche ich nach einer Lösung für Lotus Script.

Ich hoffe, einer von euch hat eine Idee. Ich will keine komplette Lösung. Ein Ansatz würde reichen :-)

Und???

Greetz

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #1 am: 18.10.06 - 11:26:17 »
Die Frage geht doch in Richtung von: (oder)  ???
Kann NotesStream ein NotesEmbeddedObject als Quelle nehmen.
Nach allem, was ich so auf die schnelle gelesen habe, benötigt NotesStream immer eine Datei als Quelle.
In diesem Fall müßtest du die Datei kurz in ein temporäres Verzeichnis kopieren und von dort auslesen (eventuell nicht so schlimm. Mußt eben einen 2. Agenten schreiben, der da manchmal ein bischen aufräumt, d.h. alte Dateien löscht).
Mit einem Java Agenten liesse sich das vermutlich auch irgendwie ohne diesen Zwischenschritt erledigen. Mit LotusScript hängts aber wohl an dieser: Was kann NotesStream als Quelle nehmen? Frage.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #2 am: 18.10.06 - 11:48:31 »
Hallo Axel.

Genau da ist das Problem. Ich will es nicht Lokal wegspeichern, auswerten und dann wieder entfernen. Die Lösung mit dem temporär lokal auf die Platte schieben gefällt mir nicht. Ein Notesstream kann nur einen String (Dateipfad) aufnehmen.
Aber evtl. gibt es eine andere Variante, um ein XML-File direkt als Objekt zu verarbeiten. Java kann das ja auch :-)

Greetz

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: XML-Datei aus Mail einlesen
« Antwort #3 am: 18.10.06 - 12:53:46 »
Hallo Greetz,

trotz längerer Suche ist es mir bisher nicht gelungen in LS eine eingebettetes Objekt ohne Zwischenspeichern auf der Platte zu verarbeiten. LS sieht dies einfach nicht vor.

Gruß

André

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #4 am: 18.10.06 - 13:14:20 »
Hallo.

Siehste, und das genau ist meine Befürchtung. Werde um Java-Script wohl nicht umhin kommen und ein bißchen Eigenstudium betreiben. Die Designerhilfe liefert ja umfangreiche Beispiele.

Danke erstmal :-)

Greetz

Michael

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #5 am: 18.10.06 - 15:56:54 »
Mit JavaScript kannst du aber sicher auch nicht Attachments und eingebettete Objekte auslesen.
Nur wenn das xml als Text im Inhalt des body Feldes der Mail ist, dann geht das sicher.
Dann täte es aber auch ein Backend-Agent in Java, was ich für die bessere Lösung halte.


Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #6 am: 18.10.06 - 16:09:36 »
Hi.

So sieht das aus. Bin auch schon darauf gestoßen.
Wie könnte so ein Backend-Agent aussehen? Hast Du ein Beispiel parat?
Bei dem ganzen Java-gezuppel wird einem ja ganz anders. Hatte zwar während des Studiums einen Grundkurs, aber der hat wohl seine Wirkung verloren...

Greetz

Michael

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #7 am: 18.10.06 - 17:05:26 »
schnell geschrieben:

Code
import lotus.domino.*;
import java.io.StringReader;

public class JavaAgent extends AgentBase {

	public void NotesMain() {
		System.out.println("hallo"); 
		try {
			Session session = getSession();
			AgentContext agentContext = session.getAgentContext();
		
		String xmlIn = "<?xml version=\"1.0\"?><root><kindOfElement>inhalt</kindOfElement></root>";
		StringReader sr = new StringReader(xmlIn); 
		
		nu.xom.Document doc = null; 
		//nu.xom.Document doc = new nu.xom.Document(sr); 
		nu.xom.Builder parser = new nu.xom.Builder();
		doc = parser.build(sr);
		nu.xom.Attribute bonusAttribute = new nu.xom.Attribute("bonus", "attribute"); 
		nu.xom.Element el = new nu.xom.Element("bonusNode"); 
		el.appendChild("bonus text content"); 		
	el.addAttribute(bonusAttribute); 
		
		nu.xom.Element root = doc.getRootElement(); 
		root.appendChild(el); 
		System.out.println(">" + doc.toString());
		System.out.println(">>>" + doc.toXML());  

		} catch(Exception e) {
			e.printStackTrace();
		}
	}
} 
getestet in Notes 7.
ABER: Du müsstest erst einmal die xom Library von Elliotte Rusty Harold einbinden.
http://www.xom.nu/
Die xom-1.1.jar. (sieht so aus wie in Screenshot. Der Edit Project Button im Java Projekt.
Läuft. Ich habs getestet.

System.out.println wird in Notes-Menü File:Tools:Show in Java Debug Console ausgegeben.

Wie du siehst generiere ich das nu.xom.Document aus einem String.
Später werden dann mit der xom Api ein Element, 1 Attribut und 1 Textnode hinzugefügt.

Jetzt weiss ich auch, dass meine Lieblings-XML-Library XOM von Eliotte Rusty Harold in Notes 7 funktioniert (hat mich immer schon interessiert).  ;D

Gruß Axel

« Letzte Änderung: 18.10.06 - 17:08:52 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #8 am: 18.10.06 - 17:26:38 »
Ergebnis sieht dann so aus:
Code
hallo
>[nu.xom.Document: root]
>>><?xml version="1.0"?>
<root><kindOfElement>inhalt</kindOfElement><bonusNode bonus="attribute">bonus text content</bonusNode></root>
wie man sieht, sind bonusNode, bonus="attribute" und bonus text content an die konkreten Stellen reingefügt worden.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #9 am: 19.10.06 - 08:03:46 »
Guten Morgen Axel.

Vielen Dank für die schnelle Antwort und einem garantiert funktionierenden Beispiel.
Wie jedoch Eingangs beschrieben würde ich gerne das XML-File direkt aus der E-Mail einlesen ohne vorher das File lokal abzulegen  oder den Code zu extrahieren.
Aus Mangel an Java-Know-How und der schwindenden Zeit zur Realisierung einer Lösung werde ich mich vorerst für die Lotus-Script-Variante, dem temporären, lokalen wegschreiben, dann einlesen und anschließendem Löschen des Files entscheiden.

Nochmals vielen Dank  :)

Und falls doch noch jemand eine gurte Idee hat, so kann er den Thread gerne wieder aufgreifen.

Greetz

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: XML-Datei aus Mail einlesen
« Antwort #10 am: 19.10.06 - 10:16:29 »
läuft auf dem Server der HTTP Task? Dann könntest Du den Strom des Attachments über URL einlesen.
mit Java auf die URL http://Server/__replikId.nsf/0/[UNIDderMail]/$file/[NameDesAttachments]?Open
Und dann die Daten so als Strom ins Java bringen.
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #11 am: 19.10.06 - 10:20:49 »
Moin :-)

Ja, es handelt sich dabei um einen Domino-Server, auf dem der http-Task läuft.
Das ist eine gute Idee, die ich mir auf jeden Fall mal durch den Kopf gehen lassen werde.

Danke.

Gruß

Michael

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #12 am: 19.10.06 - 10:39:06 »
Attachments in Notes-Mails kann man vermutlich auch irgendwie mit Activation.jar auslesen.
Ich glaub mein Büro-Nachbar macht sowas in der Art (wenn ich das gestern richtig mitbekommen hab).
Werd den mal fragen, ob man das dafür benutzen kann.
Der ist aber noch nicht da (für den ist Mittag um ca. 16:00 Uhr und um 23:00 Uhr Feierabend).

Gruß Axel



Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #13 am: 19.10.06 - 11:44:22 »
Aber Hallo...

Ihr seid so gut zu mir. Wenn Du was rauskriegen könntest, dann wäre das echt super.
Bin für jede Hilfe dankbar.
Ein Weltklasse-Forum hier :-)

Gefällt mir.

greetz

Michael

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #14 am: 19.10.06 - 15:47:05 »
Vielleicht geht es mit der Klasse MIMEEntity.
Falls ich mich recht erinnere kann man damit irgendwie eine von AUSSEN kommende Mail in mime entities erlegen (z.B. ein Attachment?). Und ein Mime Entity kann man in einen Stream laden.
Das mit Activation.jar ist doch ein bischen anders als ich dachte.
Ich werd auf jeden Fall dran bleiben. Das kann aber dauern, weil ich eben eigentlich z.Zt. anderweitig beschäftigt bin.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #15 am: 19.10.06 - 15:50:18 »
Moin Axel.

Ist doch kein Thema. Bis dahin werde ich mir mit dem temporär lokal wegspeichern helfen.
Läuft schon ganz gut... (bis jetzt)
Die elegantere Lösung kann ich dann immer noch in einer höheren Version implementieren.

Greetz

Michael

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #16 am: 20.02.07 - 17:01:25 »
Hallo.

Ich möchte nochmal kurz zu diesem Thema Stellung beziehen.
Ich habe mich also jetzt zunächst dazu entschieden, die XML-Files temporär auf dem Server abzulegen, sie dann zu verarbeiten und anschließend wieder zu löschen. Das klappt sehr gut. Solange der dafür erstellte Agent auf einem Windows-Server läuft.
Wir haben unter anderem Linux im Einsatz.
Das merkwürdige ist, wenn der Agent auf einem Linux-Server läuft und die Dateien temporär im Dateisystem von Linux ablegt, dass das jeweilige XML-File nicht eingelesen werden kann.
Das File wird immer mit 0 Bytes gehändelt, dabei steht da eine ganze Menge drin.


Jemand eine Ahnung woran das liegen könnte?

Greetz

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML-Datei aus Mail einlesen
« Antwort #17 am: 21.02.07 - 18:45:54 »

Das File wird immer mit 0 Bytes gehändelt, dabei steht da eine ganze Menge drin.[/b]
Vielleicht kannst du mal die entscheidende Stelle im Source Code posten. Das hab ich allerdings noch nie gehört. FileNotFound Exceptions kenne ich aber zu genüge.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Michael Gerdes

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
Re: XML-Datei aus Mail einlesen
« Antwort #18 am: 22.02.07 - 08:16:03 »
Hi.
Danke für die umgehende Antwort.
Hier der dafür verantwortliche Script-Code:

Zunächst einmal werden XML-Dateien aus einer E-Mail gelöst...

...
'Datei in die vorgegebene Freigabe auf einem Fileserver kopieren und eine laufende Nummer anhängen
filename = Strleft(o.source, ".") & "_" & attachcounter & "." & fileextension 'Dateinamen des Attachments einlesen
Call o.ExtractFile(freigabeFileServer & filename)
...

anschließend wird die Datei wieder in einen Notesstream eingelesen und vom domParser verarbeitet...

...
'erstes XML-File einlesen
xml_in_filename = Dir$( freigabeFileServer, 0)
Do While xml_in_filename <> ""
   If xmlcontinue = True Then
   Else
      Goto Errhandle
   End If   
   xml_in_filepath = freigabeFileServer & xml_in_filename
   Set xml_in=session.CreateStream            
   If Not xml_in.Open( xml_in_filepath) Then
      Print "Cannot open " &  xml_in_filepath,, "XML file error"
      Exit Sub
   End If
   If xml_in.Bytes = 0 Then
      Print  xml_in_filepath & " is empty",, "XML file error"
      Exit Sub
   End If


'XML-File mit dem domParser verarbeiten (Daten in eine Baumstruktur bringen)
   Set domParser=session.CreateDOMParser(xml_in)
   domParser.Process
...

Das eingelesene XML-File enthält 0 Bytes :-( (ermittelt zumindest das Script).
Sieht man sich jedoch die Datei auf dem Server direkt an, so enthält sie 65.832 Bytes (XML-Code).
Kann das an der Codierung liegen (UTF-8)?
Habe auch schon Unicode ausprobiert --> Kein Resultat.

Hast Du eine Idee?

Greetz

Michael


Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: XML-Datei aus Mail einlesen
« Antwort #19 am: 22.02.07 - 08:45:27 »
Die Designer-Hilfe ist Dein Freund! ;)
Zitat
To create a NotesStream object, use the CreateStream method in NotesSession.
When a stream is created, property values are:
Bytes is 0.
...

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz