Имеется проект, размещенный в Autodesk Vault. Файлы проекта соединены внешними ссылками.
При возврате некоторых файлов проекта в хранилище Vault, выдается следующая ошибка:
Были проверены все связи внешних ссылок, следующим образом:
Перед выполнением каждого из вышеперечисленных пунктов проверки, старые данные удалялись из локальной папки и загружались из хранилища заново.
Тем не менее, после проведения описанных выше процедур – ОШИБКА ОСТАЕТСЯ!
Используемые версии ПО:
Количество файлов в проекте 54.
Решено! Перейти к решению.
Решено: GeorgeLGT. Перейти к решению.
Нашли решение (все-таки пост давно был написан)?
Есть идея, что слишком длинный путь + длинное имя файла (более 255 символов в сумме).
Да, нашли решение:
Причина в том, что к одному файлу подключено n-ное количество внешних ссылок, в которые, в свою очередь, также подлючены ссылки и т.д. Мало того, они все могут быть соединены между собой. Таким образом формируется огромное дерево ссылок (у нас доходило до 92 файлов). Так вот при возврате какого-либо файла в Vault, он рекурсивно проверяет количество всех внешних ссылок - т.е. не только подгруженные в Ваш чертеж, но и все нижележащие (потому я и написал "рекурсивно"). Проверяются ссылки в файлах, которые выгрузились в папку, при открытии рабочего файла, и информация о внешних ссылках на сервере.
Ну проверяет и ладно... Если количество ссылок, и информация о их имена совпадают, то никаких ошибок не будет. НО! Как только какой-либо пользователь подключит новую внешнюю ссылку, и вернет файл в хранилище через клиент Vault'а - она не зафиксируется в базе (все ссылки в клиенте можно посмотреть в окне "Дополнительных свойств" - на вкладке "Применения"), и не будет отображаться в Vault'е. Это происходит потому, что при возвращении файла через надстройку AutoCAD'а, в хранилище поступает информация о возвращаемом файле, а также объект, предоставляющий данные о внешних ссылках (в этом можно убедиться, если открыть SDK Vault'а).
А вот, при возврате файла через клиент - такая информация в хранилище не поступает, т.к. ему просто не поступают такие данные (для этого нужно вытащить информацию из файла, что клиент не делает). И тут возникает момент, когда формируется ОШИБКА! Т.к. при рекурсивной проверке внешних ссылок оказывается, что в одной из них есть некая ссылка "x", а в списке ссылок в Vault'е ее нет, именно тогда Vault выдает сообщение, скриншот которого я приводил в сообщении. Обычно пользователи в этот момент сохраняют файл и возвращают его через клиент, не говоря об ошибке, а возможно формируя еще одну! Так начинается эта "эпидемия".
Есть несколько решений:
1. Отключить возврат файлов в хранилище через клиент Vault'а, тогда все внешние ссылки будут фиксироваться, при возврате файлов через надстройку приложения. Нам этот вариант не подошел, т.к. периодически возникает необходимость положить в хранилище большой объем документов. Индивидуально - очень долго. (Хотя для этого тоже есть специальная утилита, поставляемая с Vault'ом, но пользоваться кучей дополнительных приложений пользователей не устраивает, что, я считаю, правильно).
2. Второй вариант - более сложный, но именно им мы и воспользовались. Мы написали приложение, которое, выгружает все файлы из дерева внешних ссылок, о котором я писал выше, вместе с информацией о внешних ссылках, хранящейся в БД Vault'а. Затем формирует информацию о внешних ссылках каждого файла, из тех что были выгружены (используя AutoCAD в консольном режиме). А затем информация сравнивается (тут важно хорошо разбираться во "внешних ссылках"). В итоге получилось приложение, наподобие Autodesk Reference Repair Utility, но работающее с деревом внешних ссылок, и находящего ВСЕ ОШИБКИ, в т.ч. те, которые эта утилита не находит. (Это, кстати, позволяет подключить дополнительные проверки файлов).
3. Третий вариант - ненамного сложнее. К Vault'у можно написать модуль, который при возврате .dwg файлов через клиент, будет формировать информацию о подключенных ссылках, т.е. своего рода новую команду "Вернуть", как в надстройке AutoCAD. Это позволит класть в хранилище большое количество не .dwg документов, и информировать Vault о внешних ссылках для чертежей.
4. Ну, и последний вариант - в кратце "Серверная служба, которая будет следить за такими ошибками". Если интересно - расскажу подробнее.
Проще всего, конечно, отключить возврат файлов через клиент, т.к. не у всех есть возможность использовать программные средства. Но лучше, все-таки, написать дополнительные модули, т.к. они реально облегчают жизнь, и мне очень понравилось хорошо документированное SDK Vault'а, чего не могу сказать о самом приложении.
Кстати, стоит учитывать, что все это я пишу для 2015 Vault'а R2.
А еще, на предприятии не мешает иметь документ, регламентирующий работу отделов в Autodesk Vault (т.е. кто кого подключает по внешней ссылке и т.д.)
Удачи!
Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.