高度なカスタマイズ > ビジネスロジックのカスタマイズ > DTI カスタマイズフレームワーク > Microsoft Office の「Windchill」タブのカスタマイズ > マクロを使用したカスタムコマンドの作成
  
マクロを使用したカスタムコマンドの作成
Windchill デスクトップインテグレーションでは、目的の Office ドキュメントに使用できるマクロコードのみが入力されると予測されています。
DTI では、import_module 操作で Office ドキュメントに注入されるものと、ドキュメントにすでに存在しているものの両方のタイプのマクロが実行できます。
* 
PTC では、マクロは Windchill サーバーにアップロードして展開する前に、実際の Microsoft Office ドキュメントを使用して入念にテストすることをお勧めします。Windchill デスクトップインテグレーションは、マクロ実行時に発生した例外を処理しません。すべてのエラーはユーザーに表示されます。
次の例は、カスタム操作の設定を示しています。
<action method="run_macro" type="CLIENT">
<defaultdata key="macro_name">Macro1</defaultdata>
<defaultdata key="macro_args">Albert Einstein</defaultdata>
</action>
* 
macro_name キーは予約されており、必須のキーワードです。
macro_args はオプションであり、マクロに追加データが必要な場合に使用できます。
複数入力の処理
マクロに複数入力が必要な場合、マクロ本体の VBA コードで処理することを推奨します。
たとえば、マクロに 2 つ以上の引数が必要な場合、macro_args の値として関連するデータと関連ファイル名が入力された XML ファイルを生成できます。この XML ファイルをサーバーに再配置して、以降の接続操作ですべての Windchill デスクトップインテグレーションクライアントに読み込まれるようにします。または、区切り記号を使用して複数の情報を入力できます (XML エスケープ文字を正しく使用)。VBA マクロコードは区切り記号でデータを再分割し、元の情報を再度作成できます。
マクロの注入
1. 注入するマクロモジュールを作成します。
次の例は、Microsoft Excel に注入するマクロモジュールの作成方法を示しています。
a. <Windchill>/codebase/com/ptc/windchill/enterprise/nativeapp/msoi/client/custom に "Excel" という名前のフォルダを作成します。
b. その下に Module1.bas を作成し、このファイルに次のコードを貼り付けます。
Sub Macro1(sUsername As String)
MsgBox("Hello " & sUsername & "! This is a macro alert.")
End Sub
* 
Windchill デスクトップインテグレーションクライアントは、サーバーへの以降の接続操作ですべてのモジュールを読み込みます。
2. マクロモジュールを Microsoft Office にインポートします。
マクロモジュールを Microsoft Office にインポートするには、サーバー上の wtCustomActions.xml ファイルを変更する必要があります。次の例は、モジュールのインポート操作を示しています。
<action method="import_module" type="CLIENT">
<defaultdata key="module_path">custom\Excel\Module1.bas</defaultdata>
</action>
* 
パラメータ module path の値が絶対パスでない場合、カスタムフォルダからの相対パスと見なされます。
* 
モジュールは、使用する Microsoft Office アプリケーションに応じてさまざまなファイルやテンプレートにインポートされます。たとえば、通常 Microsoft Word では Normal.dot* テンプレートにインポートされます。Excel では開いたワークブックに直接インポートされます。場所は VBA エディタ (ショートカットは Alt + F11 キー) を使用して確認できます。
マクロの除去
Microsoft Office ドキュメント内のマクロを実行後に除去するには、次の action 設定を使用します。
<action method="remove_module" type="CLIENT">
<defaultdata key="module_name">Module1</defaultdata>
</action>
module_name キーの値は、VBA エディタ (Alt + F11) にモジュール名として表示されているものと一致しなければなりません。