Postsave

  • Hallo zusammen,


    ich habe mal wieder eine Frage: Ich habe eine Antwortmaske. Hier wird im Postsave die Anzahl der Antworten auf das Parentdokument gezählt. Nun möchte ich aber verhindern, das bei nochmaligem Aufruf des Antwortdokuments die Anzahl um eins raufgesetzt wird. Wie mache ich das denn?

  • Wo sollen die Anzahl der antworten denn hingeschrieben werden ? In das Dokument oder in die Ansichten ?
    Bei den Ansichten könntest du das auch über Formelsprache berechnen und zwar zur Laufzeit, d.h. du musst nichts abspeichern.

  • Wenn es einmal berechnet ist..einen Feldwert setzen z.B. Count_resp = "Yes"
    Und das ganze inne Schleife
    If ( doc.count_resp(0) <> "Yes" ) then


    *Antworten zaehlen und wegschreiben
    doc.count_resp = "Yes"


    End if

  • Also das ist mein Code im Postsave:


    Dim session As New notessession
    Dim db As notesdatabase
    Dim col As notesdocumentcollection
    Dim p_doc, doc As notesdocument
    Dim item As notesitem
    Dim REFUNID As String

    Set doc=source.document
    Set item=doc.getfirstitem("$REF")
    REFUNID=item.values(0)

    Set db = session.currentdatabase
    Set p_doc=db.Getdocumentbyunid(REFUNID)
    Set col = p_doc.responses
    count = col.count
    doc.berechnetesFeld=count + 1
    Call doc.save(True,False,False)
    Wo soll ich da nun die if_Anweisung reinsetzen?

  • Nirgends, das ist der Vorschlag den ich gemacht hatte.
    Lass nur das Count + 1 beim Zuweisen an das Feld weg dann hast du da den richtigen Wert drinstehen. Denk aber dran dass hierbei immer nur dann der richtige Wert drinsteht, wenn du das entsprechende Antwortdokument nach dem Anlegen der letzten Antwort gespeichert hast.
    Die bessere Variante wäre statt der Zeilen


    count = col.count
    doc.berechnetesFeld=count + 1
    Call doc.save(True,False,False)


    einfach


    call col.StampAll("berechnetesFeld", col.Count)


    zu machen.
    Dann werden beim Speichern eines Antwortdokumentes alle zum gleichen Hauptdokument gehörigen Antwortdokumente mit aktualisiert

  • Abhaengig vom Feldtyp waere es doch nur was Du mit dem WErt machen willst. Zur Ueberpruefunf oder nur zum auslesen ist es egal welcher Typ der Wert ist. Der WErt, den Du dort reinschreibst - col.Count - ist Zahl. Steht auch in der Hilfe ;)
    Ausserdem musste das Feld nicht extra vorher anlegen; macht doch script

  • Beim Testen hat sich jetzt das Problem ergeben das ja alle Antwortdokumente die Zahl der Antworten haben. Nur das wollte ich nicht. Ich wollte das die alten Antworten ihre Nummer behalten. Nochmals mein Code:


    Dim session As New notessession
    Dim db As notesdatabase
    Dim col As notesdocumentcollection
    Dim p_doc, doc As notesdocument
    Dim item As notesitem
    Dim REFUNID As String

    Set doc=source.document
    Set item=doc.getfirstitem("$REF")
    REFUNID=item.values(0)

    Set db = session.currentdatabase
    Set p_doc=db.Getdocumentbyunid(REFUNID)
    Set col = p_doc.responses
    Call col.StampAll("berechnetesFeld", col.Count)