Domino 9 und frühere Versionen > ND6: Entwicklung
Kann nicht Felder von Dokumenten per LS Skript verändern?
(1/1)
immanuel:
Hallo Zusammen
Ich bin an einer elektonischen Abwesenheitsdatenbank dran. In der DB sollen Dokumente getaggt/vermerkt werden, die ich später per Agent löschen möchte. Leider kann ich nicht per Lotus Script auf diese Dokumente, bzw. Felder der Dokumente zugreifen - das ist mein Problem.
Der Workflow ist so: Chef möchte einen bereits akzeptierten Ferienantrag wieder zurückrufen per "revove" Button. Die Funktion des Buttons ist, dass ein LS Script nach den als Ferien gebuchten Tagen sucht und diese dann über das Feld DeletionMark markiert. Mein Vorgänger der DB hatte zu löschende Einträge gleich mit dem Befehl Call aldoc.remove(True) gelöscht. Dies funktioniert im Gegensatz zu meiner Variante, erfordert aber Löschrechte für Mitarbeiter. Und genau das wollen wir nicht. Wir wollen, dass nur der Agent Löschrechte hat. Blöderweise kann ich das Feld DeletionMark nicht per LS ansteuern. Im Feld DeletionMark erscheint kein Eintrag. Ich habe es mit dem Code unten probiert, leider ohne Erfolg. Ich erhalte auch keine Fehlermeldung.
--- Code: --- Dim aldoc As notesdocument
Set aldoc = db.createdocument
Dim nextdoc As notesdocument
Dim dayofweek As Variant
Dim view As notesview
Set view = db.getview("(All Leave Allowances)")
Dim calview As notesview
Set calview = db.getview("Leave Forms")
Dim reducedoc As notesdocument
Dim tmpall As Double
Dim tmpleft As Double
....
--- Ende Code ---
--- Code: --- ' IF APPOINTMENT TYPE IS ANNUAL LEAVE
Do While Not tmpstleav > tmpendleav
' Check if the day is between Monday and Friday, if not don't create leave form
dayofweek = Weekday(tmpstleav)
If dayofweek > 1 And dayofweek < 7 Then
Set aldoc = calview.getdocumentbykey(uidoc.fieldgettext("Requestor") & tmpstleav & "D")
If Not aldoc Is Nothing Then
Set nextdoc = calview.getnextdocument(aldoc)
Call aldoc.AppendItemValue("DeletionMark", "test") oder aldoc.DeletionMark = "test"
Call aldoc.Save( False, True )
'Call aldoc.remove(True)
End If
End If
tmpstleav = tmpstleav + 1
Loop
--- Ende Code ---
--- Code: ---Call aldoc.AppendItemValue("DeletionMark", "test") oder aldoc.DeletionMark = "test"
--- Ende Code ---
Der Code habe ich nur zur Veranschaulichung mit den beiden Varianten geschrieben ;)
Sieht ihr Fehler oder habt ihr mir einen Tipp, was ich machen kann?
Danke für eure Hilfe im Voraus!
Lieber Gruss
Manuel
koehlerbv:
Findet
Set aldoc = calview.getdocumentbykey(uidoc.fieldgettext("Requestor") & tmpstleav & "D")
überhaupt ein Dokument?
tmstleav ist ja offensichtlich ein Date/Time-Variant , und dass dann in einem Such-String? Finde ich nicht so prickelnd ...
Bernhard
immanuel:
Hallo Bernhard
Ja, die Abfrage funktioniert so. Sie ist in der Tat nicht so prickelnd. :)
Mit remove wurden die richtigen Dokumente gelöscht. Ich möchte sie aber nicht löschen, sondern zuerst zum Löschen markieren.
Gruss
Manuel
koehlerbv:
Ich kann den Fehler nicht erkennen, insofern diese Zeilen tatsächlich ausgeführt werden:
aldoc.DeletionMark = "test"
Call aldoc.Save( False, True )
AppendItemValue ist ggf. gefährlich, weil hierdurch bereits vorhandene Items verdoppelt werden können. Besser wäre ReplaceItemValue oder die oben zitierte Variante.
Bernhard
immanuel:
Danke fürs Testen!
Komisch, in der Testdatenbank habe ich es nochmals durchgespielt, nun funktionierte es mit:
aldoc.DeletionMark = "test"
Call aldoc.Save( False, True )
Auch in der produktiven DB. Ich denke, dass der Fehler bem Save Code war. Den hate ich nämlich anders zuvor,
Vielen Dank!
Lieber Gruss
Manuel
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln