Autor Thema: Harte Nuss  (Gelesen 4309 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Harte Nuss
« am: 23.09.02 - 16:28:06 »
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.

Code

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

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #1 am: 23.09.02 - 16:56:56 »
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

Code

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
     
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Harte Nuss
« Antwort #2 am: 23.09.02 - 17:01:16 »
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.
Code

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.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #3 am: 24.09.02 - 10:14:57 »
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

Code

     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

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Harte Nuss
« Antwort #4 am: 24.09.02 - 10:25:43 »
DOOON....hrhrhrrr ;D

starr mal genau auf die Zeile:

Set dc = view.GetAllDocumentsByKey("pe_Identnummer", False)  

a.) mit den "" ist der Key "pe_Identnummer"....ein Literal also... ??? Ein Literal ist zB "Baum", "Haus", "Don"
b.) wenn Du schon Felder ansprechen möchtest, deren Inhalt als Key dienen soll, mußt Du das mit einer Backendmethode oder Frontendmethode auch tun...
so wie Du es zB weiter "unten" im Code getan hast:
Set item = doc.GetFirstItem("pe_Identnummer")  

Heißt: mußt vorher pe_identnummer auslesen, bevor Du die Collection bildest. Und nicht mehr mit "" arbeiten!

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #5 am: 24.09.02 - 11:06:09 »
Du meinsta also, so :

Code

     Set frontenddoc = uidoc.document
     key$ = frontenddoc.pe_Identnummer(0)
     
     Set dc = view.GetAllDocumentsByKey(key$, False)


die schleife wird immer noch nicht durchlaufen ???

don
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline mahonri

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • Schon mal Domino mit Servern gespielt
Re: Harte Nuss
« Antwort #6 am: 24.09.02 - 11:16:18 »
Ist deine Ansicht "$All" denn überhaupt in der ersten Spalte nach PE_Identnummer" sorteirt.

Sonst funktioniert das nämlich mit dem getalldocumentsby key nicht
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Thomas

P-CLP Development 4,5,6
P-CLP Admin 5
CLP Admin 6

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #7 am: 24.09.02 - 11:42:28 »


Hi mahonri,

Die erste Spalte ist pe_Identnummer.
SORTIERT ? Aber natürlich ... NICHT.

Danke für den Tipp.

« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline mahonri

  • Aktives Mitglied
  • ***
  • Beiträge: 128
  • Geschlecht: Männlich
  • Schon mal Domino mit Servern gespielt
Re: Harte Nuss
« Antwort #8 am: 24.09.02 - 12:00:52 »
Bin selbst schon ein paarmal darüber gestolpert ;D
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Thomas

P-CLP Development 4,5,6
P-CLP Admin 5
CLP Admin 6

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #9 am: 24.09.02 - 12:41:52 »

@mahonri
:-)   Ich hatte es in der ersten Spalte, aber nicht in der ersten sortierten Spalte.

@Robert,
nochmals vielen Dank für Deine Hilfe, Du hast mich
vor dem Nervenzusammenbruch bewahrt.
(Für Heute ! Morgen gibt´s ein neues Problem :-)

Ciao

Don Pasquale
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Harte Nuss
« Antwort #10 am: 24.09.02 - 16:30:25 »
cool, gratz Don  ;D

Hätte Hätte Hättest Du bereits in meinem ersten Posting den Satz

"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. "

aufmerksam gelesen, wäre alles supersauber gelaufen..

ätschi kolätschi.... ;D ;D

*klopft Don auf die Schulter...bis zum nächsten Mal, dann hab ich bestimmt mal ne Frage an Dich*
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re: Harte Nuss
« Antwort #11 am: 24.09.02 - 17:01:49 »
Hi Rob,

das ist mir hinterher auch aufgefallen.

"Ich muss Rob´s Posting genauer lesen"
"Ich muss Rob´s Posting genauer lesen"
"Ich muss Rob´s Posting genauer lesen"
"Ich muss Rob´s Posting genauer lesen"
.
.
.
50 mal
.
.

Zitat

*klopft Don auf die Schulter...bis zum nächsten Mal, dann hab ich bestimmt mal ne Frage an Dich*


Jederzeit, NUR falls es sich um eine Lotus Frage handelt kann ich nicht für eine Antwort garantieren :)

Ciao

Don Pasquale
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Harte Nuss
« Antwort #12 am: 24.09.02 - 17:27:12 »
na ja, so lesenswert sind meine Sachen nicht...aber, auf welchem Notes nahen Gebiet biste denn fit?

Quickplace?
Sametime?
K Station?
....
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz