ジョブ ハンドラのロード方法

起動時にジョブ ハンドラ(Autodesk およびサード パーティ)がジョブ プロセッサによってどのようにロードされるかを以下に説明します。

  1. Extension フォルダからすべてのサード パーティ ジョブ ハンドラをロードする
  2. ジョブ ハンドラ設定情報を参照してください。
  3. Autodesk のジョブ ハンドラをロードします。
  4. ジョブ ハンドラにジョブ タイプを関連付けて、各ジョブ ハンドラが有効化されていることを確認します。
  2012 2013 2014
Autodesk Vault Basic    
Autodesk Vault Workgroup
Autodesk Vault Collaboration
Autodesk Vault Professional

サード パーティ ジョブ ハンドラの拡張

サード パーティ拡張は、Extension ディレクトリのそれぞれ固有のフォルダに存在します。

%allusersprofile%¥Autodesk¥Vault 2012¥Extensions¥

たとえば、「JobHandlerSample」という名前のジョブ ハンドラ拡張は、%allusersprofile%¥Autodesk¥Vault 2013¥Extensions¥JobHandlerSampleいうフォルダに存在します。

Extension ディレクトリ内の各フォルダについて、ジョブ プロセッサによって設定ファイルがチェックされます。設定ファイルは、任意の名前に設定できる単なるテキスト ファイルですが、 名前の最後が .vcet.config という拡張子でなければなりません。設定ファイルが存在しない場合、拡張のロードは失敗します。サンプルの設定ファイル JobHandlerSample.vcet.config の内容を次に示します。

<configuration>
    <connectivity.ExtensionSettings2>
         <assembly>JobHandlerSample</assembly>
         <extensionType>JobProcessor</extensionType>
    </connectivity.ExtensionSettings2>
</configuration>

アセンブリ要素によって、拡張 dll の名前が指定されます。したがって、上記のサンプルでは、拡張 dll に JobHandlerSample.dll という名前が付けられます。JobProcessor という拡張子タイプによって、これがジョブ プロセッサの拡張であることが示されます(このディレクトリには、その他の拡張タイプである WebService と VaultClient も存在しています)。

拡張アセンブリ(サンプルの場合、JobHandlerSample.dll)がロードされます。ロード時に、次のチェックが実行されます。

  1. アセンブリ dll の参照がチェックされ、Vault dll (「Connectivity」で始まる名前)にリンクされていないことが確認されます。拡張アセンブリがそれらの dll のいずれかにリンク(直接的または間接的に)されている場合、ロードは失敗します。
  2. IJobHandler インタフェースを実装する単一の書き出し済みタイプについて、アセンブリがチェックされます。JobHandlerSample の例では、アセンブリのプロジェクト内で、IJobHandler インタフェースを実装する次の C# クラスを使用することが可能です。
    namespace JobHandlerSample
    {
        public class JobHandlerSample : IJobHandler
         {
             public bool CanProcess(string strJobType)
              {
                 return strJobType.Equals("jobhandlersample");
              }
    
              public JobOutcome Execute(IJobProcessorServices context, IJob job)
               {
                  return JobOutcome.Success;
               }
          }
    }         

    IJobHandler を実装するアセンブリには、パブリック タイプが厳密に 1 つ存在する必要があります。そうでない場合、拡張のロードは失敗します。このタイプのインスタンスがインスタンス化されます。

  3. 特定の必須アセンブリ属性について、アセンブリがチェックされます。具体的には、次のとおりです。
    1. ApiVersion: Autodesk.Connectivity.Extensibility.Framework.ApiVersionAttribute タイプの属性であり、この拡張の作成対象の Api のバージョンを指定します。このバージョンが、Vault Api の現在のバージョンと一致しない場合、拡張のロードは失敗します。
    2. Company、Description、ProductName: AssemblyCompanyAttribute、AssemblyDescriptionAttribute、 AssemblyProductAttribute タイプの System.Reflection ネームスペースからの属性が必要で、空の文字列も無効です。存在しない場合や空の場合、拡張のロードは失敗します。
    3. ExtensionId : Autodesk.Connectivity.Extensibility.Framework.ExtensionIdAttribute タイプの属性で、固有 ID を文字列(Guid 形式)として指定します。この属性が存在しない場合や空の場合、拡張のロードは失敗します。

ジョブ ハンドラの設定

ジョブ ハンドラの設定ファイルは、ジョブ プロセッサの設定情報を含む xml ファイルです。JobProcessor.exe と同じフォルダ(通常、C:¥Program Files¥Autodesk¥Vault Professional [年]¥Explorer)に格納され、JobProcessor.exe.config という名前が付けられます。ジョブ ハンドラの設定に関連するセクションは、configuration\connectivityExplorer\jobHandlers の下にあります。この xml セクションでは、各 jobHandler 要素はジョブ ハンドラを表します。jobHandler xml 要素には、次の形式のいずれかが使用されます。

<jobHandler class="jobType" handler="NameOfTypeImplementingIJobHandler"/>

引数の意味:

  1. class は、ジョブ タイプを表します。ジョブがジョブ サーバ キューに追加されると、ジョブ タイプが指定され、この固有の文字列によって、そのジョブの処理に使用するジョブ ハンドラの決定に使用されます。
  2. handler は、IJobHandler を実装するアセンブリ内のタイプの名前を表します。これは、さまざまな方法で指定できます。System.Type.GetType(文字列) (http://msdn.microsoft.com/en-us/library/w3f99sx1.aspxを参照)に渡されたときに、IJobHandler を実装するアセンブリのオブジェクトのタイプを返す文字列を指定する必要があります。

したがって、ここで示すサンプル拡張の有効な jobHandler 要素は次のようになります。

<jobHandler class="jobhandlersample" handler="JobHandlerSample.JobHandlerSample, JobHandlerSample"/>

JobProcessor.exe.config ファイルで、Autodesk のビルトイン ジョブ ハンドラのそれぞれに対して jobHandler エントリが既に存在していることに注目してください。ビルトイン ジョブ ハンドラは、それに対する jobHandler エントリが存在する場合のみロードされます。ビルトイン ジョブ ハンドラ dll は、JobProcessor.exe と同じディレクトリに格納されています。

ジョブ ハンドラが有効化されていることを確認する

上記の設定情報は、ジョブ タイプを特定のジョブ ハンドラに関連付ける場合に使用します。関連付けが完了すると、各ジョブ ハンドラに対して、その特定のジョブ タイプを処理できるかどうかが確認されます。ジョブ ハンドラは、IJobHandler.CanProcess というインタフェース メソッドを実装することで、この確認に対して応答します。それと同時に、ジョブ ハンドラは、そのタイプのジョブを処理するために必要なすべてを備えているかを確認します(たとえば、一部の dwf 作成ジョブ ハンドラは、Inventor がインストールされているかを確認します)。 

ジョブ プロセッサによってどのジョブ タイプが現在処理されているかを確認する場合([管理]メニュー -> [ジョブ タイプ]を使用して)、一覧表示される各エントリは、そのジョブ タイプのジョブ ハンドラが正常にロードされていることを示します。エントリがチェックされている場合、そのジョブ ハンドラは有効になっていることを意味します(すなわち、その IJobHandler.CanProcess 実装から「true」が返されます)。ジョブ ハンドラが「処理可能」であるかどうか、ジョブ ハンドラに対する再確認をジョブ プロセッサに実行させる場合、ユーザは、ジョブ プロセッサを終了して、再起動する必要があります。

すべてのジョブ ハンドラがロードおよびクエリーされると、ジョブ プロセッサでは、キューのジョブを取得して処理を開始する準備が整います。

サンプル ジョブ ハンドラ

以下に、C# で作成されたサンプル ジョブ ハンドラを示します。有益な内容を実行するものではありませんが(CanProcess および Execute メソッドが呼び出されたときにダイアログを表示する)、ジョブ ハンドラを作成するためのテンプレートとして使用できます。