ADN Open CIS
Сообщество программистов Autodesk в СНГ

21/09/2015

Синхронизация свойств Vault для эквивалентности свойств

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

Помещенный в хранилище файл будет иметь ошибку эквивалентности свойство, если требуется чтобы в него были записаны обратно значения свойств.  Такое поведение контролируется отображениями записи в определениях свойств. Ошибки значат то, что значения свойств недвижимости в базе данных хранилища, не соответствуют значениям свойств, хранящимся в файле. Вы можете исправить эту ситуацию, осуществляя синхронизацию свойств в Vault Explorer, но это слишком просто - вместо этого давайте осуществим синхронизацию свойств с помощью Vault 2016 API.

В службе Document есть довольно неясный метод, который называется GetComponentProperties, чьё описание в справке гласит: "Получает данные свойств файла, который был назначен элементу". Что этот метод действительно делает (в 2015-R2 и позже), так это предоставление именно той информации, которая должна быть записана обратно в файл, с целью обеспечения эквивалентности свойств. И это не ограничивается файлами, которые были назначены элементам - это отлично работает и там, нет никаких элементов (например, в Vault Workgroup или Vault Basic).

Так ничего не даётся просто, есть ряд потенциальных проблем, которые нам необходимо будет обойти. Прежде всего, если вы слепо принимаете данные о свойствах из метода GetComponentProperties и передаете их в CopyFile, вы можете заметить сдвиг DateTimes на вашем часовом поясе; или численные значения, сдвинутые на несколько разрядов там, где разделитель тысячных представлен точкой (".") а десятичная точка - запятой (","). Это довольно серьезные ошибки, которых следует избегать. Кроме того, мы не хотели бы создания новой версии каждого файла, который мы синхронизируем, если мы на самом деле ничего не делаем - это может быть довольно раздражительным.

Я заключил все что нужно, чтобы избежать этих проблем в простой класс ("PropertySync"), который имеет только конструктор и один метод. Идея состоит в том, чтобы собрать файлы, для которых вы хотите сделать синхронизацию, построить объект PropertySync, а затем вызвать его метод SyncProperties для каждого файла. Процесс является двухступенчатым, зато определение свойств необходимо получить только один раз. Больше деталей в комментарии к коду.

Нажмите здесь для того чтобы получить код примера (C#)

Источник: http://justonesandzeros.typepad.com/blog/2015/08/syncing-vault-properties-for-property-equivalence.html

Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=3033

Опубликовано 21.09.2015
Отредактировано 20.12.2015 в 15:00:51