AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
12.12.18 - 19:27:45
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Hinzugefügt-Zeitpunkt eines Dokuments ermitteln (LS)  (Gelesen 1037 mal)
JayDee
Aktives Mitglied
***
Offline Offline

Beiträge: 203


« am: 15.05.18 - 14:13:51 »

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.
Gespeichert

MfG,
Thomas
TRO
Senior Mitglied
****
Offline Offline

Beiträge: 294


« Antworten #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
Gespeichert
JayDee
Aktives Mitglied
***
Offline Offline

Beiträge: 203


« Antworten #2 am: 15.05.18 - 15:10:22 »

Super, ich danke vielmals!
Gespeichert

MfG,
Thomas
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11039


« Antworten #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 » Gespeichert
JayDee
Aktives Mitglied
***
Offline Offline

Beiträge: 203


« Antworten #4 am: 15.05.18 - 16:04:46 »

Cool. Danke auch dir!
Gespeichert

MfG,
Thomas
JayDee
Aktives Mitglied
***
Offline Offline

Beiträge: 203


« Antworten #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 » Gespeichert

MfG,
Thomas
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11039


« Antworten #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
Gespeichert
ghostmw
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 198



WWW
« Antworten #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
Gespeichert

Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: