Рефакторинг / переименование производных классов Ocean Workstep - PullRequest
1 голос
/ 20 марта 2012

Кажется, что как только производный класс Ocean Workstep был выпущен в производство (и используется клиентами), его имя, пространство имен и имя сборки эффективно блокируются для будущих обновлений (для обеспечения обратной совместимости).

При сохранении проекта Petrel ссылки на рабочие шаги сохраняются как полное имя типа (пространство имен, класс, строгое имя сборки) в двоичном файле Classes.ptd. Во время загрузки, если точное имя типа (версия сборки, похоже, игнорируется) не может быть разрешено, рабочий шаг отображается в редакторе рабочего процесса как «рабочий шаг недоступен».

В других случаях двоичной сериализации, с которыми мы столкнулись, Petrel использует SerializationBinder, зарегистрированный с PetrelSystem.ProjectSerializationService - не так для экземпляров Workstep.

Есть ли другой способ облегчить переименования классов / пространств имен / сборок Workstep?

Почему это поведение так плохо документировано (если вообще)? Мы что-то не так поняли?

1 Ответ

3 голосов
/ 20 марта 2012

Эта проблема будет на самом деле исправлена ​​с помощью API Ocean 2012.1.Справочник по рабочим шагам больше не будет содержать номер версии: очищен как рабочий шаг, так и сериализация процесса.Номер версии не сериализован (и не используется при десериализации), и вместо имени типа можно использовать UniqueId.

Вот выдержка из замечаний к выпуску 2012.1 Ocean по этому вопросу.

Пространство имен уникальных идентификаторов процессов и рабочих шагов: Slb.Ocean.Petrel.Workflow

Процессы и рабочие шаги, созданные в Ocean, до сих пор не имели правильного идентификатора.Они были идентифицированы по полному имени типа, включая номер версии, что означает, что их идентификатор может измениться, например, если: - Номер версии сборки плагина был увеличен (например, установка нового плагина).- Класс process / workstep был перемещен в новую сборку.- Пространство имен класса process / workstep было изменено.Это может вызвать проблемы в Petrel, такие как отображение «неработающей ссылки» вместо имени процесса в дереве «Избранное» или рабочего шага, отображаемого в редакторе рабочего процесса как «рабочий шаг недоступен».

Чтобы решить эту проблему,Ocean удалила номер версии из идентификатора процесса и рабочего шага и предоставляет новый API для поддержки пользовательского идентификатора для пользовательских процессов и рабочих шагов, который будет уникальным для всего приложения Petrel.Любой процесс / рабочий шаг, созданный через Ocean, теперь должен реализовывать уникальный идентификатор.

Пожалуйста, обратитесь к: - Process.UniqueId для определения уникального идентификатора для процессов - Workstep.UniqueId для определения уникального идентификатора для рабочих шагов.Новый API также предлагает поддержку обратной совместимости для уже сериализованных процессов / рабочих шагов и несколько изменений в логике сериализации.При открытии устаревшего проекта идентификаторы старого стиля автоматически заменяются новыми идентификаторами во время десериализации.

С наилучшими пожеланиями, Гэль

...