データの新規追加と更新
本項では、データの新規追加と更新の方法について紹介します。
以下のソースコードを実行してみてください。ここでは、ユーザー名を「User1」、商品名を「スニーカー」、在庫数を「10」としました。
Dim _ObjectService As New ObjectService1 Dim _StockList As New StockList 'ユーザー名を設定。 _ObjectService.VersionControler.UID = "User1" '情報をセットして保存処理。 _StockList.Name = "スニーカー" _StockList.Value = "10" _ObjectService.SaveObject(_StockList)
実行結果をSQL Server Management Studioで確認してみます。
「CreateTimeStamp」に作成時の日時が自動記録され、「CreatedOperator」にソースコード上で設定したユーザー名「User1」が設定されました。「DeletedTimeStamp」は「2999/12/31 0:00:00」となっていますが、これはデータが最新であるということを示します。
次に以下のソースコードを実行してみます。ここでは、ユーザー名を「User2」、在庫数を「100」に変更するものとします。
Dim _ObjectService As New ObjectService1 Dim _StockList As New StockList 'ユーザー名を設定。 _ObjectService.VersionControler.UID = "User2" '情報をセットして保存処理。 _StockList.Name = "スニーカー" _StockList.Value = "100" _ObjectService.SaveObject(_StockList)
実行結果をSQL Server Management Studioで確認してみます。
1行目の「DeletedTimeStamp」が「2999/12/31 0:00:00」から「2008/02/01 21:02:03(レコードを更新した日時)」に変わり、「DeletedOperator」に「User2」が保存されました。これは「User2によって2008/02/01 21:02:03に1行目のレコードが更新された」ということを意味します。
2行目をみると「DeletedTimeStamp」が「2999/12/31 0:00:00」となっており、ソースコードで設定した通り、「CreatedOperator」が「User2」、「Value」が「100」となっています。つまり最新のスニーカーの在庫数は100に変わったことを意味します。
このようにObjectServiceのバージョン管理機能を利用することで、ソースコード側では履歴を意識しなくとも、自動的にデータベースに履歴を保持していくことが可能になります。
データの抽出
本項では、バージョン管理されたオブジェクトから、過去のある時点のデータを抽出してみます。
以下のソースコードを実行して見ましょう。ここでは2008年1月15日午前10時30分00秒時点の、スニーカーの在庫数を抽出します。
Dim _ObjectService As New ObjectService1 Dim _SampleClass As New StockList 'バージョンの日時を設定。 Dim _DateTime As New DateTime(2008, 1, 15, 10, 30, 0) Dim _QueryCommand As New QueryCommand(GetType(StockList), _ "Name", "スニーカー", _DateTime) 'データ取得取得 _SampleClass = _ObjectService.LoadObject(_QueryCommand)
バージョン(日時)を指定してデータを取得した場合、「指定した日時がCreatedTimeStampとDeletedTimeStampの期間内に含まれるオブジェクトの情報」が抽出されます。
本サンプルの場合、バージョン(日時)指定を「2008年1月15日午前10時30分00秒」としましたので、CreatedTimeStampが「2008年1月1日 20時52分20秒」で、DeletedTimeStampが「2008年2月1日 21時02分03秒」である1行目のオブジェクト情報が取得されます。
まとめ
履歴管理を行う場合、往々にしてデータベース構造が複雑になり、データベース管理者の負担が大きくなる場合があります。ObjectServiceのバージョン管理機能を利用すると、中間テーブルを使用せずに履歴を管理できるので、構造の単純化や管理の負担軽減を実現できます。ObjectServiceを利用することで、開発工程の枠を超えて、業務の効率化を実現できるのではないかと考えます。


