前のトピック     次のトピック

第 20 章 VISIO ソリューションとデータの統合

セクション 1   オートメーションを使用したデータとシェイプの関連付け

カスタム プロパティを作成することにより、プログラムからカスタム プロパティの値を独占的に取得、設定したり、作成した Visio® ソリューションのユーザーが入力した値を取り込むことができます。たとえば、図面へのドロップ時にユーザーに対してデータ入力を求めるメッセージを表示するマスタシェイプを作成し、その後プログラムを使用してユーザーの図面から入力されたデータを収集することができます。図面内のデータと外部データ ソースのデータを永続的にリンクさせるには、図形とマスタシェイプに関連付けられた一意な ID を使用します。

ユーザー定義セルとカスタム プロパティの作成の詳細については、「第 7 章 図形動作の機能強化」を参照してください。

このセクションの内容...

カスタム プロパティとユーザー定義行の追加

一意な ID の生成と使用

カスタム プロパティとユーザー定義行の追加

カスタム プロパティを使用すると、データベースで使用されるようなフィールドをシェイプまたはページに関連付けることができます。この機能は、ユーザーが入力した値を収集する場合に便利です。たとえば、ページにドロップされたときにユーザーに対して入力を求めるメッセージを表示するマスタシェイプを設計し、Microsoft Visual Basic for Applications (VBA) プログラムを使用して完成した図面からユーザーが入力したデータを収集できます。

ユーザー定義行の [Value] セルと [Prompt] セルには、値を保存し、後からその値を検索可能です。ユーザー定義行には一意な名前を割り当てることができるため、他のプログラムによってその行内のセルが認識されたり、セルに対して書き込みが行われるといった問題も発生しません。これに対して、多数のプログラムによって使用されることの多いスクラッチ セルでは、保存していた値が予期に反して上書きされてしまうことがあります。

Shape オブジェクトにカスタム プロパティ行またはユーザー定義行を追加するには、AddNamedRow メソッドを使用します。[カスタム プロパティ] または [ユーザー定義セル] のセクションがまだ存在しない場合、AddNamedRow メソッドによってシェイプシート (ShapeSheet®) に追加されます。"Latitude (緯度)" という名前のユーザー定義行をシェイプに追加する例を次に示します。

shpObj.AddNamedRow visSectionUser, "Latitude", 0

このコードは、[ユーザー定義セル] セクションをシェイプシートに挿入し、[User_Row1] というデフォルトの名前を [User.Latitude] に置き換えます。

新しい Latitude 行の [Value] セルを取得するには、次のように記述します。

Set celObj = shpObj.Cells("User.Latitude")

[Value] セルである Cell オブジェクトへの参照がある場合、その Cell オブジェクトの Formula プロパティを使用して [Value] セルの値を取得または設定できます。例を次に示します。

celObj.Formula = """48"""

同じ方法で、作成するプログラムからカスタム プロパティ行を管理することができます。

AddNamedRow メソッドの詳細については、「付録 B シェイプシートのセクション、行、セル インデックス」と Visio 製品付属のオンライン ヘルプ「開発者用リファレンス([ヘルプ] メニューから [開発者用リファレンス] を選択)」を参照してください。

TOPへ

一意な ID の生成と使用

図形とマスタシェイプには、一意な ID を与えることができます。この ID を使用して、図面上の同一の図形を区別したり、マスタシェイプのオリジナル ソースを監視することができます。高度なデータベース ソリューションでは、通常の処理として一意な ID を使用し、図形やマスタシェイプと外部データベースのレコードとの間に永続的なリンクを確立します。一意な ID を使用することにより、図形名や ID を使用するよりも確実にアプリケーションでデータを図形に結び付けることができます。一意な ID を使用できるデータベース アプリケーションには、施設管理、位置情報システム、機械アセンブリなどがあり、これらのアプリケーションでは、同一図面内の図形がそれぞれデータベースの異なるレコードに関連付けされることがあります。

一意な ID は内部的には 128 ビットの値として保存され、Null 文字で終了する 39 バイトの文字列として、次のようにフォーマットして渡されます。

{2287DC42-B167-11CE-88E9-0020AFDDD917}


図形に一意な ID がある場合、同じ図面内には同じ ID を持つ図形がないと考えることができます。Visio エンジンでは、OLE でのオブジェクト ID 生成と同じ方式を採用することによって ID の一意性を確保し、生成した ID の再利用は行いません。

ただし、特定の状況下では、一意な ID が重複して使用されることもあります。たとえば、図面ファイルをコピーしたり別名で保存すると、図面に含まれるすべての図形とその一意な ID もコピーされます。その後、新しいファイルから図形を切り取って元のファイルに貼り付けると、元のファイルには同一の一意な ID を持つ 2 つの図形ができます。ファイルをコピーした後、使用されている ID の一意性を確保するには、一方のファイルから一意な ID をすべて削除し、新しい ID を生成します。


図形の一意な ID

デフォルトでは、図形には一意な ID が割り当てられていません。したがって、必要に応じてプログラムで 一意な ID を生成する必要があります。図形の一意な ID を作成するには、Shape オブジェクトの UniqueID プロパティを使用します。例を次に示します。

IDString = shpObj.UniqueID(visGetOrMakeGUID)

図形にすでに一意な ID がある場合、このステートメントはその ID を取得します。図形に一意な ID がない場合、ステートメントは ID を作成します。

図形に一意な ID があるかどうかを確認するには、以下のステートメントを使用します。図形に一意な ID がない場合、ステートメントは Null 文字列 ("") を返します。

IDString = shpObj.UniqueID(visGetGUID)

図形の一意な ID を削除するには、次のステートメントを使用します。

shpObj.UniqueID visDeleteGUID

アクションを実行することによって、Visio エンジンが自動的に図形の一意な ID を削除する場合もあります。図形を Windows クリップボードから切り取って 1 度だけ貼り付けたり、図形を別の図面にドラッグしても、一意な ID は保持されます。しかし、同じ図形をクリップボードから 2 回以上貼り付けたり、Ctrl キーを押したままドラッグして図形をコピーすると、一意な ID は削除されます。

マスタシェイプの UniqueID と BaseID

マスタシェイプには、UniqueID プロパティと BaseID プロパティがあります。新しいマスタシェイプが作成されると、どちらも Visio エンジンによって自動的に作成されます。

マスタシェイプの UniqueID は、作為的に削除したり、割り当て直すことはできません。マスタシェイプを修正したり、新しい BaseID を割り当てた場合にだけ変更されます。マスタシェイプの BaseID はユーザーのアクションによっては変更されず、マスタシェイプ名や UniqueID より永続的な元のマスタシェイプとリンクしています。BaseID は BaseID と NewBaseID の 2 つのプロパティで変更できます。詳細については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス ([ヘルプ] メニューから [開発者用リファレンス] を選択)」を検索してください。

一意な ID は、引数として Shapes または Masters コレクションの Item メソッドに渡すことができます。例を次に示します。

Set shpObj = shpsObj.Item("*{2287DC42-B167-11CE-88E9-0020AFDDD917}")

Top