Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wilhelm Weber am 10.09.10 - 12:53:19

Titel: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 12:53:19
hallo zusammen,

folgendes möchte ich machen.

Aus dem aktuellen Dokument zwei Felder mit einfachem Text-Wert auslesen.
Dann in eine andere Ansicht wechseln. Dort alle Dokumente durchsuchen. In diesen dokumenten gibt es felder mit mehrfachtextwerten. Sollte in einem dieser Dokumente die beiden einfach werte in diesen Mehrfachwerten enthalten sein, soll im aktuellen Dok ein drittes feld mit einem wert des Doks aus der view gefüllt werden.
Mein problem ist wohl , dass ich sowas wie @Ismember nicht nach Skript bekommen.

hier der Code bisher

Dim ws As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim loopdoc As NotesDocument
   Dim view As NotesView   
   Dim value1 As Variant
   Dim value2 As Variant
   
   Set db = session.CurrentDatabase
   Set doc = ws.CurrentDocument.Document
   value1 = doc.feld1(0) ' EInfachwert
   value2 = doc.feld2(0) ' Einfachwert
   
   Set view = db.GetView("suche")
   Set loopdoc = view.GetFirstDocument()
   While Not(loopdoc Is Nothing)
      If loopdoc.mehrfachwert1(0) = value1 & loopdoc.mehrfachwert2(0) = value2  Then
         doc.feld3 = loopdoc.feldxy
      Else
         Set loopdoc = view.GetNextDocument(loopdoc)   
      End If
   Wend
Titel: Re: Vergleich von zwei Listen
Beitrag von: Mitch am 10.09.10 - 13:03:54
Ich glaube die Funktion "ArrayGetIndex" könnte dir weiter helfen...

Gruß,

Mitch
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 14:31:19
Hallo Mitch,

danke für den Tip.

hab rumprobiert, aber irgendwie passt es nicht ...?

hast du noch mehr Infos ?

Grüße
Wilhelm
Titel: Re: Vergleich von zwei Listen
Beitrag von: koehlerbv am 10.09.10 - 14:34:15
Was passt nicht? ArrayGetIndex ist das, was Du gesucht hast!

Bernhard
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 14:43:35
Hallo Bernhard,

habe es so probiert..

If Arraygetindex(mehrfachwert1(),value1)   <> Null &   Arraygetindex(mehrfachwert1(),value2) <> Null Then
doc.feld3 = loopdoc.feldxy

Fehlermeldung: Wrong nummer of array subscripts..

Bin nur Admin..:-(
Titel: Re: Vergleich von zwei Listen
Beitrag von: koehlerbv am 10.09.10 - 15:23:53
Wirklich so?
Wie hast Du denn mehrfachwert1 deklariert und wie weist Du einen Wert zu?

Bernhard
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 15:54:08
Sorry Bernhard,

eher so

If Arraygetindex(loopdoc.mehrfachwert1(),value1)   <> Null &   Arraygetindex (loopdoc.mehrfachwert2(),value2) <> Null Then
doc.feld3 = loopdoc.feldxy

Fehlermeldung bleibt gleich
Titel: Re: Vergleich von zwei Listen
Beitrag von: koehlerbv am 10.09.10 - 16:14:14
Wilhelm, Du hast zwei Fehler in Deinem Code - ich war auf etwas anderes fixiert und habe das schlicht übersehen:

Deine Notation des Items ist verkehrt - loopdoc.mehrfachwert1 wäre richtig. Die von Dir verwendeten Klammern implizieren den Zugriff auf ein (gar nicht angegebenes) Element des Arrays (was jedes Item ausser RichText Items sind). Die Fehlermeldung erklärt sich damit von alleine, oder?

Weiter: NULL kannst Du so in LS nicht verwenden. Mach das wie folgt:
If Isnull (Arraygetindex (quelle, suchwert) = True Then
   ... nichts gefunden
Else
   ... Bingo!
End If.

Und dann funktioniert auch Dein Code ;-)

HTH,
Bernhard
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 16:24:51
Probier ich heute abend von zu Hause mal aus, vielen Dank.

Titel: Re: Vergleich von zwei Listen
Beitrag von: Mitch am 10.09.10 - 16:26:27
Genau, so wie Bernhard es sagt.

Kleiner Zusatz: Falls du im Prinzip noch das Konstrukt wie aus deinem ersten Post verwendest, wirst du in einer Endlosschleife landen falls die Bedingung True ergibt, da du in dem Fall dann kein "GetNextDocument" verwendest und die While-Schleife niemals Nothing finden wird... ;)
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 16:31:48
im moment lande ich bei einem Type Mismatch, werde aber weiter versuchen.

der Suchwert ist ein einfaches text-Feld ohne Mehrfachwert. Hakt es daran ?
Titel: Re: Vergleich von zwei Listen
Beitrag von: Mitch am 10.09.10 - 16:37:18
Du musst schon den Code zeigen, das hilft immer.

Falls du mit "Suchwert" den zweiten Parameter von ArrayGetIndex meinst und da direkt einen Feldwert verwenden willst, musst du da schon die (0) verwenden, um an den Feldwert zu kommen.

Also entweder mit einer Variablen:

If IsNull(ArrayGetIndex(doc.Fieldname, variable)) Then
     'Nix gefunden
Else
     'Was gefunden
End If

Oder eben (mit einem Feldwert):

If IsNull(ArrayGetIndex(doc.Fieldname, doc2.OtherFieldname(0))) Then
     'Nix gefunden
Else
     'Was gefunden
End If

Klar soweit? :)

Edit: Yay. Endlich. Vom Frischling zum Junior-Mitglied in nur knapp über acht Jahren! :D
Titel: Re: Vergleich von zwei Listen
Beitrag von: Peter Klett am 10.09.10 - 17:20:42
Noch ein Fehler ist die Verbindung zweier Bedingungen mit &, das geht so mit Formelsprache. In Script verwendest Du And.

If Bedingung1 And Bedingung2 Then

End If
Titel: Re: Vergleich von zwei Listen
Beitrag von: koehlerbv am 10.09.10 - 17:31:59
Shit, was man alles übersieht. Schön, dass bei AtNotes immer mehrere drüberschauen und sich gegenseitig ergänzen - sogar in Norwegen  :) Danke, Peter!

Bernhard
Titel: Re: Vergleich von zwei Listen
Beitrag von: Wilhelm Weber am 10.09.10 - 20:59:45
Danke an alle !!

der Fehler ist weg, jetzt muss ich noch die Endlosschleife entsorgen und ein bischen Logik machen.

Grüße
Wilhelm