Top > OOoBasic > Generic > History

ドキュメントの履歴 Edit

最近利用したドキュメントの一覧にあるようにドキュメントの履歴はコンフィグレーション中に保存されています。

履歴の削除などは拡張機能を利用すれば簡単に行えます。History Manager

自分で書きたい人や他に利用方法を思いついた人のために履歴の概要や取得の仕方。

以下は 2.X 系用。3.X では変更されています。

概要 Edit

ドキュメントの履歴はコンフィグレーションレジストリの /org.openoffice.Office.Common/History 以下に保存されています。

ここにはいくつかの要素があります。ドキュメントだけでなくヘルプのブックマークも含まれています。

ドキュメントの履歴に関するプロパティは次のものです。

プロパティ説明
PickListSizelong最近利用したドキュメントの項目数 0 - 100
PickList.uno.XInterface
Sizelong履歴のリスト項目数 0 - 100
List.uno.XInterface

PickList および List は Schema 中で上限下限制限があります。PickList および List は PickListSize または Size 数の履歴を保持しています。

最大サイズを変更しても OOo を一度終了させないと反映されないことが知られています。

リスト Edit

リストの項目はそれぞれ次のようなプロパティを持ちます。

プロパティ説明
URLstringドキュメントの URL
Filterstringドキュメントを開いたときのフィルタ名 (内部名)
Titlestringドキュメントのタイトル (フレームに表示される)
Passwordstringドキュメントのパスワード (現在不使用?)

パスワードはマスターパスワードを利用している場合に利用できるのかもしれません。

項目の取得 Edit

手抜きコードですが、次のようにします。

Sub History()
 Dim oCP As Object
 Dim oCUA As Object
 Dim aProps(0) As New com.sun.star.beans.PropertyValue

  oCP = GetProcessServiceManager().createInstanceWithContext( _
    "com.sun.star.configuration.ConfigurationProvider", GetDefaultContext() )
  aProps(0).Name = "nodepath"
  aProps(0).Value = "/org.openoffice.Office.Common/History"
  oCUA = oCP.createInstanceWithArguments( _
    "com.sun.star.configuration.ConfigurationUpdateAccess", aProps )
  
  
  oList = oCUA.List
  n = oCUA.ListSize
  
  Dim sItems(n-1) As String
  
  For i = 0 To n -1 step 1
     id = "h" & CStr(n)
     oItem = oCUA.getByName(id)
     sItems(i) = oItem.URL
  Next
End Sub

Edit

存在しないファイルの履歴を削除する。履歴にエントリーがあるけれどファイルが存在しないリストの項目を削除します。

注: 直後に OOo を終了させればリストは綺麗になります。RecentFiles List がリストを保持していて queryDispatch コールまたは query 時にリストを上書きするため、なにかを行う前に OOo を一度終了させる必要があります。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
Sub CleanUpHistory()
 Dim oCP As Object
 Dim oCUA As Object
 Dim aProps(0) As New com.sun.star.beans.PropertyValue
 
 ' get configuration of the file history
  oCP = GetProcessServiceManager().createInstanceWithContext( _
    "com.sun.star.configuration.ConfigurationProvider", GetDefaultContext() )
  aProps(0).Name = "nodepath"
  aProps(0).Value = "/org.openoffice.Office.Common/History"
  oCUA = oCP.createInstanceWithArguments( _
    "com.sun.star.configuration.ConfigurationUpdateAccess", aProps )
  
  ' clean up PickList
  CleanUpList( "PickList", "PickListSize", "p", oCUA )
  
  ' clean up List
  CleanUpList( "List", "Size", "h", oCUA )
  
  oCUA.commitChanges()
End Sub
 
' sListName: PickList or List
' sSizeName: PickListSize or Size
'   sPrefix: p or h
Sub CleanUpList( sListName As String, sSizeName As String, _
    sPrefix As String, oAccess As Object)
  
  Dim oList As Object
  Dim oItem As Object
  Dim nSize As Long
  Dim sName As String
  Dim nCounter As Integer
  
  oList = oAccess.getPropertyValue( sListName )
  nSize = oAccess.getPropertyValue( sSizeName )
  
  nCounter = 0 'existing items
  
  For i = 0 To nSize - 1 step 1
    sName = sPrefix & CStr(i)
    If oList.hasByName( sName ) Then
      oItem = oList.getByName( sName )
      If FileExists( oItem.URL ) Then
        
        CreateAsNewItem( oList, oItem, sPrefix & CStr(nCounter) )
        
        If nCounter <> i Then
          oList.removeByName( sName )
        End If
        nCounter = nCounter + 1
      Else
        oList.removeByName( sName )
      End If
    End If
  Next
End Sub
 
 
' make new item and insert/replace it in the sName position
Sub CreateAsNewItem( oList As Object, oItem As Object, sName As String )
  oNewItem = oList.createInstance()
  With oNewItem
    .URL = oItem.URL
    .Filter = oItem.Filter
    .Title = oItem.Title
    .Password = oItem.Password
  End With
  If oList.hasByName( sName ) Then
    oList.replaceByName( sName, oNewItem )
  Else
    oList.insertByName( sName, oNewItem )
  End If
End Sub

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes