par Stephane Maillard » 30 Mars 2004 à 18:15
Bonjour,Voici le code pour récupérer l'historique :' Constantes API NotesConst DIRECTION_NEVER=0Const DIRECTION_SEND=1Const DIRECTION_RECEIVE=2Const MAXPATH=256Const MAXALPHATIMEDATE=80Const ERR_SPECIAL_ID=578' Type personnel pour sortir l'historiqueType HIST_ENTRY RepTime As String ServerName As String FileName As String Direction As StringEnd Type' Types API Notes (Basée sur les structures C)Type TIMEDATE Innards1 As Long Innards2 As LongEnd TypeType 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 LongEnd Type' Déclarations API NotesDeclare 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 APIDeclare 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 IfEnd Function Utilisation :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 IfEnd SubAdaptez le code à votre besoin.[%sig%]
Cordialement
Stéphane Maillard