Порядок загрузки обработчиков заданий

Ниже описано, как рабочий процесс выполняет загрузку обработчиков заданий (разработанных компанией Autodesk и сторонними производителями) при запуске.

  1. Загрузка всех сторонних обработчиков заданий из папки "Расширение"
  2. Считывание информации о конфигурации обработчика задания.
  3. Загрузка обработчиков заданий Autodesk.
  4. Связь типов заданий с обработчиками заданий и проверка включения каждого обработчика заданий.
  2012 2013 2014
Autodesk Vault Basic    
Autodesk Vault Workgroup
Autodesk Vault Collaboration
Autodesk Vault Professional

Расширения сторонних обработчиков заданий

Все сторонние расширения должны находиться в отдельной папке в каталоге расширений:

%allusersprofile%\Autodesk\Vault 2012\Extensions\

Например, если имеется обработчик заданий с именем JobHandlerSample, он может находиться в каталоге %allusersprofile%\Autodesk\Vault 2013\Extensions\JobHandlerSample.

Для каждой папки в каталоге расширений рабочий процесс проверяет наличие файла конфигурации. Файл конфигурации представляет собой простой текстовый файл, которому может быть присвоено любое имя, однако файл должен иметь расширение .vcet.config. Если файл конфигурации отсутствует, расширение не будет загружено.  Ниже приведен пример содержания файла конфигурации JobHandlerSample.vcet.config:

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

Элемент сборки определяет имя файла библиотеки.  Поэтому в данном примере библиотека расширения называется JobHandlerSample.dll.  Тип расширения рабочего процесса указывает, что это расширение для рабочего процесса (в этом каталоге могут находиться расширения других типов: WebService и VaultClient).

Сборка расширения (в данном примере JobHandlerSample.dll) загружена.  При загрузке выполняются следующие проверки.

  1. Проверяются ссылки на файл DLL сборки, чтобы убедиться в отсутствии связей с файлами DLL хранилища (имена которых начинаются со строки Connectivity).  Если сборка расширения ссылается на один из этих файлов DLL (напрямую или косвенно), расширение не будет загружено.
  2. Для сборки выполняется проверка экспортируемого типа, который реализует интерфейс IJobHandler.  В данном примере в проекте сборки можно иметь следующий класс C# для реализации интерфейса 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;
               }
          }
    }         

    В сборке должен быть только один общедоступный тип, реализующий IJobHandler.  В противном случае расширение не будет загружено.  Вставляется экземпляр данного типа.

  3. Для сборки выполняется проверка определенных обязательных атрибутов. В частности:
    1. ApiVersion:  атрибут типа Autodesk.Connectivity.Extensibility.Framework.ApiVersionAttribute, указывающий версию API, для которой написано расширение.  Если версия не совпадает с текущей версией API Vault, расширение не будет загружено.
    2. Company, Description, ProductName: атрибуты из пространства имен System.Reflection типов AssemblyCompanyAttribute, AssemblyDescriptionAttribute, AssemblyProductAttribute являются обязательными и не должны быть пустыми.  Если они отсутствуют или являются пустыми, расширение не будет загружено.
    3. ExtensionId : атрибут типа Autodesk.Connectivity.Extensibility.Framework.ExtensionIdAttribute, который задает уникальный идентификатор в виде строки (в форме Guid).  Если этот атрибут отсутствует или является пустым, расширение не будет загружено.

Конфигурация обработчиков заданий

Файл конфигурации обработчика задания — это файл формата XML, содержащий информацию о конфигурации для рабочего процесса.  Он находится в том же каталоге, где расположен файл JobProcessor.exe (обычно это C:\Program Files\Autodesk\Vault Professional [год]\Explorer) и имеет имя JobProcessor.exe.config.  Раздел конфигурации обработчиков заданий — это \connectivityExplorer\jobHandlers.  В данном разделе XML каждый элемент jobHandler представляет один обработчик заданий.  XML-элементы jobHandler имеют один из следующих форматов.

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

Где:

  1. Элемент class представляет собой тип задания. Когда задание добавляется в очередь сервера заданий, указывается тип задания. Это уникальная строка, которая используется для определения обработчика заданий, который будет обрабатывать данное задание.
  2. Элемент handler указывает имя типа в сборке, который реализует IJobHandler. Он может быть задан разными способами. Необходимо указать строку, которая при передаче в метод System.Type.GetType(string) (см. статью http://msdn.microsoft.com/ru-ru/library/w3f99sx1.aspx) будет возвращать тип объекта в сборке, реализующего IJobHandler.

Таким образом, допустимым элементом jobHandler для примера расширения будет:

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

Обратите внимание, что в файле JobProcessor.exe.config уже имеется запись jobHandler для каждого встроенного обработчика заданий Autodesk.  Встроенные обработчики заданий загружаются, только если для них имеется запись jobHandler. Файлы DLL встроенных обработчиков заданий расположены в том же каталоге, что и файл JobProcessor.exe.

Проверка включения обработчиков заданий

Информация о конфигурации, приведенная выше, используется для связывания типа задания с определенным обработчиком заданий. После этого каждый обработчик заданий опрашивается для подтверждения возможности обработки определенного типа задания. Обработчик заданий отвечает на этот вопрос, реализуя метод интерфейса IJobHandler.CanProcess. На этом этапе обработчик заданий должен проверить, что у него имеется все необходимое для обработки заданий данного типа (например, некоторые обработчики заданий создания DWF проверяют, установлена ли программа Autodesk Inventor). 

При проверке типов заданий, который рабочий процесс обрабатывает в текущий момент (через меню "Администрирование" -> "Типы заданий..."), каждая запись в списке означает, что обработчик заданий для данного типа задания загружен успешно.  Если запись проверена, это свидетельствует о том, что обработчик заданий включен (то есть он вернул значение "Истина" из реализации IJobHandler.CanProcess). Чтобы рабочий процесс мог повторно направить обработчику заданий запрос на возможность выполнения обработки., пользователю необходимо будет закрыть и повторно запустить рабочий процесс.

После того как все обработчики заданий были загружены и опрошены, рабочий процесс будет готов к началу извлечения заданий из очереди и их обработке.

Примеры обработчиков заданий

Ниже представлен пример обработчика задания, написанный на C#. Он не выполняет никаких полезных действий (при вызове методов CanProcess и Execute появляется диалоговое окно), однако этот пример можно использовать в качестве шаблона для создания обработчиков заданий.