Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: js84 am 22.06.05 - 10:33:25

Titel: Feldwert mit View abgleichen
Beitrag von: js84 am 22.06.05 - 10:33:25
Hi,

ich habe ein Problem, bei dem ihr mir hoffentlich helfen könnt.

folgendes Szenario:
Ich habe ein Form in der ein Feld existiert, in das ein name eingetragen werden kann (normales Textfeld) und eine View, in der sich alle Namen, die bereits existieren eingetragen sind. In dem Feldevent (des Namensfledes) Exiting möchte ich jetzt überprüfen ob der eingetragene Name bereits in der View (also auch in der DB vorhanden ist). Das funktioniert dann wenn ich ein neues Dokument anlege ohne Problem, will ich aber in einem betsehenden Dokument den Namen ändern kommt die Meldung, dass dieser name bereits vorhanden ist , obwohl das Dokument  mit dem geänderten namen noch nicht mal gespeichert ist. Im Debugger hab ich bereits geguckt und da taucht der neue name auch auf.

Hier der Code, der in Exiting steht:

Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   Dim view As NotesView
   Dim customerview As String
   Dim sNewName, sOtherName As Variant
   customerview = "AllCustomers"      'Name of View, containing all customer documents
   Set uidoc = workspace.CurrentDocument
   sNewName = uidoc.FieldGetText("Customer")
   
   'Check if empty and return. This should not occur anyway becaue of input validation ...
   If sNewName = "" Then
      msg = "Customer name is mandatory!"
      Messagebox msg, 0, "Copy"
      Call uidoc.GotoField( "Customer" )
      Exit Sub
   End If
   'If nothing is changed, we can exit right away
   If sNewName = sFieldOnEntry1 Then
      Exit Sub
   End If
   'Check if this name is already in use by scanning all other documents
   sNewName= Ucase(sNewName)   'ignore case
   Set db = s.CurrentDatabase
   Set view = db.GetView(customerview)
   If Not view Is Nothing Then
      Set doc = view.GetFirstDocument
      'Scan all customer docs
      While Not doc Is Nothing
         sOtherName = doc.GetItemValue("Customer")
         If sNewName = Ucase(sOtherName(0)) Then
            msg = "Duplicate customer name! Please select unique name and retry."
            Messagebox msg, 0, "Copy"
            Call uidoc.GotoField( "Customer" )
            Exit Sub
         End If
         Set doc = view.GetNextDocument(doc)
      Wend
   End If



Hat jemand eine Ahnung woran das liegen kann??????
 ???

MfG
Jana
Titel: Re: Feldwert mit View abgleichen
Beitrag von: koehlerbv am 22.06.05 - 10:39:01
Was Du beobachtest, ist ein vollkommen normales Verhalten - in der View findet sich ja der Name schon.

Du must den Algorithmus ändern. Zum einen: Suche nicht stoisch, in dem Du jedes einzelne Dokument der View durchgehst. Bilde eine Collection mit GetAllDocumentyByKey

Ist coll.Count = 0, ist alles in Ordnung.
Wenn es bereits ein Dokument gibt, überprüfe des UniversalID mit der UniversalID des zu prüfenden Dokument. Sid die gleich, ist alles in Ordnung. Unterscheiden sie sich, dann ...
coll.Count > 1 ist eh klar.

HTH,
Bernhard
Titel: Re: Feldwert mit View abgleichen
Beitrag von: js84 am 22.06.05 - 10:42:31
Hi,

wird in die View ein neuer Wert eingefügt auch wenn die Änderung noch nicht gespeichert wurde?
Titel: Re: Feldwert mit View abgleichen
Beitrag von: Semeaphoros am 22.06.05 - 10:44:49
Suche nicht stoisch


Hm, Suchen hat ja schon sehr viel mit Philosophie zu tun, bisher war ich jedoch der Meinung, dass man stoische Lösungen nicht mit Notes implementieren kann, ich glaubte bisher, dass dafür Biomasse notwendig ist .....


 :P
Titel: Re: Feldwert mit View abgleichen
Beitrag von: koehlerbv am 22.06.05 - 10:45:29
Nein, das Dokument muss natürlich gespeichert sein, bevor es in die View aufgenommen wird.

Bernhard
Titel: Re: Feldwert mit View abgleichen
Beitrag von: js84 am 22.06.05 - 10:52:26
@Bernhard, vielen Dank für die schnelle und super Antwort!!

Was wäre ich nur ohne euch  ;)