Hallo Leute,
ich habe folgendes Problem :
Ich habe ein Dokument mit den Feldern "Nummer" und dem Feld "Bearbeiter"und möchte feststellen, ob
es vielleicht in der Datenbank ein anderes Dokument mit der gleichen "Nummer" gibt und falls ja, den Bearbeiter von dort in mein aktuelles Dokument kopieren.
Ich bin noch nicht so firm mit Collections, deswegen hier nur ein erster schwacher versuch.
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim stringArray As String
Dim composed As String
Dim temp As Variant
Dim Gesucht As String
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument
While Not (doc Is Nothing)
If doc.Nummer(0) = "" Then
Gesucht = doc.Besitzer(0)
End If
' ??? doc.Nummer = Gesucht
Set doc = notescoll.getnextdocument(doc)
Wend
Hallo Leute,
ich habe es jetzt erstmal so gelöst:
Ich habe aber noch 2 Fragen :
Wieso findet meine Collection ungefähr 2~3 mal soviele Dokumente wie die Ansicht (@All)
und wie kann ich ihm das
"Wollen sie die Änderungen speichern"
abgewöhnen ?
Don Pasquale
Dim ws As New NotesUIWorkspace
Dim Doc1 As NotesDocument
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
Set doc1 = uidoc.Document
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim stringArray As String
Dim composed As String
Dim temp As Variant
Dim Anzeigetext As String
Dim Suchnummer As String
Set db = session.CurrentDatabase
Set collection = db.AllDocuments
Set doc = collection.GetFirstDocument
Messagebox Collection.Count
While Not (doc Is Nothing)
Anzeigetext = doc.pe_Identnummer(0)
If doc.pe_Identnummer(0) = doc1.pe_Identnummer(0) Then
Messagebox " Ja, ID sind gleich "
Suchnummer = doc.pe_Name(0)
End If
Set doc = collection.getnextdocument(doc) Wend
Set uidoc = ws.EditDocument( True )
Call uidoc.FieldSetText( "pe_Name", Cstr( Suchnummer) )
Set uidoc = ws.EditDocument( False )
Call uidoc.Close
1. Performance
das Script ist nicht besonders performant, nutze daher besser den Veiwindex über die Methode GetAllDocumentsByKey, wobei der Key in Deinem Fall die Nummer ist und die Ansicht, in der zu suchen ist, diese Nummern ab/aufsteigend in der ersten sortierten Spalte enthält.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection
Set db = session.CurrentDatabase
Set view = db.GetView( "By Category" )
Set dc = view.[b]GetAllDocumentsByKey[/b]("Spanish leather", False)
hierbei (aus der Notes help obiges Bsp) ist "dc" die Document Collection, die gefunden wurde.
[b]2. Wie gefundene Docs durchgehen?[/b]
Eine Collection kannst Du mit
getfirstdocument und getnextdocument zB durchwandern.
Hierzu
dc = haste bereits
....
Dim item As NotesItem
Dim nameList As Variant
Dim frontenddoc as Notesdocument
frontenddoc = uidoc.document
set doc = dc.getfirstdocument
'dann erstes Doc aus Coll holen
while not (doc is nothing)
Set item = doc.GetFirstItem("Ersteller")
'man erhält alle Einträge aus Ersteller
namelist = item.Values
frontenddoc.Ersteller = namelist
'diese werden in das aktuelle Backenddoc des in Berabeitung befindlichen Frontendocs gesetzt
Set doc = dc.GetNextDocument(doc)
Call uidoc.Reload
und das Frontenddoc wird anhand des eigenen Backenddocs reloaded, um die Einträge aller Bearbeiter anzuzeigen
So im Prinzip müßte es gehen. Habs net getestet jetzt.
Edit
sehe gerade, daß Du es anders machst...wenn ich es richtig geblickt habe, willst Du die Nummern und nicht die Bearbeiter in ein Feld ABC eintragen? Wie auch immer, dann eben in meinem Codebeispiel die Suchangabe und das zu übergebende Feld einfach entsprechend eintragen.
Hi Rob,
hört sich gut an, ich kann mir schon vorstellen, dass mein Skript nicht besonders performant ist.
Ich habe nun folgenden Code, bei der leider die
Schleife NIE durchlaufen wird.
Ich habe die Vermutung, dass ich vielleicht an der View ($All) noch etwas einstellen muss, da der Debugger
in der Zeile
Set dc = view.GetAllDocumentsByKey("pe_Identnummer", False)
ein false ausgibt.
Hat wer eine Idee ?
Gruß
Don Pasquale
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = ws.CurrentDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection
Set db = session.CurrentDatabase
Set view = db.GetView( "($All)" )
Set dc = view.GetAllDocumentsByKey("pe_Identnummer", False)
Dim item As NotesItem
Dim nameList As Variant
Dim frontenddoc As Notesdocument
Set frontenddoc = uidoc.document
Set doc = dc.getfirstdocument
While Not (doc Is Nothing)
Set item = doc.GetFirstItem("pe_Identnummer")
namelist = item.Values
frontenddoc.Ersteller = namelist
Set doc = dc.GetNextDocument(doc)
Call uidoc.Reload
Wend
End Sub
Du meinsta also, so :
Set frontenddoc = uidoc.document
key$ = frontenddoc.pe_Identnummer(0)
Set dc = view.GetAllDocumentsByKey(key$, False)
die schleife wird immer noch nicht durchlaufen ???
don