LotusScript Dokumente im Hintergrund speichern

  • Hallo,


    ich brauche da wieder mal eure Hilfe. Ich hoffe Ihr könnt mir helfen.


    Ich habe zwei Masken "Test" und "Test1". In der Maske Test1 ist ein Button "Speichern" und der Button ändert den Wert eines Feldes in der Maske "Test".


    Die Änderung des Wertes funktioniert ohne Probleme, nur ich habe in der Maske Test ein "Historie" Feld und wenn ich auf den Button "Speichern" klicke ändert sich ja der Wert des Feldes "Wert auf 1", aber das erkennt der Historie Feld nicht, dass der Button in die Maske reingeht und den Feldwert ändert. Wenn ich den Wert manuell ändere und speicher funktioniert es ohne probleme.


    Vielen Dank im Voraus

  • Hallo Andreas,


    vielen Dank für deine schnelle Antwort.
    Also der Code steht in der Maske "Test", wo auch das Feld Status und Historie ist.
    In der Maske "Test1" ist ein Button, der den Wert des Feldes "Status" ändert.


    Code Test (Declarations):
    Dim vglinhalt As String


    Code Test (Postopen):
    Sub Postopen(Source As Notesuidocument)
    Dim doc As NotesDocument
    Set doc = Source.Document
    vglinhalt = doc.Status (0)
    End Sub


    Code Test (Querysave):
    Set doc = Source.Document
    If doc.Status (0) = "" Then
    Msgbox "Bitte geben Sie einen Namen ein", 16, "Fehler"
    Continue = False
    Exit Sub
    End If
    If doc.Status (0) <> vglinhalt Then
    Dim historie As Variant
    historie = doc.Historie
    If historie (Ubound (historie)) <> "" Then
    Redim Preserve historie (Ubound (historie) + 1)
    End If
    historie (Ubound (historie)) = Now & " [" & vglinhalt & "] -> [" & doc.Status (0) & "]"
    doc.Historie = historie
    vglinhalt = doc.Status (0)
    Call doc.Save(False,True)
    End If


    Test1 Speichern Button:
    Sub Click(Source As Button)

    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument

    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument

    Set db = session.CurrentDatabase
    Set view = db.GetView( "(Lookup Nummer)" )
    Set uidoc = ws.CurrentDocument

    Set doc = view.GetDocumentByKey( uidoc.FieldGetText("Nummer"), True )

    Dim Status As String
    Status = doc.Status(0)

    If Status = "0" Then
    doc.Status = "1"
    Elseif Status ="1" Then
    doc.Status = "0"
    End If

    Dim AusgeliehenAm As String
    AusgeliehenAm = Now
    doc.AusgeliehenAm = AusgeliehenAm

    Call doc.Save(False,True)

    End Sub

  • Der QuerySave-Event wird aber nicht durchlaufen, wenn du die Maske "Test" mittels des Buttons aus der Maske "Test1" speicherst.
    Also ist es nur folgerichtig, dass deine History nicht berechnet wird.


    Du wirst also wahrscheinlich nicht umhinkommen, den Code zum Berechnen deines History-Feldes auch mit in den Button
    der Maske "Test1" zu uebernehmen.



    Andreas

  • Hallo noch eine kleine kurze Frage
    Kann ich eigentlich einem Textfeld - Berechnet beim Anlegen und Merfachwerte erlaubt, die durch eine neue Zeile getrennt werden


    auf zum Beispiel 10 Zeilen beschränken ?


    Also, dass ich sage nach 10 Einträgen bzw. 10 Zeilen lösche das Inhalt des Feldes und mache normal weiter?

  • Grob gesagt.


    - Auslesen der Werte ==> NotesDocument.GetItemValue("Name des Feldes")
    - der gelesene Wert/die gelesenen Werte sind auf jeden Fall ein Array
    - Arraygrenzen (obere Grenze) pruefen UBound(Array)
    - wenn Maximalwert erreicht, dann leerraeumen, wenn nicht, dann Werte an die gelesenen Werte (den gelesenen Array) anhaengen
    - neuen Array/geaenderten Array zurueckschreiben
    - Speichern



    Andreas

  • Warum der Aufwand? Bei einem berechneten Feld reicht es völlig, mittels @Subset die letzten 10 Eintrage anzeigen zu lassen.


    Da mit dem Feld nicht geschafft wird und da es schon eine ganze Menge an notierten Bearbeitungen braucht, um die 32k-Grenze zu knacken, ist es eigentlich irrelevant, wieviel Einträge das Feld hat, solange eben nur die gewünschten 10 dargestellt werden.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hallo RockWilder,


    danke für deine Antwort.


    Ich habe ein Feld (Berechnet beim anlegen und Mehrfachwerte erlaubt getrennt durch eine Neue Zeile).


    Für @Subset brauche ich ja eine Liste. Wie kann ich aus diesem Feld eine Liste erstellen?

  • Dann verweise ich noch mal auf die Designerhilfe.
    Dort steht ganz genau, wie dein Explode aussehen muss und auch warum es so nicht funktionieren kann


    Ausserdem ignorierst du ja das was du mit Explode erzeugt hast

  • Dann hast du die Hilfe immer noch nicht genau gelesen.


    Explode trennt nur bei Werten wie Komma, Semikolon und Leerzeichen ohne Angabe des zweiten Parameters.


    Also solltest du da auch angeben, daß es ein Zeilenumbruch ist.


    Und dazu die zweite Frage:
    Bist du sicher, daß die Werte auch genauso im Feld drinstehen und hast das per Dokumenteigenschaften geprüft ?

  • Hallo ich weiß, dass meine Fragen langsam nerven, aber ich hoffe, dass ist die letzte Frage.


    1) Ich habe in einer Maske ein Feld ("Nummer") berechnet wird Sie im QuerySave.
    Der Quellcode funktioniert auch so. Also das Feld bekommt auch die Nummern geliefert.
    Nur wenn ich ein Dokument von der Datenbank lösche zum Beispiel, dass Dokument mit der Nummer
    50005 und die Datenbank hat schon 30 Dokumente (50030), dann erstellt mir es beim Nächsten mal
    die 50030 nocheinmal doppelt.
    Meine Frage wäre dazu. Wie kann ich vor dem Übergeben des Wertes an das Feld überprüfen,
    ob die Nummer schon vergeben ist oder die Ansicht ist absteigend sortiert einfach das erste
    Wert nehmen + 1. Wie kann ich den ersten Wert der Ansicht auslesen?


    Dim uiws As New notesuiworkspace
    Dim uidoc As notesuidocument
    Set uidoc = uiws.currentdocument
    Dim docnumber As String
    docnumber = uidoc.fieldgettext("DokumentenNummer")
    If docnumber = "" Then
    Dim session As New notessession
    Dim db As notesdatabase
    Set db = session.currentdatabase
    Dim view As notesview
    Set view =db.getview("(Lookup Nummer)")
    Dim doc As notesdocument
    Set doc = view.getfirstdocument
    Dim count As Long
    count = 50000
    Do Until doc Is Nothing
    count = count+1
    Set doc = view.getnextdocument(doc)
    Loop
    Dim ausgabe As String
    ausgabe = Cstr(count+1)
    Call uidoc.fieldsettext("DokumentenNummer", ausgabe)
    End If


    2)