Como os Manipuladores de trabalho são carregados

Saiba mais sobre como o Job Processor carrega manipuladores de trabalho na inicialização.

O Job Processor carrega tanto manipuladores de trabalho da Autodesk como de terceiros.

  1. Carregar todos os Manipuladores de trabalho de terceiros na pasta Extensão
  2. Ler as informações de configuração do Manipulador de trabalho.
  3. Carregar Manipuladores de trabalho do Autodesk.
  4. Associe os Tipos de trabalho com os Manipuladores de trabalho e verifique se cada Manipulador de trabalho está ativado.

Extensões de Manipulador de trabalho de terceiros

Cada extensão de terceiro deve existir em sua própria pasta no diretório Extensão:

%allusersprofile%\Autodesk\Vault[ano]\Extensions\

Assim, por exemplo, se tivéssemos uma extensão de manipulador de trabalho chamada "JobHandlerSample", ela poderia ficar no diretório %allusersprofile%\Autodesk\Vault [ano]\Extensions\JobHandlerSample.

Para cada pasta no diretório de extensão, o Job Processor overview procura um arquivo de configuração.  O arquivo de configuração é um arquivo de texto simples que pode possuir qualquer nome, mas deve terminar com a extensão .vcet.config.  Se o arquivo de configuração não existir, haverá falha no carregamento da extensão.  Aqui está o conteúdo de um arquivo de configuração de amostra, JobHandlerSample.vcet.config:

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

O elemento montagem especifica o nome da extensão dll.  Portanto, na amostra acima, a extensão dll é denominada JobHandlerSample.dll.  O tipo de extensão de JobProcessor indica que se trata de uma extensão do Job Processor (outros tipos de extensão também pode Live no diretório: WebService e VaultClient).

A montagem da extensão (em nossa amostra, JobHandlerSample.dll) é carregada.  No carregamento, as seguintes verificações são executadas:

  1. As referências da montagem dll são verificadas para garantir que não sejam vinculadas a qualquer um dos dlls do Vault (cujos nomes são iniciados por "Conectividade").  Se uma montagem de extensão estiver vinculada com um desses dlls (direta ou indiretamente), ela irá falhar.
  2. A montagem é verificada com relação a um único tipo exportado que implementa a interface IJobHandler.  Em nosso exemplo, JobHandlerSample, dentro do projeto de montagem, é possível ter a classe C# a seguir para implementar a interface 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;
               }
          }
    }         

    Deve haver exatamente um tipo público na montagem que implemente IJobHandler.  Se isso não ocorrer, haverá falha no carregamento da extensão.  Uma instância desse tipo é instanciada.

  3. A montagem é verificada com relação a determinados atributos de montagem obrigatórios. Especialmente,
    1. ApiVersion: um atributo do tipo Autodesk.Connectivity.Extensibility.Framework.ApiVersionAttribute que especifica a versão da API para a qual essa extensão foi escrita.  Se a versão não coincide com a versão atual da API do Vault, o carregamento da extensão irá falhar.
    2. Empresa, descrição, Nome do produto: os atributos do espaço System.Reflection de tipos AssemblyCompanyAttribute, AssemblyDescriptionAttribute, AssemblyProductAttribute são necessárias e não deve estar vazio sequência de caracteres.  Se não houver ou estiver vazio, haverá falha no carregamento da extensão.
    3. ExtensionId: um atributo do tipo Autodesk.Connectivity.Extensibility.Framework.ExtensionIdAttribute que especifica um ID exclusivo como uma sequência de caracteres (em forma de Guia).  Se este atributo não existir ou estiver vazio, haverá falha no carregamento da extensão.

Configuração do Manipulador de trabalho.

O arquivo de configuração do Manipulador de trabalho é um arquivo XML que contém as informações de configuração para o Job Processor.  Ela está localizada no mesmo diretório que JobProcessor.exe (geralmente C:\Arquivos de Programas\Autodesk\Vault Professional [ano]\Explorer) e se chama JobProcessor.exe.config.  A seção apropriada para a configuração dos manipuladores de trabalho está em configuration\connectivityexplorer\jobhandlers.  Nesta seção XML, cada elemento dojobHandler representa um Manipulador de trabalho.  Os elementos XML do jobHandler são da seguinte forma:

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

Em que local:

  1. A Classe representa o Tipo de trabalho.  Quando um trabalho é adicionado à fila do Servidor de trabalho, o Tipo de trabalho é especificado e a sequência de caracteres exclusiva é utilizada para determinar o Manipulador de trabalho que irá processar o trabalho.
  2. O Manipulador representa o nome do tipo de montagem que implementa o IJobHandler.  Isto pode ser especificado de diversas formas.  É necessário especificar uma sequência de caracteres que, quando passada para System.Type.GetType(string) (consulte http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx) irá retornar o tipo do objeto na montagem que implementa o IJobHandler.

Portanto, um elemento jobHandler válido para nosso exemplo de extensão seria:

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

No arquivo JobProcessor.exe.config, você perceberá que já existe uma entrada jobHandler para cada manipulador de trabalho integrado da Autodesk.  Os Manipuladores de trabalho integrados só são carregados quando há uma entrada jobHandler para eles.  As dlls do Manipulador de trabalho integrado estão localizadas no mesmo diretório que o arquivo JobProcessor.exe.

Verificar se os Manipuladores de trabalho estão ativados

As informações de configuração acima são utilizadas para associar um Tipo de trabalho a um determinado Manipulador de trabalho.  Uma vez que é concluído, cada Manipulador de trabalho é questionado com relação à capacidade de processamento do Tipo de trabalho específico.  O Manipulador de trabalho responde essa pergunta implementando o método da interface IJobHandler.CanProcess.  Nessa etapa, o Manipulador de trabalho deve verificar se tem tudo que precisa para processar esse tipo de trabalho (por exemplo, alguns dos manipuladores de trabalho de criação de dwf devem verificar se o Inventor está instalado). 

Quando você verifica quais Tipos de trabalho estão sendo processados por um Job Processor (usando o menu Gerenciamento-> Tipos de trabalho...), cada entrada relacionada significa que um Manipulador de trabalho para o Tipo de trabalho foi carregado com sucesso.  Se a entrada for selecionada, indica que o Manipulador de trabalho está ativado (isto é, ele retorna "verdadeiro" de sua implementação de IJobHandler.CanProcess).  Para que o Job Processor pergunte novamente ao Manipulador de trabalho se "pode processar", o usuário precisa sair do Job Processor e reiniciá-lo.

Depois que todos os manipuladores de trabalho forem carregados e consultados, o Job Processor estará pronto para começar a extrair trabalhos da fila e processá-los.

Exemplo de manipulador de trabalho

O Vault SDK contém o exemplo de manipulador de trabalho JobProcessorApiSamples.Para obter mais informações, clique aqui.