[syntax="ls"]' Constantes API Notes
Const DIRECTION_NEVER=0
Const DIRECTION_SEND=1
Const DIRECTION_RECEIVE=2
Const MAXPATH=256
Const MAXALPHATIMEDATE=80
Const ERR_SPECIAL_ID=578
' Type personnel pour sortir l'historique
Type HIST_ENTRY
RepTime As String
ServerName As String
FileName As String
Direction As String
End Type
' Types API Notes (Basée sur les structures C)
Type TIMEDATE
Innards1 As Long
Innards2 As Long
End Type
Type REPLHIST_SUMMARY
ReplicationTime As TIMEDATE
AccessLevel As Integer
AccessFlags As Integer
Direction As Integer
ServerNameOffset As Long
ServerNameLength As Integer
FileNameLength As Integer
Spare1 As Long
Spare2 As Long
End Type
' Déclarations API Notes
Declare Sub OSPathNetConstruct Lib "nnotes" (Byval portName$, Byval ServerName$, Byval FileName$, Byval retPathName$)
Declare Function NSFDbGetReplHistorySummary% Lib "nnotes" (Byval hDb&, Byval Flags&, rethSummary&, retNumEntries&)
Declare Function NSFDbOpen% Lib "nnotes" (Byval PathName$, hDB&)
Declare Function NSFDbClose% Lib "nnotes" (Byval hDB&)
Declare Function OSMemFree% Lib "nnotes" (Byval Handle&)
Declare Function OSLockObject& Lib "nnotes" (Byval nHandle&)
Declare Function OSUnlockObject% Lib "nnotes" (Byval nHandle&)
Declare Function ConvertTIMEDATEToText% Lib "nnotes" (Byval intFormat&, Byval TextFormat&, InputTime As TIMEDATE, Byval retTextBuffer$, Byval TextBufferLength%, retTextLength%)
Declare Function OSLoadString% Lib "nnotes" (Byval hModule&, Byval StringCode%, Byval retBuffer$, BufferLength%)
' Déclarations Windows 32 API
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As REPLHIST_SUMMARY, Byval pSource&, Byval dwLength&)
Declare Sub CopyMemoryStr Lib "kernel32" Alias "RtlMoveMemory" (Byval pDest$, Byval pSource&, Byval dwLength&)
Function RecupHistoriqueReplication(db As NotesDatabase, sList() As String, lEntries&) As Integer
Dim hDb&, hLock&, hSummary&
Dim nLoop%, cbReturn%, nPos%, nRetCode%
Dim sPath$, sHold$, sRepTime$, sTemp$, sServer$, sFileName$
Dim summary As REPLHIST_SUMMARY
Dim entry() As HIST_ENTRY
Dim nm As NotesName
GetReplHistory=0
sPath$=Space(MAXPATH)
OSPathNetConstruct "", db.Server, db.FilePath, sPath$
nRetCode%=NSFDbOpen(sPath$, hDb&)
If nRetCode% <> 0 Then
GetReplHistory = nRetCode%
Else
nRetCode%=NSFDbGetReplHistorySummary(hDb&, 0, hSummary&, lEntries&)
If nRetCode% <> 0 Then
GetReplHistory = nRetCode%
Else
If lEntries& > 0 Then
Redim entry(lEntries& - 1)
sRepTime$=Space(MAXALPHATIMEDATE + 1)
hLock&=OSLockObject(hSummary&)
For nLoop%=0 To lEntries&-1
CopyMemory summary, hLock&, Lenb(summary)
ConvertTIMEDATEToText 0, 0, summary.ReplicationTime, sRepTime$, MAXALPHATIMEDATE, cbReturn%
entry(nLoop%).RepTime=Left$(sRepTime$, cbReturn%)
Select Case summary.Direction
Case DIRECTION_NEVER
entry(nLoop%).Direction="Jamais reçu"
Case DIRECTION_SEND
entry(nLoop%).Direction="Envoi"
Case DIRECTION_RECEIVE
entry(nLoop%).Direction="Réception"
End Select
hLock&=hLock&+Lenb(summary)
Next
sHold$=""
sTemp$=String$(1, 0)
nLoop%=0
Do While nLoop% < lEntries&
CopyMemoryStr sTemp$, hLock&, 1
If sTemp$ = Chr$(0) Then
nPos%=Instr(1, sHold$, "!!")
entry(nLoop%).ServerName=Left$(sHold$, nPos%-1)
entry(nLoop%).FileName=Right$(sHold$, Len(sHold$)-nPos%-1)
sHold$=""
nLoop%=nLoop% + 1
Else
sHold$=sHold$ & sTemp$
End If
hLock& = hLock& + 1
Loop
OSUnlockObject(hSummary&)
Redim sList(lEntries&-1)
For nLoop%=0 To lEntries&-1
Set nm=New NotesName(entry(nLoop%).ServerName)
sList(nLoop%)=Trim$(nm.Abbreviated & " " & entry(nLoop%).FileName & " " & entry(nLoop%).RepTime & " (" & entry(nLoop%).Direction & ")")
Next
End If
End If
If hSummary& <> 0 Then OSMemFree hSummary&
If hDb& <> 0 Then NSFDbClose hDb&
End If
End Function [/syntax][syntax="ls"]Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim sList() As String
Dim nCt%, nReturn%
Dim lEntries&
Dim sMsg$, sBuffer$
'######################### Ne pas oublier de mettre son serveur (sauf local) et
'######################### le nom de la base de document.
Set db=session.GetDatabase("", "BaseNotes.nsf")
nReturn%=RecupHistoriqueReplication(db, sList, lEntries&)
If nReturn% = 0 Then
sMsg$=""
For nCt%=0 To lEntries&-1
sMsg$=sMsg$ & sList(nCt%) & Chr(13) & Chr(10)
Next
Msgbox sMsg$, 0, "Historique de réplication pour " & db.Title
Elseif nReturn=ERR_SPECIAL_ID Then
Msgbox "Cette base n'as pas d'historique de réplication.", 32, "Historique de Réplication"
Else
sBuffer$=String$(256, 0)
OSLoadString 0, nReturn%, sBuffer$, 255
Msgbox "Une erreur s'est produite : " & sBuffer$, 48, "Erreur Historique de Réplication"
End If
End Sub[/syntax]Fonction basé sur nnotes.dll, elle vous permet de récupérer l'historique de réplication d'une base données.
Source C : Lotus C API 5.0.6