【テクニカル・上級編】【上級】AcadDocument.Database.SummaryInfoのカスタムプロパティを利用した、図面内への「設計承認フロー」情報の埋め込み – AutoCAD VBA解析バイブル

スポンサーリンク

承認フローを「図面」に刻む:SummaryInfoを活用したメタデータ管理の極致

AutoCADの図面ファイル(.dwg)を単なる「図形データの集合体」と見なすのは、アマチュアの思考だ。プロフェッショナルにとって、DWGは「設計プロセスの履歴そのもの」であり、データベースとしての側面を持つ。

今回は、AutoCADの標準機能である`SummaryInfo`を拡張し、そこに「設計承認フロー」という企業インテリジェンスを埋め込む技術を解説する。外部データベースに依存せず、図面自体が自己完結したメタデータを持つことは、長期保守において極めて強力な武器となる。

1. なぜ「SummaryInfo」なのか?

XDataや拡張辞書(XRecord)も強力だが、図面を開かずにメタデータを参照・改ざんする外部ツールとの連携において、`SummaryInfo`は最も素直で軽量なインタフェースだ。

`SummaryInfo`はAutoCADのプロパティダイアログ(DWGPROPS)にも反映されるため、ユーザーが意図せずメタデータを破壊するリスクが低い。この「目に見える安心感」と「プログラムによる制御の容易さ」を両立できる点が、シニアエンジニアとしてここを選択する最大の理由だ。

2. 実装の要諦:オブジェクト管理とメモリ保護

VBAにおいて、`AcadDocument`や`Database`オブジェクトを安易にグローバル変数として保持するのは、メモリリークと不安定な動作の温床となる。常にスコープを限定し、明示的な解放を行うこと。

実装例:承認情報を埋め込むためのクラス設計

以下のコードは、`SummaryInfo`へカスタムキーを挿入する際の定石である。

‘ —————————————————————————
‘ @Title: DWG Metadata Manager
‘ @Description: SummaryInfoに承認フローデータをセキュアに書き込む
‘ —————————————————————————
Public Sub SetApprovalMetadata(ByVal approver As String, ByVal status As String)
Dim oDoc As AcadDocument
Dim oSumInfo As AcadSummaryInfo
Dim keyName As String
Dim keyValue As String

Set oDoc = ThisDrawing
Set oSumInfo = oDoc.SummaryInfo

keyName = “Approval_Status”
keyValue = approver & “|” & status & “|” & Now

‘ 既にキーが存在するか確認し、存在すれば削除してから追加(上書き更新)
If oSumInfo.NumCustomInfo > 0 Then
Dim i As Integer
For i = 0 To oSumInfo.NumCustomInfo – 1
Dim k As String, v As String
oSumInfo.GetCustomByIndex i, k, v
If k = keyName Then
oSumInfo.RemoveCustomByIndex i
Exit For
End If
Next i
End If

‘ 承認情報の追加
oSumInfo.AddCustomInfo keyName, keyValue

‘ 明示的解放(VBAにおいては重要)
Set oSumInfo = Nothing
Set oDoc = Nothing
End Sub

3. レガシー環境とWindows APIの融合

もし貴殿のシステムが、CAD外の承認管理システム(例:SQL ServerやSharePoint)と連携する必要があるなら、ファイルを開かずにメタデータを読み取る必要がある。

その際、AutoCADを非表示で立ち上げる(ObjectARX/Managed API)のが正攻法だが、レガシー環境でVBAのみが許されている場合、`Shell`関数でAutoCADを起動し、コマンドライン引数でスクリプト(.scr)を走らせ、CSVへ書き出すという泥臭い手法が最も堅牢だ。

さらに、ファイルシステム側の「最終更新日時」とメタデータ内の「承認日時」の整合性をチェックする機能を加えることで、不正な図面編集を検知する「改ざん検知ロジック」を実装できる。

4. チーフアーキテクトからの忠告

この手法を導入するにあたり、以下の3点を徹底せよ。

1. データ正規化の徹底: `SummaryInfo`は文字列しか受け付けない。日付やステータスIDは必ず所定のフォーマット(ISO 8601等)でシリアライズし、プログラム側でバリデーションを行え。
2. 排他制御の考慮: ネットワーク共有フォルダ上の図面に対して複数人が同時にアクセスする環境では、読み取り専用で開くか、`FSO (File System Object)`による排他制御を並行して実装すること。
3. レガシーの呪縛を捨てる: VBAは強力だが、限界はある。このメタデータ埋め込みを基盤として、ゆくゆくは`.NET (ObjectARX)`へ移行するための「データ構造の抽象化」を意識しておくこと。クラスモジュールにロジックを閉じ込めておけば、将来的な移植コストは最小限に抑えられる。

最後に:エンジニアリングの美学

承認フローを単なる「管理」として終わらせるか、図面に刻まれる「品質の証明」へと昇華させるか。それは実装者の美学次第だ。

システム管理者が図面を開かずに、ステータスの一覧を即座に抽出できる環境を構築したとき、貴殿のチームの生産性は、単なる自動化を超えた領域に達するだろう。コードは嘘をつかない。論理的な設計こそが、最も短期間で最大の成果を生む。

さあ、貴殿の現場で、このアーキテクチャを実装してみせよ。

タイトルとURLをコピーしました