Autor Thema: Probleme mit Agent  (Gelesen 2929 mal)

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Probleme mit Agent
« am: 09.05.12 - 09:52:58 »
Guten Morgen!  ;D

Ich erstelle gerade einen Agent der eine xml Datei schreibt anhand einer NotesDocumentCollection, das klappt auch soweit ganz gut. Problem ist das ich es nicht hinbekomme das in einer Schleife Daten zusammengefasst geschrieben werden. Ich bekomme folgende Struktur als xml.

(Hinweis: einmal itemID & itemText sind jeweils ein Dokument)

<itemID>Farbe</itemID>
   <itemText> Blau</itemText>
<itemID>Farbe</itemID>
   <itemText>Rot</itemText>
<itemID>Form</itemID>
   <itemText>Rund</itemText>
<itemID> Rot</itemID>
   <itemText>Farbe</itemText>

Ausgegeben soll aber:
 
<itemID>Farbe</itemID>
   <itemText> Blau</itemText>
   <itemText> Rot</itemText>
   <itemText> Grün</itemText>

<itemID>Form</itemID>
   <itemText>Rund</itemText>


Kann ich irgendwie  on „the fly“ das ganze sortieren lassen? Zerbreche mir schon den kopf wie das ganze gehen soll…  ???

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Probleme mit Agent
« Antwort #1 am: 09.05.12 - 09:55:59 »
Hallo,

Ohne den Agenten zu kennen und wie Du die Daten aktuell in das XML-File bekommst, kann man nur mit dem
aktuellen Ergebnis des Agenten keine Mutmassungen anstellen.

Viele wuerden sagen, die Kristallkugel ist gerade zur Reinigung oder Aehnliches.


Andreas

Glombi

  • Gast
Re: Probleme mit Agent
« Antwort #2 am: 09.05.12 - 10:01:22 »
Du hast vermutlich eine Ansicht, in der die Dokumente in der richtigen Reihenfolge sortiert sind. Falls das so ist, musst Du in Deinem Agenten nicht die NotesDocumentCollection sondern die NotesViewEntryCollection nehmen. Die arbeitet die Dokumente in der Reihenfolge der Ansicht ab.

Andreas

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: Probleme mit Agent
« Antwort #3 am: 09.05.12 - 10:15:33 »
hmm okay

Das leitet das ganze ein, ich sammle alle Dokumente (aus der View all) in eine Collection anhand eine Maschinen ID. Klappt super ;)


Code

Sub Initialize

	Dim session As NotesSession
	
	Dim db As NotesDatabase

	Dim view As NotesView

	Dim doc As NotesDocument
	
	Dim dc As NotesDocumentCollection
	
	Dim stream As NotesStream

	Dim pathname As String
	
	Dim key As String
	
	Dim vs As string

	pathname = "c:\agentenfiles\"

	Set session = New NotesSession

	Set db = session.CurrentDatabase

	Set view = db.GetView( "all" )
	
	Set dc = db.UnprocessedDocuments

	Set doc = dc.GetFirstDocument
		
	key = doc.GetItemValue("machineID")(0)
	
	Set dc = view.GetAllDocumentsByKey(key, True)
	
	Set doc = dc.GetFirstDocument
		
	Set stream = session.CreateStream
	
	pathname = pathname & doc.GetItemValue("machineID")(0) & ".xml"
	
	If Dir$ (pathname) <> "" Then 
	
		Kill pathname
	
	End If 
	
	If Not stream.Open(pathname, "utf-8") Then

		MessageBox pathname,, "Open failed"

		Exit Sub

	End If
	
	If stream.Bytes <> 0 Then

		MessageBox pathname,, "File already exists and has content"

		Exit Sub

	End If

Der Block um den es geht

Code
While Not ( doc Is Nothing )

		If doc.Getitemvalue("itemID")(0) >"" Then
			Call stream.Writetext(" <itemID>", ) 
			Call stream.WriteText(doc.GetItemValue("itemID")(0),)
			Call stream.Writetext("</itemID>", EOL_CRLF)
			Call stream.Writetext("<itemText>",)
			Call stream.WriteText(doc.GetItemValue("itemText")(0),)
			Call stream.Writetext("</itemText>", EOL_CRLF)
		End If

		Set doc = dc.GetNextDocument( doc )

	Wend

Es klappt auch alles, nur wie ich es sotiert ausgeben lassen kann ist mir schleierhaft  :-:

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Probleme mit Agent
« Antwort #4 am: 09.05.12 - 10:24:02 »
Hi,

der Agent macht genau das was Du ihm gesagt hast.
Du musst Dir eine Hilfsvariable nehmen, damit Du den Wechsel der ItemID mitbekommst
und das ganze entsprechend ausprogrammieren.
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: Probleme mit Agent
« Antwort #5 am: 09.05.12 - 10:30:40 »
Aha und wie mache ich das genau  ???

 ;D

Glombi

  • Gast
Re: Probleme mit Agent
« Antwort #6 am: 09.05.12 - 11:10:04 »
Du musst die View so sortieren, dass die Dokumente in der richtigen Reihenfolge sind.

Und dann im Code nit GetAllDocumentsByKey sondern
Set notesViewEntryCollection = notesView.GetAllEntriesByKey( keyArray [, exactMatch% ] )
verwenden.

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: Probleme mit Agent
« Antwort #7 am: 09.05.12 - 12:07:46 »
hmm gibt es noch einen anderen Weg, bekomme es irgedwie nicht hin .....  :'(

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Probleme mit Agent
« Antwort #8 am: 09.05.12 - 13:24:15 »
Hallo,

Was bekommst Du nicht hin?
Glombi (Andreas) hat doch schon die grundlegenden Code-Stuecke geschrieben.

Und es ist numal sehr schwierig zu helfen, wenn man nicht weiss, wo das Problem liegt.


Andreas
« Letzte Änderung: 09.05.12 - 14:29:05 von ascabg »

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: Probleme mit Agent
« Antwort #9 am: 09.05.12 - 15:09:47 »
Okay habe mein script auf die GetAllEntriesByKey methode umgestellt, damit die ausgewählten Dokumente wie in der Ansicht ausgegeben werden. Klappt auch fast ;)

Die Werte aus dem ersten Dokument für die ersten Einträge, für meine xml,  schreibt er auch brav in die XML datei. Doch irgendwie springt er nicht zum nächsten dokument mit Getnextentry.....

Hier mal der Anfang

Code
Sub Initialize
	
	Dim session As New NotesSession

	Dim db As NotesDatabase

	Dim view As NotesView
	
	Dim doc As NotesDocument

	Dim vc As NotesViewEntryCollection
	
	Dim entry As NotesViewEntry
	
	Dim stream As NotesStream
	
	Dim pathname As String
	
	Dim vs As String
	
	pathname = "c:\agentenfiles\"
	
	Set session = New NotesSession

	Set db = session.CurrentDatabase

	Set view = db.GetView("all")

	Set vc = view.GetAllEntriesByKey("meinKEY")
	
	Set entry = vc.GetFirstEntry
	
	Set doc=entry.Document
	
	Set stream = session.CreateStream
	
	pathname = pathname & "test.txt"
	
	If Dir$ (pathname) <> "" Then 
		
		Kill pathname
		
	End If 
	
	If Not stream.Open(pathname, "utf-8") Then

		MessageBox pathname,, "Open failed"

		Exit Sub

	End If
	
	If stream.Bytes <> 0 Then

		MessageBox pathname,, "File already exists and has content"

		Exit Sub

	End If
 

Folgendes schreibt er mir auch in die xml datei, sprich er greift also auf das erste Dokument zu.

Code
Call stream.Writetext("<?xml version=""1.0"" encoding=""UTF-8""?>", EOL_CRLF)
	Call stream.Writetext("<machinelist>", EOL_CRLF)
	Call stream.Writetext("		<machine>", EOL_CRLF)
	
	Call stream.Writetext("			<machineID>",) 
	Call stream.WriteText(doc.GetItemValue("machineID")(0),)
	Call stream.Writetext("</machineid>", EOL_CRLF)
	
	Call stream.Writetext("			<machineManufacturer>",) 
	Call stream.WriteText(doc.GetItemValue("machineManufacturer")(0),)
	Call stream.Writetext("</machineManufacturer>", EOL_CRLF)
	
	Call stream.Writetext("			<machineName>",) 
	Call stream.WriteText(doc.GetItemValue("machineName")(0),)
	Call stream.Writetext("</machineName>", EOL_CRLF)

Doch beim diesen Block kommt nichts mehr,

Code
Do until ( entry Is Nothing )

		If doc.Getitemvalue("highlight_de")(0) >"" Then
			Call stream.Writetext("				<highlight>", EOL_CRLF) 
			Call stream.Writetext("					<de>",)
			Call stream.WriteText(doc.GetItemValue("highlight_de")(0),)
			Call stream.Writetext("</de>", EOL_CRLF)
			Call stream.Writetext("					<en>",)
			Call stream.WriteText(doc.GetItemValue("highlight_en")(0),)
			Call stream.Writetext("</en>", EOL_CRLF)
			Call stream.Writetext("				</highlight>", EOL_CRLF)
		End If
		
		Set entry = vc.Getnextentry( entry )
		
	loop

Auch als While Block funktioniert das ganze nicht.

Code
While Not ( entry Is Nothing )

		If doc.Getitemvalue("highlight_de")(0) >"" Then
			Call stream.Writetext("				<highlight>", EOL_CRLF) 
			Call stream.Writetext("					<de>",)
			Call stream.WriteText(doc.GetItemValue("highlight_de")(0),)
			Call stream.Writetext("</de>", EOL_CRLF)
			Call stream.Writetext("					<en>",)
			Call stream.WriteText(doc.GetItemValue("highlight_en")(0),)
			Call stream.Writetext("</en>", EOL_CRLF)
			Call stream.Writetext("				</highlight>", EOL_CRLF)
		End If
		
		Set entry = vc.Getnextentry( entry )
		
	Wend

Irgendwie springt er nicht zum nächsten Dokument. Dabei sind die Daten/Werte im "2" Dokument vorhanden und in der Ansicht (all) ist auch die Reihenfolge stimmig...

was mache ich also verkehrt?

 :-:

Glombi

  • Gast
Re: Probleme mit Agent
« Antwort #10 am: 09.05.12 - 15:17:21 »
Wenn Du den nächsten Entry holst, musst Du auch das doc neu setzen:

Do While Not ( entry Is Nothing )

Set doc=entry.Document

       If doc.Getitemvalue("highlight_de")(0) >"" Then
          Call stream.Writetext("             <highlight>", EOL_CRLF)
         Call stream.Writetext("                <de>",)
          Call stream.WriteText(doc.GetItemValue("highlight_de")(0),)
          Call stream.Writetext("</de>", EOL_CRLF)
          Call stream.Writetext("                <en>",)
          Call stream.WriteText(doc.GetItemValue("highlight_en")(0),)
          Call stream.Writetext("</en>", EOL_CRLF)
          Call stream.Writetext("             </highlight>", EOL_CRLF)
       End If
      
       Set entry = vc.Getnextentry( entry )
      
    loop


Andreas

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Probleme mit Agent
« Antwort #11 am: 09.05.12 - 15:18:43 »
Das was ich auf jeden Fall noch vermisse ist der Punkt, bei dem Du auch das Dokument auf den neuen Entry setzt.

Nach dem Set entry = vc.GetFirstEntry machst Du es ja.

Nur in der Schleife greifts Du Werte aus dem Dokument ab, hast dieses jedoch nicht auf den neuen Entry gesetzt.


Andreas

Offline manderson

  • Junior Mitglied
  • **
  • Beiträge: 68
    • manderson.de
Re: Probleme mit Agent
« Antwort #12 am: 09.05.12 - 15:21:28 »
Jungs ihr seid SPITZE !!!!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz