Domino 9 und frühere Versionen > ND6: Entwicklung
ReplicationEntry
TomLudwig:
Mir reichts. Ich geh jetzt heim. Ich denke ich muss einfach noch mal ne Nacht drüber schlafen. Ich weiß nicht an was es liegt. Ich poste noch mal meinen Code. Da ich nichts gefunden habe wo ich die Reihenfolge verändere... Bis montag...
Function GetReplHistory(db As NotesDatabase, sList() As String, lEntries&) As Integer
' This function returns the replication history for a database in the same format as you would see
' by selecting "File - Replication - History" (and clicking Server name radio button) in the Notes R5 client.
' The function has (3) parameters:
'
' 1. db (NotesDatabase) - [Input] Indicates the database you wish to open
' 2. sList (String array) - [Output] Returns array of strings that will hold the formatted history
' 3. lEntries (Long) - [Output] Returns the number of entries returned from the NSFDbGetReplHistorySummary call
' The function itself returns an integer. If no errors are found, it returns a 0. Otherwise, it returns the error
' code returned by the Notes API.
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
' what to return if no errors are found
GetReplHistory=0
' prepare a string for API call
sPath$=Space(MAXPATH)
' create an API-friendly path to the db and open it
OSPathNetConstruct "", db.Server, db.FilePath, sPath$
nRetCode%=NSFDbOpen(sPath$, hDb&)
If nRetCode% <> 0 Then
GetReplHistory = nRetCode%
Else
' get handle to replication history summary (sorted by server name)
nRetCode%=NSFDbGetReplHistorySummary(hDb&, 2, hSummary&, lEntries&)
'nRetCode%=NSFDbGetReplHistorySummary(hDb&, 0, hSummary&, lEntries&)
If nRetCode% <> 0 Then
GetReplHistory = nRetCode%
Else
' process only if there are entries in the history summary
If lEntries& > 0 Then
Redim entry(lEntries& - 1)
sRepTime$=Space(MAXALPHATIMEDATE + 1)
' lock down the handle to the history summary so we can get at the data
hLock&=OSLockObject(hSummary&)
For nLoop%=0 To lEntries&-1
' extract replication history by looping over the array of REPLHIST_SUMMARY structs
CopyMemory summary, hLock&, Lenb(summary)
' convert Notes TIMEDATE to a legible text string for replication time
ConvertTIMEDATEToText 0, 0, summary.ReplicationTime, sRepTime$, MAXALPHATIMEDATE, cbReturn%
entry(nLoop%).RepTime=Left$(sRepTime$, cbReturn%)
' get replication direction
Select Case summary.Direction
Case DIRECTION_NEVER
entry(nLoop%).Direction="Nie Empfangen"
Case DIRECTION_SEND
entry(nLoop%).Direction="Senden"
Case DIRECTION_RECEIVE
entry(nLoop%).Direction="Empfangen"
End Select
' advance offset to next REPLHIST_SUMMARY struct
hLock&=hLock&+Lenb(summary)
Next
' as server/filenames are not part of the REPLHIST_SUMMARY struct, but rather at the end of the
' array of these structs, we'll need to grab this info one char at a time (for each entry we find) in the
' format: CN=ServerA/O=OrgA!!myfile.nsf/0CN=ServerB/O=OrgAA!!myfile.nsf/0, etc.
sHold$=""
sTemp$=String$(1, 0)
nLoop%=0
Do While nLoop% < lEntries&
CopyMemoryStr sTemp$, hLock&, 1
If sTemp$ = Chr$(0) Then
' parse out server and filename
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
' build the string one char at a time
sHold$=sHold$ & sTemp$
End If
' advance the offset
hLock& = hLock& + 1
Loop
' release the lock on the history summary handle once we're done with it
OSUnlockObject(hSummary&)
Redim sList(lEntries&-1)
For nLoop%=0 To lEntries&-1
' populate the array of entries to return to the caller
Set nm=New NotesName(entry(nLoop%).ServerName)
sList(nLoop%)=Trim$(entry(nLoop%).RepTime & "°~°" & entry(nLoop%).Direction & "°~°" & nm.Abbreviated & "°~°" & entry(nLoop%).FileName)
Next
End If
End If
' free any open handles to the history summary and/or the db
If hSummary& <> 0 Then OSMemFree hSummary&
If hDb& <> 0 Then NSFDbClose hDb&
End If
End Function
nReturn%=GetReplHistory(check_db, sList, lEntries&) ' Protokoll holen sortiert nach dem Servernamen
If nReturn% = 0 Then ' Falls kein Fehler vorlag --> ins Log schreiben
For nCt%=0 To lEntries&-1
exp_entries = Evaluate(|@Explode("| & sList(nCt%) & |"; "°~°")|) ' String auseinandern nehmen und in Felder schreiben
Call log_date.AppendToTextList(exp_entries(0))
Call log_action.AppendToTextList(exp_entries(1))
Call log_server.AppendToTextList(exp_entries(2))
Call log_file.AppendToTextList(exp_entries(3))
Next
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln