Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: hmarco am 06.08.02 - 14:46:53
-
Hallo,
ich habe ein paar Antwortobjekte, in denen im Feld
SA entweder "Ja" oder "Nein" steht,
jetzt möchte ich, dass wenn ein Antwortdokument
ein "Ja" enthält, dass dies im Hauptdokument in einer
Ansicht ein "Ja" angezeigt wird.
Ansonsten ein "Nein".
Mfg Marco
-
Hi,
füge im Hauptdokument ein entsprechendes Feld ein und setze den Vorgagewert auf "Nein".
Im QuerySave-Event des Antwortdokumentes füllst du dann dieses Feld in Abhängigkeit des Feldes SA.
Das könnte so aussehen:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim parentdoc As Notesdocument
Set db = session.CurrentDatabase
Set doc = Source.Document
If doc.SA(0) = "Ja" Then
Set parentdoc = db.GetDocumentByUNID(doc.ParentDocumentUNID )
parentdoc.Feldname = "Ja"
Call parentdoc.Save(True, True)
End If
Ich hoffe das hilft dir weiter.
Axel
-
Hallo,
wie ich deinen Quellcode verstehe:
Ich erstelle ein Antwortobjekt mit "Ja" und danach ein
Antwortobjekt mit "Nein".
Dann würde er doch auch "Nein" ins Hauptdokument schreiben. Jedoch ich möchte es ja so haben,
dass im Hauptdokument ein "Ja" steht, wenn mindestenes ein Antwortobjekt ein "Ja" enthält.
Aber der Ansatz ist ja schon mal nicht schlecht.
Mfg Marco
-
Ich erstelle ein Antwortobjekt mit "Ja" und danach ein
Antwortobjekt mit "Nein".
Dann würde er doch auch "Nein" ins Hauptdokument schreiben.
Hi,
dem ist nicht so, denn er bearbeitet das Feld im Hauptdokument nur, wenn im Antwortdokument im Feld SA ein Ja steht -> If - Abfrage.
Das sollte eingentlich so funktionieren. Hast du's mal probiert?
Axel
-
Hallo,
geht leider nicht er setzt den Wert nicht um.
Kann es am Vorgabewert liegen?
Habe folgendes eingegeben:
@If(@IsNewDoc;"Nein";SA)
Mfg Marco
-
Hi,
glaube ich eigentlich nicht. Aber versuch's mal ohne bzw. nur mit "Nein".
Bekommst du eine Fehlermeldung, setzt er den Feldwert im Antwortdokument nicht oder hat er Probleme mit dem Script (was sieht man im Debugger) ?
Axel
-
Hi Marco!
Probier mal das im Querysave der Antwortmaske:
Dim session As New NotesSession
Dim db As NotesDatabase
Dim parentUNID As String
Dim ParentDocument As NotesDocument
Dim sa As NotesItem
Dim saValue As String
Dim responses As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = Source.Document
parentUNID = doc.ParentDocumentUNID
Set ParentDocument = db.GetDocumentByUNID(parentUNID)
Set responses = ParentDocument.Responses
Set doc = responses.GetFirstDocument
Do While Not doc Is Nothing
Set sa = doc.GetFirstItem("SA")
saValue = sa.Values(0)
If saValue = "ja" Then
ParentDocument.FeldName = "Ja"
Call ParentDocument.Save(True,True)
Exit Sub
End If
Set doc = responses.GetNextDocument(doc)
Loop
ParentDocument.FeldName = "Nein"
Call ParentDocument.Save(True,True)
-rar
-
@rar
Ähhh?!
Warum alle Antwortdokumente durchlaufen, wenn man nur eins bearbeitet? ??? ???
Axel
-
Angenommen:
Ich habe 2 Antworten. Beide "Nein"
Dann setze ich den Wert einer Antwort auf "Ja". Dann würde es reichen, wenn ich nur in dem einen Antwortdokument nachschaue.
Jetzt wird noch das zweite auf "Ja" gesetzt. Dann passts auch noch.
Wenn aber dann das erste AntwortDoc wieder auf "Nein" gesetzt wird, muß ich ja (bevor ich den Wert im HauptDoc wieder auf "Nein" setze) nachschauen, ob in irgendeiner anderen Antwort "Ja" steht.
Glaub ich. War das irgendwie verständlich? ???
-rar
-
@rar
Yoo!
Von der Seite betrachtet hast du recht. Diese Seite der Medaille hab ich bisher ausser Acht gelassen.
Axel
-
;D
*mirselberaufdieschulterklopfend*
-
@rar
Aber nicht so fest, denn du kennst ja das Sprichwort
"Eigenlob....." ;D ;D
Trotzdem, darfst du ein bisschen klopfen. Hast das gut gemacht. ;D ;D
Axel
-
Hallo,
beide Skripts gehen nicht.
Es wird der Wert in SA wird nicht
gesetzt.
Mfg Marco
-
Hi,
wie setzt du denn den Wert von SA? Soweit ich das bisher verstanden haben macht das der User per Eingabe.
Axel
-
Heißt das Feld im Hauptdoc auch SA?
-
Hallo,
das Feld heißt im Hauptdokument wie auch im Antwortdokument "SA".
Das Feld "SA" im Antwortobjekt ist nach einem anderem Feld berechnet.
Mfg Marco
-
hallo,
habt ihr noch eine Idee?
Wäre euch sehr dankbar.
Mfg Marco
-
Hi,
kann es sein, dass durch die Berechnung nach einem anderen Feld ein falscher Wert in SA steht, und dadurch die Aktualisierung des HauptDoks nicht zustande kommt?
Was sagt denn der Debugger? Welchen Feldinhalt hat SA bei der IF-Abfrage ?
Axel
-
Hallo,
merkwürdig in QuerySave hat Notes
das Skript nicht gespeichert. ???
Ich habe jetzt das Skript von "rar" eingefügt und bekomme jetzt den Fehler:
"invalid universal id"
Was bedeutet das?
Mfg Marco
-
Hi,
das bedeutet, dass er das Dokument mit dieser ID nicht finden kann.
Überprüfe das Script nochmal.
Axel
-
Hallo,
bei dieser Anweisung bleibt er hängen:
Set ParentDocument = db.GetDocumentByUNID(parentUNID)
Mfg Marco
-
Hi!
Vergleich mal die parentUNID aus dem Debugger mit der UNID des Hauptdokumentes...
Kann es vielleicht sein, daß das ParentDoc der Antwort schon gelöscht ist?
-rar
-
Hallo,
kann es evt. angehen, dass ein Skript was ich mal eingefügt habe um Dokumente vor dem bearbeiten zu
schützen die UID verändert.
Ich habe in der Datenbank auch noch das Problem,
dass immer wenn ich die Maske "Lizenz" öffne, dass
ein Dokument mit den Werten die ich dort eingetragen
habe erscheint und auch nicht mehr weg geht.
Er zeigt mir dann immer an Vorgabemaske nicht gefunden.
Mfg Marco
-
kann es evt. angehen, dass ein Skript was ich mal eingefügt habe um Dokumente vor dem bearbeiten zu
schützen die UID verändert.
Hi,
die ID eines Dokumentes wird nicht verändert. Sie wird einmal vergeben (beim Anlegen) und bleibt, die Lebendauer der Dokumentes über, unverändert.
Hast du evt. Dokumente über die Zwischenablage ausgeschnitten oder kopiet und dann wieder eingefügt?
Ich habe in der Datenbank auch noch das Problem,
dass immer wenn ich die Maske "Lizenz" öffne, dass
ein Dokument mit den Werten die ich dort eingetragen
habe erscheint und auch nicht mehr weg geht.
Er zeigt mir dann immer an Vorgabemaske nicht gefunden.
Was meinst du, mit nicht mehr weg geht. Ich werde das Gefühl nicht los in der Datenbank stimmen noch einige andere Dinge nicht.
Axel
-
Grüße!
die ID eines Dokumentes wird nicht verändert. Sie wird einmal vergeben (beim Anlegen) und bleibt, die Lebendauer der Dokumentes über, unverändert.
Ist nicht ganz richtig. Über die Property UniversalID im NotesDocument kann man die UNID ändern.
Marco:
Dein Problem mit der Vorgabemaske kann auftreten, wenn man ein Doc ohne dem Feld 'Form' oder mit einer Maske, die es in der Db nicht gibt, aufmachen will.
Den Fehler könntest du beheben, wenn du in den Eigenschaften der Maske die Option Vorgabe-Datenbankmaske anhack ist.
Was sagt denn der UNID Vergleich?
-rar
-
Ist nicht ganz richtig. Über die Property UniversalID im NotesDocument kann man die UNID ändern.
@rar
Ist mir entgangen, danke für den Hinweis.
Axel
-
Hallo,
ich weiß auch, dass da was nicht stimmt.
Ich habe aber schon mal ein bisschen experimentiert und herausgefunden, dass diese "Vorgabemaske nicht gefunden"-Dokumente erstellt werden, wenn ich ein neues Dokument erstellen will, es nicht speichere wenn ich das Fenster schließe. Danach habe ich diese Dokumente. Dies passiert auch bei anderen Datenbanken, die das gleiche Skript enthalten.
Ich schreib euch mal was für Skripte überhaupt in meinen Masken sind:
Sub Postopen(Source As Notesuidocument)
Dim sess As New NotesSession
Dim doc As NotesDocument
Dim thatUser As String
Set doc = source.document
If Source.EditMode Then
If doc.HasItem("LockEdit") Then
Source.EditMode = False
thatUser = doc.LockEdit(0)
Msgbox thatUser & " bearbeitet derzeit dieses Dokument. Solange dieser Benutzer es bearbeitet, können sie nichts ändern."
Else
Call doc.ReplaceItemValue("LockEdit", sess.CommonUserName)
Call doc.ReplaceItemValue("LockEditTime", Now)
Call doc.Save(True, True)
End If
End If
End Sub
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim sess As New NotesSession
Dim doc As NotesDocument
Dim thatUser As String
Set doc = source.document
If Source.EditMode Then
Continue = True
Else
If doc.HasItem("LockEdit") Then
thatUser = doc.LockEdit(0)
Msgbox thatUser & " bearbeitet derzeit dieses Dokument. Solange dieser Benutzer es bearbeitet, können sie nichts ändern."
Continue = False
Else
Continue = True
Call doc.ReplaceItemValue("LockEdit", sess.CommonUserName)
Call doc.ReplaceItemValue("LockEditTime", Now)
Call doc.Save(True, True)
End If
End If
End Sub
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim parentUNID As String
Dim ParentDocument As NotesDocument
Dim sa As NotesItem
Dim saValue As String
Dim responses As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = Source.Document
parentUNID = doc.ParentDocumentUNID
Set ParentDocument = db.GetDocumentByUNID(parentUNID)
Set responses = ParentDocument.Responses
Set doc = responses.GetFirstDocument
Do While Not doc Is Nothing
Set sa = doc.GetFirstItem("SA")
saValue = sa.Values(0)
If saValue = "ja" Then
ParentDocument.FeldName = "Ja"
Call ParentDocument.Save(True,True)
Exit Sub
End If
Set doc = responses.GetNextDocument(doc)
Loop
ParentDocument.FeldName = "Nein"
Call ParentDocument.Save(True,True)
End Sub
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim sess As New NotesSession
Dim doc As NotesDocument
Set doc = source.document
If doc.LockEdit(0) = sess.CommonUserName Then
Call doc.RemoveItem("LockEdit")
Call doc.RemoveItem("LockEditTime")
Call doc.Save(True, True)
End If
End Sub
Mfg Marco