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

履歴の削除などは拡張機能を利用すれば簡単に行えます。[[History Manager>http://extensions.services.openoffice.org/project/histmngr]]

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

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

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

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

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

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

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

最大サイズを変更しても OOo を一度終了させないと反映されないことが知られています。
**リスト [#p453c7e1]
リストの項目はそれぞれ次のようなプロパティを持ちます。

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

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



**項目の取得 [#y0023984]
手抜きコードですが、次のようにします。

 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

**例 [#x43040c0]

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

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

#code(ob){{
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