Come vengono caricati i gestori dei lavori

Di seguito viene descritta la modalità con cui il Job Processor carica i gestori dei lavori (sia di Autodesk che di terze parti) all'avvio:

  1. Caricare tutti i gestori dei lavori di terze parti dalla cartella Estensione
  2. Leggere le informazioni di configurazione dei gestori dei lavori.
  3. Caricare i gestori dei lavori di Autodesk.
  4. Associare i tipi di lavoro ai gestori dei lavori e verificare l'abilitazione di ciascun gestore.
  2012 2013 2014
Autodesk Vault Basic    
Autodesk Vault Workgroup
Autodesk Vault Collaboration
Autodesk Vault Professional

Estensioni dei gestori dei lavori di terze parti

Le estensioni di terze parti dovrebbero essere presenti nella cartella corrispondente nella directory delle estensioni:

%allusersprofile%\Autodesk\Vault 2012\Extensions\

Ad esempio, se è presente un'estensione dei gestori dei lavori denominata "JobHandlerSample", dovrebbe trovarsi nella directory "%allusersprofile%\Autodesk\Vault 2013\Extensions\JobHandlerSample".

Per ogni cartella all'interno della directory delle estensioni il Job Processor verifica la presenza di un file di configurazione.  Il file di configurazione è un file di testo normale a cui è possibile assegnare qualsiasi nome, ma che deve terminare con l'estensione .vcet.config.  Se il file di configurazione non è presente, l'estensione non verrà caricata.  Di seguito è riportato il contenuto di un file di configurazione esemplificativo, JobHandlerSample.vcet.config:

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

Nell'elemento assieme è specificato il nome della DLL dell'estensione.  Quindi, nell'esempio sopra, la DLL dell'estensione è denominata JobHandlerSample.dll.  Il tipo di estensione di JobProcessor indica che si tratta di un'estensione per il Job Processor (possono essere presenti anche altri tipi di estensione nella directory, ad esempio WebService e VaultClient).

Viene quindi caricato l'assieme delle estensioni (nell'esempio JobHandlerSample.dll).  Dopo il caricamento vengono eseguiti i seguenti controlli:

  1. Vengono controllati i riferimenti della DLL dell'assieme per garantire che non venga collegata alle DLL del Vault (quelle il cui nome inizia con "Connecivity").  Se un assieme delle estensioni è collegato a una di queste DLL (direttamente o indirettamente), non verrà caricato.
  2. Nell'assieme viene verificata la presenza di un singolo tipo esportato in grado di implementare l'interfaccia IJobHandler.  Nell'esempio JobHandlerSample, all'interno del progetto dell'assieme può essere presente la seguente classe in C# per implementare l'interfaccia IJobHandler:
    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;
               }
          }
    }         

    Nell'assieme deve essere presente esattamente un tipo pubblico in grado di implementare IJobHandler.  In caso contrario, l'estensione non verrà caricata.  Viene creata un'istanza per tale tipo.

  3. Viene verificata la presenza nell'assieme di determinati attributi obbligatori dell'assieme. In particolare,
    1. ApiVersion: attributo di tipo Autodesk.Connectivity.Extensibility.Framework.ApiVersionAttribute che specifica la versione dell'API per cui è stata scritta l'estensione.  Se la versione corrisponde a quella corrente dell'API del Vault, l'estensione non verrà caricata.
    2. Company, Description, ProductName: gli attributi dallo spazio dei nomi System.Reflection dei tipi AssemblyCompanyAttribute, AssemblyDescriptionAttribute, AssemblyProductAttribute sono necessari e non possono essere stringhe vuote.  Se non esistono o le stringhe sono vuote, l'estensione non verrà caricata.
    3. ExtensionId : un attributo di tipo Autodesk.Connectivity.Extensibility.Framework.ExtensionIdAttribute che specifica un ID univoco come stringa (in formato GUID).  Se tale attributo non esiste o è vuoto, l'estensione non verrà caricata.

Configurazione dei gestori dei lavori

Il file di configurazione dei Gestori dei lavori è un file XML contenente le informazioni di configurazione per il Job Processor.  Il file è posizionato nella stessa directory di JobProcessor.exe (in genere C:\Programmi\Autodesk\Vault Professional [anno]\Explorer) ed è denominato JobProcessor.exe.config.  La sezione rilevante per la configurazione dei gestori dei lavori si trova in configuration\connectivityExplorer\jobHandlers.  In questa sezione XML, ciascun elemento jobHandler rappresenta un gestore dei lavori.  Gli elementi XML jobHandler hanno il seguente formato:

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

Dove:

  1. la classe rappresenta il tipo di lavoro.  Quando viene aggiunto un lavoro alla coda del server dei lavori, viene specificato il tipo di lavoro, mentre la stringa univoca viene utilizzata per stabilire quale gestore dei lavori provvederà a elaborare tale lavoro.
  2. il gestore rappresenta il nome del tipo in grado di implementare IJobHandler all'interno dell'assieme.  Può essere specificato in vari modi.  È necessario specificare una stringa che, se passata a System.Type.GetType(string) (vedere http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx ), restituisca il tipo di oggetto dell'assieme in grado di implementare IJobHandler.

Pertanto, un elemento jobHandler valido per l'esempio di estensione potrebbe essere:

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

Nel file JobProcessor.exe.config si noterà che esiste già una voce jobHandler per ciascuno dei gestori dei lavori integrati in Autodesk.  I gestori dei lavori integrati vengono caricati solo se esiste una voce jobHandler corrispondente.  Le DLL dei gestori dei lavori incorporate sono posizionate nella stessa directory di JobProcessor.exe.

Verificare l'abilitazione dei gestori dei lavori

Le informazioni di configurazione illustrate in precedenza vengono utilizzate per associare un tipo di lavoro a uno specifico gestore dei lavori.  Una volta eseguita questa operazione, a ciascun gestore dei lavori viene richiesto se è in grado di elaborare lo specifico tipo di lavoro.  Il gestore dei lavori risponde alla richiesta implementando il metodo dell'interfaccia IJobHandler.CanProcess.  È in questa fase che il gestore dei lavori deve controllare se dispone di tutto l'occorrente per poter elaborare i lavori del tipo corrispondente (ad esempio, alcuni dei gestori dei lavori per la creazione di file DWF verificano che sia installato Inventor). 

Quando si verifica quali tipi di lavoro vengono attualmente elaborati da un Job Processor (utilizzando il menu Amministrazione-> Tipi di lavoro...), ciascuna voce elencata indica che è stato caricato correttamente un gestore dei lavori per il tipo di lavoro corrispondente.  Se la voce è selezionata, significa che il gestore dei lavori è abilitato (in altre parole, dall'implementazione IJobHandler.CanProcess viene restituito "true").  Perché il job processor chieda nuovamente a un gestore dei lavori se "è in grado di elaborare", è necessario chiudere il Job Processor e riavviarlo.

Una volta che tutti i gestori dei lavori sono stati caricati e sottoposti a query, il Job Processor può acquisire i lavori in coda ed elaborarli.

Esempio di gestore dei lavori

In allegato (di seguito) è disponibile un esempio di gestore di lavori scritto in C#.  Non viene eseguita alcuna operazione utile (vengono visualizzate delle finestre di dialogo quando vengono chiamati i metodi CanProcess e Execute), ma può essere utilizzato come modello per la creazione di gestori dei lavori.