Autor Thema: Agenten für Listen  (Gelesen 3510 mal)

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Agenten für Listen
« am: 14.09.06 - 17:38:16 »
Hallo,

nach langer Zeit bin ich wieder zurück und hoffe ihr könnt/wollt mir weiterhelfen.

Ich versuche gerade einen Agenten zu schreiben, der folgende Dinge machen soll.

-in einen Datensatz ein Feld auslesen.
   - in diesem Feld ist eine Liste die Informationen enthält, anhand der er neue Dokumente erstellen soll

( Ich bitte euch um Hilfe, da die Hilfe in Notes mich leider nicht weiterbringt, weil es keine Liste abarbeiten kann)

Ich hoffe ich habe mich klar artikuliert und ihr könnt mir weiterhelfen.

Ich bedanke mich schon mal im Vorraus.

Gruss Robert

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #1 am: 14.09.06 - 17:52:16 »
Ich für meinen Teil verstehe nicht, was Deine Frage ist. Und wieso sollte die DesignerHelp keine Informationen zu Listen enthalten?
Was meinst Du mit "Datensatz"?

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Agenten für Listen
« Antwort #2 am: 14.09.06 - 17:56:54 »
Deine Begriffe wirken auf mich auch nicht so sauber. Das geht mir auch oft so, erschwert aber die Suche.
Listen sind in Notes eine Map-Datenstruktur. Du meinst Mehrfachwertefelder.
Am elegantesten zur Abarbeitung ist die Verbindung.
doc.getItemValue (feldName) und eine forall Schleife.
Fang einfach mal an und poste deinen Code.
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 bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #3 am: 14.09.06 - 17:59:16 »
@koehlerbv:

Also in einem Feld steht eine Liste. Jeder Eintrag dieser Liste soll durch den Agenten in einen eigenen Datensatz verwandelt werden. Also 1. Eintrag zu einem eigenenDatensatz
                                                          2. Eintrag zu einem eigenen Datensatz.


Ich weiss nicht ob die die Pumpe von Infoserv kennst, da heisst es Multifield. Diese Funktion brauche ich in einem Agenten.


Hoffe es ist nun klarer
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #4 am: 14.09.06 - 18:05:48 »
Also, Datensätze kennt Notes nicht. Du meinst sicherlich Dokumente.

Ein multivalue field (oder auch ein Array) kannst Du abarbeiten mit
- einer Forall-Schleife
- oder einer Schleife von Lbound bis Ubound des Arrays.

Bernhard

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #5 am: 27.09.06 - 10:06:32 »
@koehlerbv

So habe nun ne Woche script aus nem Reader der Firma Herdt gebüffelt und kann nun die aufgabe lösen mit ner For-Schleife wie du schon gesagt hast.

Aber eine Frage habe ich noch.

Die Liste die ich bekomme ist ja ein langer String mit verschiedenen Seperatoren. Ist es sehr Laufzeit aufwendig wenn ich nun 5 Evaluates laufen lassen, damit ich ein @word laufen lassen kann, oder gibt es einen equivalenten Befehl in Script?

So werde es nun ausprobieren und hoffe , dass mein PC nicht gleich in die Knie geht
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Untitled

  • Senior Mitglied
  • ****
  • Beiträge: 364
    • Musiker24.ch - Musiker und Bands finden
Re: Agenten für Listen
« Antwort #6 am: 27.09.06 - 11:10:18 »
Das Script-Equivalent gibt es: StrToken

Es gibt übrigens häufig eine sogenannte "Language cross-reference" in der Hilfe, irgendwo unter der Befehlsbeschreibung. Da werden dann die selben Befehle in den anderen Sprachen, falls vorhanden aufgelistet.

Grüsse
Moritz

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #7 am: 27.09.06 - 13:04:08 »
@Untitled

Danke für den Tip haben sich gleich  mehere Anschlussfragen, damit geklärt.
Habt ihr am Ende Interesse an dem fertigen Code?

Man sollte so ne Art Fundgrube erstellen, wo jeder seinen fertigen Code präsentiert. So kann man sich immer schön umgucken was es gibt. Und braucht nicht ewig selber probieren.
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #8 am: 27.09.06 - 14:49:04 »
So habe nun etwwas vollbracht,aber ich habe noch einen Fehler den ich aber nicht finde, deshalb bitte ich euch kurz um unterstützung

Code
Dim session As NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim docNew As NotesDocument	



Code
Sub Initialize
	
	
	Dim view As NotesView
	Dim collection As NotesDocumentCollection
	Dim varList As Variant
	Dim i As Integer
	
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	Set view = db.GetView( "all")
	Set collection = db.UnprocessedDocuments
	
	For i = 1 To collection.Count
		Set doc = collection.GetNThDocument(i)
		varList = doc.list
		Call newDocument
		
	Next
	
End Sub


Code
Function newDocument
	
	Stop
	
	Dim varList As Variant
	Dim i As Integer
	
	Dim personName As String
	Dim payableDate As String
	Dim kindofCost As String
	Dim repeat As String
	Dim amount As String
	Dim once As String
	Dim lifetime As String
	Dim del1 As String
	Dim wert As Integer
	
	wert = Ubound(varList)
	del1 = "~"
	
	For i = 1 To wert
		Set docNew = db.CreateDocument
		docNew.personName = Strtoken("varList",del1,1)
		docNew.payableDate = Strtoken("varList",del1,2)
		docNew.kindofCost = Strtoken("varList",del1,3)
		docNew.repeat = Strtoken("varList",del1,4)
		docNew.amount = Strtoken("varList",del1,5)
		docNew.once = Strtoken("varList",del1,6)
		docNew.lifetime = Strtoken("varList",del1,7)
		
	Next
	
	
End Function


So ich hoffe ihr könnt mir sagen warum er mir nen type mismatch alls Fehler gibt
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #9 am: 27.09.06 - 14:53:42 »
das stop müsst ihr kurz ignorieren , dass hatte ich nur gesetzt , damit der Debugger anhält
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

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: Agenten für Listen
« Antwort #10 am: 27.09.06 - 14:57:16 »
Möchtest Du die neu angelegten Dokumente nicht auch speichern?
Oder wolltest Du nur den Server beschäftigen? ;)
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

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Agenten für Listen
« Antwort #11 am: 27.09.06 - 14:59:48 »
Und mit einem Errorhandle könnte man die Zeile finden, wo es knallt.
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 Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Agenten für Listen
« Antwort #12 am: 27.09.06 - 15:04:03 »
gibt es doch:
Hier bei OpenNTF in Form der Datenbanken und der CodeBin. Hier bei der Ibm in Form von Foren und der Sandbox. Bei ATnotes selber findest du auch massenweise Code Schnipsel.

Das Problem das sich da aber auftut ist in der Regel, das man die Teile dann anpassen muss und selber nicht wirklich Ahnung davon hat was das Ding jetzt eigentlich macht. In 7 von 10 Fällen funktionierts dann nicht so wie erwartet weil irgendein Randparameter nicht genannt wurde und du verbringst mehr Zeit mit der Fehlersuche als du dafür gebraucht hättest es selber zu lösen.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Agenten für Listen
« Antwort #13 am: 27.09.06 - 15:20:07 »
Ad 1 der Debugger ist dein Freund. Und stellt dich genau an die Stelle wo es klemmt.
Ad 2 Error Handling ist in jeder Programmierung ein MUST HAVE keine Option.
Ad 3 Deine For Schleife ist mit V6 für den Müll, wenn du sicherstellen Kannst das die Anzahl deiner Elemente immer 7 ist.
Ad 4 Wenn du schon eine Funktion benutzt dann übergebt ihr auch den Wert für VarList.
Ad 5 Weil du keinen Wert zurückgibst kannst du genausogut auch eine Sub verwenden

Code
sub newDocument(varList as string)
	' String deswegen weil das eh text ist
	Stop
	
	Dim me_VarList As Variant
	Dim i As Integer
	
	Dim personName As String
	Dim payableDate As String
	Dim kindofCost As String
	Dim repeat As String
	Dim amount As String
	Dim once As String
	Dim lifetime As String
	Dim del1 As String
	Dim wert As Integer
	
	me_Varlist = Split(varlist,"~")
	
	Set docNew = db.CreateDocument
	docNew.personName = me_Varlist(0)
	docNew.payableDate = me_Varlist(1)
	docNew.kindofCost = me_Varlist(2)
	docNew.repeat = me_Varlist(3)
	docNew.amount = me_Varlist(4)
	docNew.once = me_Varlist(5)
	docNew.lifetime = me_Varlist(6)
	
	
End sub
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #14 am: 27.09.06 - 16:05:13 »
Gut , habe mich noch ein bisschen, mit der Form auseinander gesetzt und erstmal festegestellt , dass ich depp nich gespeichert habe. -> wurde abgestellt

Der Debugger hat mir gesagt, dass varList leer ist, also habe ich es global deklariert.

Ach ja ich kann sicherstellen, dass immer 7 Elemente vorhanden sind.Selbst wenn ein Wert nicht gesetzt wir ist es immer noch durch die selbe Anzahl von Seperatoren getrennt, also wären die Felder bewusst leer an der Stelle

So da ich nun speichere und übergebe. Hatte ich am Ende wunderschöne leere Dokumente. Nur im ersten Feld steht "varlist" drin, alle anderen Felder sind leer. Seht ihr nen Fehler in bei  StrToken ?
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Agenten für Listen
« Antwort #15 am: 27.09.06 - 16:21:04 »
Warum willst du eigentlich partout mit dem Strtoken hantieren? Les doch erst einmal alle Antworten bevor du weiterfragst.

Aber gut
1. was hat varlist denn für einen Wert?
2. Ein Stringtoken geht ausschließlich mit einem String. Ich wette mit dir das der Debugger wenn du überhaupt einen Wert für varlist hast den mit varlist(0) anzeigt.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #16 am: 27.09.06 - 16:30:47 »
@Thomas Schulte

Also varList ist als Variant deklariert und enthält die "Liste" mit den verschiedenen Strings die ich zu einem Document auseindanderflicke. Also nochmal, damit ich nicht Missverstanden werde.

in varList steht ziemlich genau das drin :

"Robert Kreutzer~27.10.2006 11:00:40~Ausgangsrechnung~monatlich~60000~Nein~unbefristet~"
"Robert Kreutzer~27.11.2006 11:00:40~Ausgangsrechnung~monatlich~60000~Nein~unbefristet~"
"Robert Kreutzer~27.12.2006 11:00:40~Ausgangsrechnung~monatlich~60000~Nein~unbefristet~"

(alles fiktive Werte. nicht dass sich einer Hoffnung macht ;) )

und das jetzt soll jede Zeile ein Document ergeben

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Agenten für Listen
« Antwort #17 am: 27.09.06 - 16:51:58 »
varlist scheint vom Typ variable-length-Array zu sein und nicht vom Lotus-Script Datentyp List.
In LotusScript gibts wirklich nicht soooo viele Datentypen. Deshalb kann man ruhig so vorsichtig mit unserem natursprachlichen Deutsch umgehen, dass man Irreführungen vermeidet. Unter List verstehe ich in LotusScript einen Datentyp der eine bestimmte Containerstruktur abbildet (eigentlich ein tree btw. dh. lotus nennt einen tree eine list. auch nicht besser). Aber egal.

An die einzelnen Elemente des Arrays kommst du am schnellsten über eine forall - Schleife ran.

Code
forall x in dasWasDuListNennst 
  print x 
' x über split weiterverarbeiten (s.u.) 

End ForAll

Die einzelnen Elemente des Array zerschnippelst du am besten über die split-Funktion von LotusScript:
hier aus der Hilfe von Notes:
Code
Sub Initialize
   Dim ret As Variant
   dim teststr as string
   Dim delim As String
   teststr = "This is the Connection"
   delim = " "
   ret = split(teststr, delim)
   For x = 0 to 3
      Print ret(x)
   Next
End Sub 
Als delim nimmst du natürlich ~
« Letzte Änderung: 27.09.06 - 16:53:43 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 bikerboy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.155
  • Geschlecht: Männlich
Re: Agenten für Listen
« Antwort #18 am: 27.09.06 - 17:38:45 »
So an alle Kritiker, ich habe es. Noch keine Fehlerabfangung aber ich das kommt nun nachdem es funzt. hier der code


Code
Function newDocument
	
	Dim i As Integer
	
	Dim personName As String
	Dim payableDate As String
	Dim kindofCost As String
	Dim repeat As String
	Dim amount As String
	Dim once As String
	Dim lifetime As String
	
	Dim del1 As String
	Dim wert As Integer
	Dim value As String
	
	
	wert = Ubound(varList)
	del1 = "~"
	
	For i = 0 To wert
		Set docNew = db.CreateDocument
		value = varList(i)
		
		docNew.personName = Strtoken(value, del1, 1)
		docNew.payableDate = Strtoken(value, del1, 2)
		docNew.kindofCost = Strtoken(value, del1, 3)
		docNew.repeat = Strtoken(value, del1, 4)
		docNew.amount = Strtoken(value, del1, 5)
		docNew.once = Strtoken(value, del1, 6)
		docNew.lifetime = Strtoken(value, del1, 7)
		docNew.Form = "Agent"
		
		Call docNew.Save(True,False)
		
	Next
	
	
End Function
Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Agenten für Listen
« Antwort #19 am: 27.09.06 - 20:58:12 »
... noch ein kleiner Tip zur Performance:
Code
Set doc = collection.GetNThDocument(i)
... ist nicht gut für die Performance, wenn du viele Dokumente zum abarbeiten hast. Er wird um so langsamer, je mehr Dokumente du in der Collection hast...
Code
Set doc = collection.GetFirstDocument
While Not doc Is Nothing
   ' # deine Anweisungen
   Set doc = collection.GetNextDocument( doc )
Wend
... ist in diesem Fall die bessere Variante - bevor du dir diesen Weg standardisierst... ;-)

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz