Autor Thema: XML mit Notes verarbeiten  (Gelesen 5940 mal)

Offline nikon

  • Junior Mitglied
  • **
  • Beiträge: 97
  • Geschlecht: Männlich
  • Tut das Notes?
XML mit Notes verarbeiten
« am: 10.02.06 - 15:38:01 »
Hallo zusammen!

Ich versuche mich schon ein paar Tage immer mal wieder so neben dem Tagesgeschäft in XML einzuarbeiten. Einige Fortschritte habe ich auch schon gemacht...

Auf unserem Domino-Server hier, habe ich mit Hilfe einer eingebetteten Ansicht einen XML-Feed erstellt. Ich habe auch eine passende XSLT und DTD erstellt. Das klappt auch alles wunderbar und war auch kein großartiges Thema sag ich mal.

Probleme habe ich jetzt allerdings damit, den Stream zu verarbeiten!! Ich muss mit einem Client hergehen können und die Informationen des Streams von außerhalb verarbeiten können. Sagen wirs mal so: wenn ich irgendwie eine XML-Datei erhalten könnte, wäre die restliche Verarbeitung mit Sicherheit kein großartiges Problem... bißchen Hilfe wälzen, bißchen googlen, vielleicht das <ironie>herrliche</ironie> ibm redbook dazu, oder wie auch immer. Mein Frage ist im Moment allerdings einfach nur, wie ich die XML-Daten abgreifen kann? Ich habe mir einmal SOAP angeschaut und bin mir aber gar nicht sicher, ob das das richtige für mich ist. Vielleicht kann mir einer einen Tip geben, wie ich diese Daten einlesen kann? Das wäre sehr nett!

Achja - wenn das möglich ist mit Lotus Script. /me kann leider kein Java. :'(
Domino-(Web)Server 6.0.4 und Client 6.5.5

Vielen Dank im vorraus!


Gruß Dirk
Zitat von: fragmutti.de
Schmackhafter Milchreis
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt. ;)

IBM Certified Application Developer - Lotus Notes und Domino 6/6.5

Umgebung:
2 Domino Cluster-Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) Win2k Server
1 Domino Server (7.0.3) WinXP

~ 200 Notes Clients (7.0.1-7.0.3) Win2k&XP

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 mit Notes verarbeiten
« Antwort #1 am: 10.02.06 - 15:47:20 »
Du willst von deiner Eingebetteten Ansicht das XML erhalten? Im Notes?
Denke da wirst Du nicht allzuweit kommen.

Da kommst DU eigentlich nur übers Web ran, aber das ist ein anderes Thema.

Um an Raw XML Daten in Lotusscript zu gelangen kannst Du entweder die eingebauten DXL Exporter verwenden oder einen Agent, welcher dir den passenden XML Stream  liefert.

Was willst Du erreichen? MiMo ! (More in More out :-))
Gruss

Urs

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

Offline nikon

  • Junior Mitglied
  • **
  • Beiträge: 97
  • Geschlecht: Männlich
  • Tut das Notes?
Re: XML mit Notes verarbeiten
« Antwort #2 am: 10.02.06 - 16:18:48 »
MiMo?  ;D

Tschuldige... da hab ich mich wahrscheinlich ein bißchen verhaspelt beim erklären: Also ich muss die Daten übers Web einlesen!! Ich habe hier nur die Datenbank erstellt, die mit der eingebetteten Ansicht die Daten bereitstellt. Der Notes-Client wird ein entfernter Client sein und eine Verbindung nur übers Web aufbauen.

Einen NotesStream zu verwenden habe ich schon probiert. Habe versucht mit NotesStream.Open("http-adresse") den Stream zu öffnen und so zu verarbeiten. Das hat leider nicht funktioniert. In der Hilfe/bei meiner Recherche habe ich auch immer nur davon gelesen, ein XML-FILE einzulesen. Von einem Stream "onthefly" war nie die Rede. Deshalb dachte ich/befürchtete ich andere Wege wie z.B. SOAP nehmen zu müssen.

Erreichen möchte ich, dass entfernte Notes-Clients, die Daten die ich hier auf unserem Webserver bereitstelle, einlesen können und ich entsprechende weitere Aktionen mit Script vollführen kann.
(ohne dass diese Clients querzugelassen sind und eine Notes-Verbindung aufbauen o.Ä.)


Gruß DIrk
Zitat von: fragmutti.de
Schmackhafter Milchreis
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt. ;)

IBM Certified Application Developer - Lotus Notes und Domino 6/6.5

Umgebung:
2 Domino Cluster-Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) Win2k Server
1 Domino Server (7.0.3) WinXP

~ 200 Notes Clients (7.0.1-7.0.3) Win2k&XP

botschi

  • Gast
Re: XML mit Notes verarbeiten
« Antwort #3 am: 10.02.06 - 17:02:52 »
Vielleicht hab ich Dich auch noch immer nicht verstanden, aber Du möchtest eine Datei einlesen und daraus dann Notesdokumente machen?

Diesen Agenten hab ich mal gebastelt und er funktioniert eigentlich auch. Es wird eine .xml-Datei eingelesen und daraus Dokumente und Antwortdokumente generiert:

Declarations:
Dim domParser As NotesDOMParser

Initialize:
Sub Initialize
   Dim session As NotesSession
   Dim Workspace As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim inputStream As NotesStream
   Dim docNode As NotesDOMDocumentNode
   Dim a As notesDOMNode
   Dim node As NotesDOMNode
   Dim automatname As String
   Dim checkview As notesview
   Dim checkdoc As NotesDocument
   Dim nextcheckdoc As NotesDocument
   Dim checkcoll As NotesDocumentcollection
'#############################################################################
   
   Dim origXML As String
   ' Variable für die XML-Datei
   Dim xmlFilename As Variant
   
   xmlFilename = Workspace.OpenFileDialog( False , "Aus welcher XML-Datei soll importiert werden?"_
   ,"XML-Files|*.xml", "W:\test\termi.xml" , "*.xml" )'"W:\test\termi.xml" '"W:\test\golem\xml\termi.xml"
   
   If Isempty(xmlFilename) Then
      Exit Sub
   End If
   
   origXML = xmlFilename(0)
'#############################################################################      
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   
'########################################
   Set checkview = db.GetView("automatname")
   
'########################################
   
  'open the XML file
   Set inputStream = session.CreateStream
   inputStream.Open (origXML)
   
  'create DOM parser and process
   Set domParser=session.CreateDOMParser(inputStream)
   domParser.Process
   
  'get the document node
   Set docNode = domParser.Document
'############   
   Dim child As NotesDOMNode
   'Dim eNode As NotesDOMElementNode
   Dim numChildNodes As Integer   
   Dim firstdoc As NotesDocument
   Dim childdoc As NotesDocument
   
   Set node = docnode
   
   If Not node.IsNull Then
      
      Set child = node.LastChild   ' Get the last node
      Dim numAttributes As Integer, numChildren As Integer
      numAttributes = child.attributes.numberofentries
      
      Set node = child
      Stop
      Set firstdoc = db.CreateDocument()   
      firstdoc.Form = Node.NodeName
      
      Dim i As Integer
      Dim feldname As String
      Dim feldwert As String
      Dim item As NotesItem
      Dim attrs As notesdomnamednodemap
      Set attrs = Node.Attributes     ' Get attributes
      
      For i = 1 To numAttributes     ' Loop through them
         
         Set a = attrs.GetItem(i)
         feldname = a.NodeName
         If feldname = "xmlns:xsi" Then
            Goto weiter
         End If
         If feldname = "xsi:noNamespaceSchemaLocation" Then
            feldname = "schema"
         End If
         feldwert = a.NodeValue
         Set item = firstdoc.ReplaceItemValue( "att_"+feldname, feldwert )
weiter:
      Next
'#############################################################################################      
      Set checkdoc = checkview.GetDocumentByKey(firstdoc.att_name(0)) ' Prüfen ob es diesen
                                          'Automaten schon gibt
      Dim meldung As Integer      
      If Not checkdoc Is Nothing Then
         meldung = Messagebox ("Dieser GeVo ist schon modelliert!"_
         +Chr(10)+"Wollen Sie diesen ersetzen?", 3 + 32 , "GeVo ersetzen?")
         If meldung = 2 Or meldung = 7 Then ' bei "Abbruch" oder "Nein"
            Exit Sub
         Else ' bei "OK" zum Überschreiben der alten Datensätze
            Set checkcoll = checkview.GetAllDocumentsByKey(checkdoc.att_name(0))         
            Set checkdoc = checkcoll.GetFirstDocument
            
            Do
               Set nextcheckdoc = checkcoll.GetNextDocument(checkdoc)   
               Call checkdoc.Remove(True)' Löschen der alten Datensätze
               Set checkdoc = nextcheckdoc
            Loop Until checkdoc Is Nothing
         End If
         
      End If
'#############################################################################################      
      Call firstdoc.ComputeWithForm(True, True)
      automatname = firstdoc.key_za(0)   
      Call firstdoc.Save( True, True )
      
   End If   
   Set child = node
   Call walkNameValue(child, firstdoc,automatname) ' kind übergeben und alle anderen kinder in der
                   ' sub abarbeiten
End Sub

Sub "walkNameValue":
Sub walkNameValue ( node As NotesDOMNode, firstdoc As NotesDocument, automatname As String)
   ' hier werden alle doks zu nodes angelegt, die direkt unter
   ' dem zustandsautomaten stehen
   Dim child As NotesDOMNode
   Dim nextchild As NotesDOMNode
   Dim numChildNodes As Integer
   Dim childnumChildNodes As Integer
   Dim session As NotesSession
   Dim db As NotesDatabase         
   Dim doc As NotesDocument
   Dim childdoc As NotesDocument
   Dim numAttributes As Integer, numChildren As Integer
   Dim a As notesDOMNode
   
   
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   
   If Not node.IsNull Then
      
      Set child = node.FirstChild   ' Get the first node
      numChildNodes = node.NumberOfChildNodes
      
      Do
         Select Case child.NodeType
            
         Case DOMNODETYPE_ELEMENT_NODE:
            numAttributes = child.attributes.numberofentries
            Set doc = db.CreateDocument()   
            doc.Form = child.NodeName
            
            Dim i As Integer
            Dim feldname As String
            Dim feldwert As String
            Dim item As NotesItem
            Dim attrs As notesdomnamednodemap
            Set attrs = child.Attributes     ' Get attributes
            
            For i = 1 To numAttributes     ' Loop through them
               
               Set a = attrs.GetItem(i)
               feldname = a.NodeName
               If feldname = "xmlns:xsi" Then
                  Goto weiter
               End If
               If feldname = "xsi:noNamespaceSchemaLocation" Then
                  feldname = "schema"
               End If
               feldwert = a.NodeValue
               Set item = doc.ReplaceItemValue( "att_"+feldname, feldwert )
weiter:
            Next
            
            Call doc.MakeResponse(firstdoc)
            doc.key_za = automatname
            Call doc.Save( True, True )
            
         End Select
         
         childnumChildNodes = child.NumberOfChildNodes ' hat das node noch kinder
         If childnumChildNodes >0 Then
            Set nextchild = child.FirstChild
            Do
               Call walkNameValuechild(nextchild, doc, automatname) ' kind übergeben und alle anderen kinder in der
                   ' sub abarbeiten
               Set nextchild = nextchild.NextSibling
               childnumChildNodes = childnumChildNodes-1
            Loop Until childnumChildNodes = 0
         End If
         
         
         Set child = child.NextSibling
         numChildNodes = numChildNodes-1
      Loop Until numChildNodes = 0
      
      Stop
   End If
   
End Sub

Sub "walkNameValuechild":

Sub walkNameValuechild ( node As NotesDOMNode, doc As notesdocument, automatname As String)
   Dim child As NotesDOMNode
   Dim nextchild As NotesDOMNode
   Dim numChildNodes As Integer
   Dim childnumChildNodes As Integer
   Dim session As NotesSession
   Dim db As NotesDatabase         
   Dim childdoc As NotesDocument
   Dim a As notesDOMNode
   
   Set session = New NotesSession
   Set db = session.CurrentDatabase
   
   Select Case node.NodeType
      
   Case DOMNODETYPE_ELEMENT_NODE:          ' Most nodes are Elements
      Stop
      Dim numAttributes As Integer, numChildren As Integer
      numAttributes = node.attributes.numberofentries
'##########################################################################         
      
      Set childdoc = db.CreateDocument()   
      childdoc.Form = node.NodeName
      
      Dim i As Integer
      Dim feldname As String
      Dim feldwert As String
      Dim item As NotesItem
      Dim attrs As notesdomnamednodemap
      Set attrs = node.Attributes     ' Get attributes
      
      For i = 1 To numAttributes     ' Loop through them
         
         Set a = attrs.GetItem(i)
         feldname = a.NodeName
         If feldname = "xmlns:xsi" Then
            Goto weiter
         End If
         
         If feldname = "xsi:noNamespaceSchemaLocation" Then
            feldname = "schema"
         End If
         feldwert = a.NodeValue
         Set item = childdoc.ReplaceItemValue( "att_"+feldname, feldwert )
weiter:
      Next
      Call childdoc.MakeResponse(doc)
      
      childdoc.key_za = automatname
      Call childdoc.Save( True, True )
      
      Do
         
         childnumChildNodes = node.NumberOfChildNodes ' hat das node noch kinder
         If childnumChildNodes >0 Then
            Set nextchild = node.FirstChild
            Do
               Call walkNameValuechild(nextchild, childdoc, automatname) ' kind übergeben und alle anderen kinder in der
                   ' sub abarbeiten
               Set nextchild = nextchild.NextSibling
               childnumChildNodes = childnumChildNodes-1
            Loop Until childnumChildNodes = 0
            
            
            If childnumChildNodes > 0 Then
               Set child = child.NextSibling
               numChildNodes = numChildNodes-1
            End If
         End If
      Loop Until numChildNodes = 0
      
      Exit Sub
      
   End Select  'node.NodeType
End Sub

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML mit Notes verarbeiten
« Antwort #4 am: 10.02.06 - 18:14:04 »
Imho besitzt LotusScript selbst keine Möglichkeiten, um Dateien aus dem Web auszulesen.
Mit Java geht das für meinen Geschmack prima mit HttpClient von apache.jakarta.commons.

Andere Leute haben hier aber auch WinApi Funktionen dafür benutzt.

Gruß Axel

[offtopic]
Einer meiner Aufgaben ist z.Zt. z.B. das xml der täglichen Referenz-Wechselkurse der Europ. Zentralbank in eine MySQL5 Tabelle zu schreiben. Mir sind die xml Fähigkeiten von MySQL5 noch nicht so ganz klar. Kann aber sein, dass ich dafür nicht mehr als 25 Zeilen code brauche.
Wenn es darüber nicht geht werden es höchstens 50 Zeilen.

[/offtopic]
« Letzte Änderung: 10.02.06 - 18:20:10 von kennwort »
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 nikon

  • Junior Mitglied
  • **
  • Beiträge: 97
  • Geschlecht: Männlich
  • Tut das Notes?
Re: XML mit Notes verarbeiten
« Antwort #5 am: 10.02.06 - 21:46:12 »
@botschi: Nein nicht ganz. Ich meinte, dass die Erstellung der Notes Dokumente im Anschluss noch erfolgen muss, aber dass das wohl kein Thema werden wird, wenn ich mich ein bißchen durch die Hilfe wühle. Aber vielen Dank an dieser Stelle schon einmal für den Code! :D

@kennwort: Genau darum ging es mir. Und ich habe befürchtet, dass das die Antwort sein wird. Ich beherrsche Java wie gesagt leider nicht - was zwar in Anbetracht der Entwicklung von Notes eine klare Lücke ist, aber momentan kann ich wohl leider noch nichts daran ändern. :(

Inwiefern kann ich denn da die WinAPI für mich einsetzen? Oder könnte ich relativ einfach den besagten Java-Agenten schreiben, der mir für die weitere Verarbeitung, eine XML-Datei auf die Platte schreibt? Damit käme ich ja dann wahrscheinlich auch klar. ;)


Gruß Dirk
Zitat von: fragmutti.de
Schmackhafter Milchreis
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt. ;)

IBM Certified Application Developer - Lotus Notes und Domino 6/6.5

Umgebung:
2 Domino Cluster-Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) Win2k Server
1 Domino Server (7.0.3) WinXP

~ 200 Notes Clients (7.0.1-7.0.3) Win2k&XP

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: XML mit Notes verarbeiten
« Antwort #6 am: 10.02.06 - 22:20:16 »
Manfred Dillmann und Mark (mt69clp) haben das glaub ich gemacht. Mark hat das - wenn mich nicht alles täuscht nicht vor allzulanger Zeit gepostet. Guck einfach seine Postings durch. Vor ca. 2 Wochen. Ich hoffe, ich hab jetzt keinen Quatsch erzählt. Nein. hab ich nicht, denke ich.

Java lernen ist mehr eine längerfristige Angelegenheit. Deshalb hast du Recht.

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 nikon

  • Junior Mitglied
  • **
  • Beiträge: 97
  • Geschlecht: Männlich
  • Tut das Notes?
Re: XML mit Notes verarbeiten
« Antwort #7 am: 15.02.06 - 11:01:24 »
Entschuldige meine späte Antwort, aber die Grippewelle hatte mich erwischt.  >:(

Ich werde gleich mal schauen, ob was entsprechendes bei den Postings von Mark für mich dabei war. Hat Manfred Dillmann nicht auch einen RSS-Reader auf Notesbasis geschrieben? Ich entsinne mich dunkel. ;) Naja... das wäre ja genau das was ich brauche für mein Problem.

Danke schonmal für die Info!


Gruß Dirk
Zitat von: fragmutti.de
Schmackhafter Milchreis
Milchreis schmeckt hervorragend, wenn man ihn kurz vor dem Verzehr durch ein saftiges Steak ersetzt. ;)

IBM Certified Application Developer - Lotus Notes und Domino 6/6.5

Umgebung:
2 Domino Cluster-Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) SLES 9 SP 3
1 Domino Server (7.0.3) Win2k Server
1 Domino Server (7.0.3) WinXP

~ 200 Notes Clients (7.0.1-7.0.3) Win2k&XP

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz