Autor Thema: Harte Nuss  (Gelesen 4481 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 StringSet db = session.CurrentDatabase Set collection = db.AllDocumentsSet doc = collection.GetFirstDocument      While Not (doc Is Nothing)      If doc.Nummer(0) = "" Then   Gesucht = doc.Besitzer(0) End If  ' ??? doc.Nummer = GesuchtSet 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 NotesDocumentDim 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 StringDim Suchnummer As StringSet db = session.CurrentDatabase      Set collection = db.AllDocumentsSet doc = collection.GetFirstDocument Messagebox Collection.CountWhile 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 NotesSessionDim db As NotesDatabaseDim view As NotesViewDim dc As NotesDocumentCollectionSet db = session.CurrentDatabaseSet 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. Hierzudc = haste bereits....Dim item As NotesItemDim nameList As VariantDim frontenddoc as Notesdocumentfrontenddoc = uidoc.documentset doc = dc.getfirstdocument'dann erstes Doc aus Coll holenwhile not (doc is nothing)Set item = doc.GetFirstItem("Ersteller")'man erhält alle Einträge aus Erstellernamelist = item.Valuesfrontenddoc.Ersteller = namelist'diese werden in das aktuelle Backenddoc des in Berabeitung befindlichen Frontendocs gesetztSet doc = dc.GetNextDocument(doc)Call uidoc.Reloadund 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