Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: khing am 22.09.05 - 08:54:27

Titel: Queryopen
Beitrag von: khing am 22.09.05 - 08:54:27
Hallo,
ich habe über Notes ein spezielles Diskussionsforum entwickelt. Nun wollte ich per LS unterbinden, dass bei einem geschlossenen Hauptthema noch eine Antworten erstellt werden kann. Leider bekomme ich bei der Erstellung einer Antwort kein "Source" im Queryopen geliefert. Hat jemand ein Tipp, wie ich das trotzdem vor dem Erstellen des Dokuments abfangen kann.

Quelltext:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
   Dim db As NotesDatabase   
   Dim session As New NotesSession
   Dim doc As NotesDocument
   Dim parentdoc As NotesDocument
   Dim tmp
   
   
   Set db = session.CurrentDatabase
   
   Set doc = Source.Document  'aktuelles Antwortdokument
   Set parentdoc = db.GetDocumentByUNID(doc.ParentDocumentUNID) '
   
   tmp = parentdoc.GetItemValue("NG_Status" )   
   
   If Isnewdoc=True Then
      If  tmp(0) = "Aktuelles Thema" Then
         Continue = True
      Else
         Messagebox "Diese Diskussion ist geschlossen. Eine neue Antwort zu erstellen, ist nicht mehr möglich.",,"Abbruch"
         Continue = False
      End If
   End If
   
End Sub

Danke im voraus.

Gruß Kristian
Titel: Re: Queryopen
Beitrag von: Driri am 22.09.05 - 09:08:28
Zitat
Set doc = Source.Document  'aktuelles Antwortdokument

Das funktioniert nicht, wenn es ein neues Dokument ist, denn das NotesDocument ist erst nach dem Speichern verfügbar.

Eine Alternative, die mir spontan einfällt, wäre, in den Aktionen die Formel zu ändern. Ich vermute mal, Du hast in den Views/Forms eine Aktion mit @Command([Compose]).

Dann könntest Du dort einfach mit

@If(@Contains(NG_Status; "Aktuelles Thema"); @Command([Compose]; ""); @Return("Fehlermeldung"))

arbeiten.

Das ist allerdings keine 100%ige Sicherheit, denn jeder User, der sich z.B. ein SmartIcon bauen kann, kann das umgehen.
Titel: Re: Queryopen
Beitrag von: Gandhi am 22.09.05 - 09:53:20
Warum dann Query und nicht Postopen?
Titel: Re: Queryopen
Beitrag von: khing am 22.09.05 - 11:01:00
@Driri
Das ist eine gute Idee. Da muss ich noch die Aktionen der Maske etwas anpassen und dann mit "Verstecken, wenn Formel war" die Maske ansich anpassen. Wäre auch eine Lösung.  :)

@Gandhi
Da bekomme ich mit gleichen Quelltext bei Set parentdoc = db.GetDocumentByUNID(doc.ParentDocumentUNID) die Fehlermeldung "Invalid universal id". Also ist das Dokument in diesem Stadium der DB auch noch nicht richtig bekannt.
Von der Sache her, brauche ich ja nur den Status oder die ID des übergeordneten Dokuments auf welches ich antworte und alles würde klappen. Das Hauptdokument muss doch beim öffnen des Antwortdokuments bekannt sein ($Ref oder so), sonst wäre es doch später auch nicht bekannt.  ???

Gruß Kristian
Titel: Re: Queryopen
Beitrag von: Driri am 22.09.05 - 11:32:00
Das kann auch im Postopen nicht funktionieren, da auch dann noch kein Document für das neue Antwortdokument existiert. Einziger Workaround wäre dann, man speichert das neue Dokument einmal, holt dich dann das Background-Document und prüft ab. Dann muß man natürlich ggf. nach der Prüfung das Background-Document wieder löschen.
Titel: Re: Queryopen
Beitrag von: khing am 22.09.05 - 11:46:15
Sicherlich möglich aber da müsste ich zu viel bedenken (Validierungen, Subject-Namen, Views etc.). Ich gehe da lieber über die Aktionen und Formelsprache und blende den Rest aus, falls der User es doch über eine Icon-Schaltfläche versucht (was ich gerade mal unseren Admins zutrauen würde). Vielen Dank für eure Hilfe.  ;)

Gruß Kristian