Autor Thema: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)  (Gelesen 3684 mal)

Offline JayDee

  • Senior Mitglied
  • ****
  • Beiträge: 408
Anwendungsfall: Dokumente werden manuell von Datenbank A nach Datenbank B kopiert (via Zwischenablage, diese Vorgehensweise ist vom Nutzer ausdrücklich so gewollt und ihm auch nicht auszureden), aufgrund der nahezu identischen Schablonen beider Datenbanken (basierend auf "Dokumentenbibliothek") ist dies auch kein Problem.

In Datenbank B läuft nun regelmäßig ein Agent, der u.a. den "Hinzugefügt in Datenbank B"-Zeitpunkt der  Dokumente benötigt, also im Dokument-Eigenschaften-Dialog entspräche dies der Zeile "Hinzugefügt (in dieser Datei)".
Ausgerechnet diesen Zeitpunkt bekommt man aber mit der NotesDocument-Klasse nicht ermittelt, sondern nur folgende Zeitpunkte:

NotesDocument.Created (hier wird immer "Erstellt (ursprünglich)" zurückgegeben und nicht "Erstellt (in dieser Datei)"
NotesDocument.LastModified (interessiert nicht)
NotesDocument.LastAccessed (interessiert nicht)

Gibt es eine Möglichkeit, den gewünschten Zeitpunkt mit LS zu ermitteln?
Vermutlich könnte man über QueryPaste von NotesUIView eine eigene Mimik aufsetzen, die eingefügten Dokumente "abfangen" und die Zeitpunkte so selbst merken, aber ich frage mich ob's nicht auch einfacher geht.
MfG,
Thomas

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #1 am: 15.05.18 - 14:39:46 »
mit API-Calls.

Aus meiner Grabbelbox:

Const wAPIModule = "NNOTES" ' Windows/32

Const NOTE_ADDED_TO_FILE = 13

Declare Private Function ConvertTIMEDATEToText Lib wAPIModule Alias "ConvertTIMEDATEToText" _
( Byval zI As Long, Byval zT As Long, T As Long, Byval S As String, Byval nS As Integer, nT As Integer) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( Byval P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( Byval hDB As Long) As Integer
Declare Private Function NSFNoteOpen Lib wAPIModule Alias "NSFNoteOpen" _
( Byval hDB As Long, Byval NoteID As Long, Byval F As Integer, hNT As Long) As Integer
Declare Private Function NSFNoteClose Lib wAPIModule Alias "NSFNoteClose" _
( Byval hNT As Long) As Integer
Declare Private Function NSFNoteGetInfo Lib wAPIModule Alias "NSFNoteGetInfo" _
( Byval hNT As Long, Byval M As Integer, V As Any) As Integer
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( Byval zP As Long, Byval S As String, Byval F As String, Byval N As String) As Integer

Function AddedToFile(doc As NotesDocument) As String
With doc.ParentDatabase
db$ = String$(1024, " ")
OSPathNetConstruct 0, .Server, .FilePath, db$
End With

Dim hDB As Long
NSFDbOpen db$, hDB
If hDB = 0 Then Exit Function

Dim hNT As Long
Dim T(1) As Long
NSFNoteOpen hDB, Clng("&H" & doc.NoteID), 0, hNT
If Not hNT = 0 Then
NSFNoteGetInfo hNT, NOTE_ADDED_TO_FILE, T(0)
NSFNoteClose hNT
s$ = Space(80)
ConvertTIMEDATEToText 0, 0, T(0), s$, 80, ns%
AddedToFile = Left$(s$, ns%)
End If

NSFDbClose hDB
End Function

Offline JayDee

  • Senior Mitglied
  • ****
  • Beiträge: 408
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #2 am: 15.05.18 - 15:10:22 »
Super, ich danke vielmals!
MfG,
Thomas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #3 am: 15.05.18 - 15:27:47 »
Ab 9.0.1 gibt es @AddedToThisFile. Funktionier mit Socherheit auch in LS in Verbindung mit evaluate.

https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/user/wpd_whatsnew.html
« Letzte Änderung: 16.05.18 - 08:22:16 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline JayDee

  • Senior Mitglied
  • ****
  • Beiträge: 408
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #4 am: 15.05.18 - 16:04:46 »
Cool. Danke auch dir!
MfG,
Thomas

Offline JayDee

  • Senior Mitglied
  • ****
  • Beiträge: 408
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #5 am: 16.05.18 - 14:32:55 »
Abschließende Anmerkungen:
Die LS-Variante mit den API-Calls funktioniert wie gewünscht, aber nur wenn der Agent bzw. das Script im Client läuft. Auf dem Server gibt es einen Laufzeitfehler, dem ich aber nicht weiter nachgegangen bin. Ich vermute dass da nur die entsprechende DLL nicht gefunden wird.

Die @AddedToThisFile Variante funktioniert perfekt mit Evaluate in LS, entgegen der Doku, die behauptet dass diese Formel nur in Spaltenformeln funktioniert:
https://www.ibm.com/support/knowledgecenter/en/SSVRGU_9.0.1/basic/H_ADDEDTOTHISFILE.html
« Letzte Änderung: 16.05.18 - 14:35:14 von JayDee »
MfG,
Thomas

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.710
  • Geschlecht: Männlich
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #6 am: 20.05.18 - 07:29:24 »
Hier noch der Vollständigkeit halber eine etwas kompaktere API Lösung. Da wir das NotesDocument ja schon haben, sparen wir uns das erneute Öffnen über die API
Code
'Declaration
Type TIMEDATESTRUCTE
	Innards(1) As Long
End Type

Declare Sub W32_NSFNoteGetInfo Lib "nnotes" Alias "NSFNoteGetInfo" (_
Byval note_handle As Long, _
Byval note_member As Integer, _
value_ptr As Any )
Declare Function W32_ConvertTIMEDATEToText Lib "nnotes.dll" Alias "ConvertTIMEDATEToText" (_
Byval nullFormat As Long, _
Byval textformat As Long, _
td As Any, _
Byval Buff As String, _
Byval maxlen As Integer, _
textLength As Integer) As Integer

Function NotesDocumentAddedToFile( ndoc As NotesDocument) As Variant
	
	Dim hNote As Long
	Dim tds As TIMEDATESTRUCTE
	Dim sDateTime As String*256
	Dim iDate As Integer
	Dim vDateTime As Variant
	
	hNote = ndoc.Handle
	Call W32_NSFNoteGetInfo( hNote, 13, tds )
	Call W32_ConvertTIMEDATEToText (0,0,tds, sDateTime, 256, iDate%)
	vDateTime = Cdat( sDateTime)
	NotesDocumentAddedToFile = vDateTime
End Function 

Sample Usage:

Code
Sub Click(Source As Button)
	Dim s As New NotesSession
	Dim db As NotesDatabase
	Dim col As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set db = s.CurrentDatabase
	Set col = db.AllDocuments
	Set doc = col.GetFirstDocument
	
	Msgbox doc.subject(0) & " added: " &  NotesDocumentAddedToFile(doc)
End Sub
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« Antwort #7 am: 23.05.18 - 19:56:56 »
Ein DXL-Export und anschließendes Parsen müsste auch gehen ...als Alternative zu den API-Calls.

LG
Marco
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz