Autor Thema: Historie anlegen  (Gelesen 12892 mal)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #20 am: 10.02.11 - 11:23:06 »
Tja, dann verbuche ich wohl diese Aktion einfach mal unter Learning LotusScript.  :P
Sehr gute Einstellung, weiter so !  ;)

Offline ThomasHB

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Historie anlegen
« Antwort #21 am: 10.02.11 - 11:28:47 »
Zitat
Das ist ein Irrtum, GetNextDocument (doc) stoppt nicht, wenn sich die ID ändert, bleibt also nicht innerhalb der Kategorie (wäre mir jedenfalls völlig neu).

Doch, so wie ich das verstanden habe... Wenn Du nach GetDocumentByKey die Dokumente suchst und dabei aber eine Kategorisierte View hast, dann tritt genau dieser Effekt ein.

Die Designerhelp 8.5.2 für die GetDocumentbyKey Methode sagt unter Punkt 5 für mich genau das aus... Aber vielleicht habe ich das auch nicht richtig verstanden... Wenn das so ist, dann korrigiert mich gerne, damit ich hier nichts falsches im Gedächtnis halte...  :)

Grüße,
Thomas
« Letzte Änderung: 10.02.11 - 11:34:14 von ThomasHB »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #22 am: 10.02.11 - 11:37:38 »
In der 7er Hilfe steht davon nichts. Falls das eine Änderung in 8 oder 8.5 ist, kann das eine böse Falle für ältere Scripte sein. Gut zu wissen ...

Nachtrag: Auszug aus Hilfe 7 zu diesem Thema (in GetDocumentByKey):

"If you use a GetNextDocument loop, you must explicitly check to make sure the next document is a match"
« Letzte Änderung: 10.02.11 - 11:41:12 von Peter Klett »

Offline ThomasHB

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Historie anlegen
« Antwort #23 am: 10.02.11 - 11:40:08 »
Lies es dir gerne mal durch... Ich habe es so verstanden.  :)
Und dann eben für meine Zwecke so gebaut, wie ich dachte, das es sein muss...

Das es auch elegant geht, habe ich erst heute erfahren...  ;)

Zitat von: IBM Lotus Designer 8.5.2
This script gets all of the documents in the category "Spanish leather" in the By Category view of the current database, and puts them in the Boots folder. The script finds the first document in the category using GetDocumentByKey, and the remaining documents in the category using GetNextDocument. The script uses the ColumnValues property in NotesDocument to check each document's column values: as long as a document's value for the first sorted column in the view equals "Spanish leather," the script places the document in the Boots folder. If the document's value for the first sorted column does not equal "Spanish leather," or if there are no more documents in the view, the script ends.
See GetAllDocumentsByKey for an easier way to do this. The only advantage to this technique is that it correctly sets the ColumnValues property in the retrieved documents while GetAllDocumentsByKey does not.

Code
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim column As NotesViewColumn
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set view = db.GetView( "By Category" )
' get the first sorted and categorized column in the view
Forall c In view.Columns
  If ( c.IsSorted And c.IsCategory ) Then
    Set column = c
    Exit Forall
  End If
End Forall
' get the first document that matches the key
Set doc = view.GetDocumentByKey( "Spanish leather" )
' get the remaining documents that match the key
' since ColumnValues array starts at 0 for position 1,
' subtract 1 from the column position
Do While Not ( doc Is Nothing )
  If ( doc.ColumnValues( column.Position - 1 ) =  _
  "Spanish leather" ) Then
    Call doc.PutInFolder( "Boots" )
  Else
    Exit Do
  End If
  Set doc = view.GetNextDocument( doc )
Loop
« Letzte Änderung: 10.02.11 - 11:42:22 von ThomasHB »

klaussal

  • Gast
Re: Historie anlegen
« Antwort #24 am: 10.02.11 - 11:44:41 »
Aus der 8er-Hilfe:
Zitat
This script gets all of the documents in the category "Spanish leather" in the By Category view of the current database, and puts them in the Boots folder. The script finds the first document in the category using GetDocumentByKey, and the remaining documents in the category using GetNextDocument. The script uses the ColumnValues property in NotesDocument to check each document's column values: as long as a document's value for the first sorted column in the view equals "Spanish leather," the script places the document in the Boots folder. If the document's value for the first sorted column does not equal "Spanish leather," or if there are no more documents in the view, the script ends.
See GetAllDocumentsByKey for an easier way to do this. The only advantage to this technique is that it correctly sets the ColumnValues property in the retrieved documents while GetAllDocumentsByKey does not.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #25 am: 10.02.11 - 11:45:33 »
Prima, Fehlalarm

Do While Not ( doc Is Nothing )
  If ( doc.ColumnValues( column.Position - 1 ) =  _
  "Spanish leather" )
Then
    Call doc.PutInFolder( "Boots" )
  Else
    Exit Do
  End If
  Set doc = view.GetNextDocument( doc )
Loop

Die Beschreibung zu dem Beispielscript sagt, dass dort geprüft wird, ob die Kategorie die gleiche ist. Sprich, Du musst es selber prüfen (wie bisher in den alten Versionen auch). Und genau das hast Du in Deiner Routine nicht getan und deshalb durfte die nicht funktionieren.

Puh, Blutdruck wieder senken ...

Offline ThomasHB

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Historie anlegen
« Antwort #26 am: 10.02.11 - 11:50:40 »
Und genau das hast Du in Deiner Routine nicht getan und deshalb durfte die nicht funktionieren.

Tja, dann ist es mir ein Rätsel... Ich habe genau das gerade noch mal versucht.
Das Programm funktioniert und für mich sieht es so aus, als wenn das schon direkt geprüft würde...

Zitat
Puh, Blutdruck wieder senken ...

Ich wäre immer vorsichtig, wenn Neulinge versuchen mit klugen Weißheiten anzugeben.  ;D

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #27 am: 10.02.11 - 11:52:12 »
Du siehst, hier wird jeder ernst genommen  ;)

Offline ThomasHB

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Historie anlegen
« Antwort #28 am: 10.02.11 - 11:56:02 »
Jetzt wurmt es mich aber trotzdem...
Warum funktioniert dann mein Programm?

Der Verhält sich genau so wie beschrieben, ohne explizite Prüfung...  ???

Was kann es denn sein? Mein Code ist ja bekannt, die View Settings jetzt auch.
Stimmt die Help möglicherweise nicht...

Die DB bzw. das Script verhält sich ja nicht so, weil es gerade Lust dazu hat.  ;)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #29 am: 10.02.11 - 12:03:18 »
Vielleicht testest Du mit der letzten ID (also mit der, die ganz unten in der Ansicht steht). Nimm' mal eine andere. Trag mal als Person denjenigen ein, der im letzten Dokument enthalten ist, dann wird keine Historie erstellt, auch wenn der Name geändert wurde.

Es wäre mir auch unerklärlich, woher GetNextDocument wissen sollte, nach welcher Kategorie mittels GetDocumentByKey gesucht wurde. Ich glaube daher, dass Dein Script nur zufällig funktioniert.

Offline ThomasHB

  • Aktives Mitglied
  • ***
  • Beiträge: 164
Re: Historie anlegen
« Antwort #30 am: 10.02.11 - 12:09:20 »
Vielleicht testest Du mit der letzten ID (also mit der, die ganz unten in der Ansicht steht). Nimm' mal eine andere. Trag mal als Person denjenigen ein, der im letzten Dokument enthalten ist, dann wird keine Historie erstellt, auch wenn der Name geändert wurde.

Es wäre mir auch unerklärlich, woher GetNextDocument wissen sollte, nach welcher Kategorie mittels GetDocumentByKey gesucht wurde. Ich glaube daher, dass Dein Script nur zufällig funktioniert.

Tja... Das glaube ich jetzt auch.  ;D
Ich habe das natürlich sofort mal gemacht.

Schlägt natürlich mit aller Härte zurück und verhält sich exakt wie du es beschreibst.
Es wird kein Historiendokument erzeugt.

Gut, dann konnte das aber jetzt auch geklärt werden.
Das muss ich mir unbedingt merken, schöne Konversation. Hat mir einiges gebracht, Vielen Dank !

Viele Grüße,
Thomas

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #31 am: 11.02.11 - 06:35:56 »
Hier noch eine Korrektur zu meiner vorgeschlagenen Lösung:

Im Queryclose ist der Name natürlich der, der aktuell im Dokument eingetragen ist, unabhängig davon, ob das Dokument gespeichert wurde. Deshalb würde ich mir im PostSave den Namen merken und im QueryClose nur dann ein Historiendokument erstellen, wenn 1. im PostSave ein Name gemerkt wurde (sonst wurde nicht gespeichert) und 2. dieser Name sich gegenüber dem Öffnen geändert hat. Meine Erweiterungen in blau:

Declarations
Dim vglperson As String
Dim merkperson As String

PostOpen
Dim doc As NotesDocument
Set doc = Source.Document
vglperson = doc.Person (0)

PostSave
Dim doc As NotesDocument
Set doc = Source.Document
merkperson = doc.Person (0)


QueryClose
Dim doc As NotesDocument
Set doc = Source.Document
If merkperson <> "" And vglperson <> merkperson Then
   ' -> neues Historiendokument schreiben
End If

 

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #32 am: 11.02.11 - 10:52:02 »
Ich bin der Meinung, das eine solche Aktion nicht in das PostSave, sondern ins QuerSave gehört - zusammen mit einem passenden ErrorHandling. Geht im PostSave etwas schief, ist zwar die Änderung im Inventar-Dokument gespeichert, das History-Dokument wird aber nicht angelegt.

Bernhard

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Historie anlegen
« Antwort #33 am: 11.02.11 - 11:47:53 »
Es kommt immer darauf an, was sonst noch in einem Dokument abläuft. Wenn in irgendeinem QuerySave mit Continue = False eine Validierung das Speichern verhindert (z.B. in einer Teilmaske), wird die Historie gespeichert, obwohl das Dokument nicht gespeichert wurde. Wenn das PostSave läuft, ist definitiv das Dokument gespeichert worden /zumindest gehe ich davon aus).

Die Wahl besteht nur, ob ich im Fehlerfall ein Dokument zu viel oder zuwenig habe, ansonsten muss man dafür sorgen, dass möglichst keine Fehler auftreten können

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz