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 na própria pasta no diretório de extensões:

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

Desse modo, se, por exemplo, houver uma extensão de manipulador de trabalho chamada "JobHandlerSample", ela poderá residir 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, encontra-se 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 do dll de montagem são verificadas para garantir que não sejam vinculadas a qualquer um dos dlls do Vault (aqueles com nomes iniciados por "connectivity"). 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. Company, Description, ProductName: os atributos de namespace System.Reflection of types AssemblyCompanyAttribute, AssemblyDescriptionAttribute, AssemblyProductAttribute são necessários e não devem ser sequências de caracteres vazias. 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 (no formato GUID). 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. Ele está localizado no mesmo diretório que o 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:

  1. O elemento class 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 elemento handler 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/pt-br/library/w3f99sx1.aspx, retorna 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.