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

27/02/2015

Еще один способ обновить cвойства

Если вы хотите обновить свойство Vault и это свойство сопоставляется со значением в файле, у вас есть несколько способов сделать это, но все они плохи.  Эта статья является введением в третий, нормальный вариант, который появился начиная с Vault 2015 R2.  Опять же, я буду использовать ранее недокументированные функции из Copy Design.

Первый способ заключается в получении и загрузке файла САПР.  Далее, используем соответствующий API САПР для обновления файла на диске.  Наконец, возвращаем файл обратно в хранилище.  Что делает этот вариант таким трудным, так это то, что вам нужно привлекать API САПР.  Между тем, было бы неплохо осуществлять все операции только в пределах Vault API.

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

... Это новый способ, который заключается в использовании функции Copy Design.  Подобно тому, как вы можете "создать свой собственный" Copy Design, вы также можете запустить обновление свойства, без вызова API САПР или загрузки файла.  Это 4-шаговый процесс:

Шаг 1: Получение файла
DocumentService.CheckoutFile (...)

Этот шаг резервирует файл для редактирования вами.  Он также даёт вам скачать билет, который вам потребуется в следующих 2 шагах.  Несмотря на то, что фактически вы ничего не загружаете, билет является валютой, которую использует FilestoreService.

Шаг 2: Чтение и определения свойств из файла
FilestoreService.GetContentSourcePropertyDefinitions (...)

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

Шаг 3: Копирование двоичного содержимого файла
FilestoreService.Копировать файл(...)

Этот шаг создаст новый массив двоичных данных (BLOB) в файловом хранилище Vault.  Он также позволяет обновлять свойства этого массива.  Параметр 'writeReqs' позволяет вам передать новые значения свойств, которые вы получили на втором шаге.  Будут обновлены только свойства, которые вы передаете, Все остальные свойства остаются с их существующими значениями.  
Вполне возможно, что не все свойства, которые передаются, будут обновлены, поэтому для подтверждения проверьте возвращаемый параметр 'writeResults'.

Шаг 4: Возврат файла 
DocumentService.CheckinUploadedFile (...)

Эти шаги связывают двоичные данные в файловом хранилище с фактическими записями в базе данных Vault.  Без этого шага, вы просто имеете массив двоичных данных, находящийся в подвешенном состоянии.  Хотя вы скопировали двоичные данные, они не будет использоваться для создания нового File Master, как с Copy Design.  Вместо этого, вы создаете новую версию существующего файла.  С точки зрения файлового хранилища, нет никакой разницы между ними.  Оба лишь массивы двоичных данных.

Примеры кода

Надеюсь, вы не думали, что я просто пройду через все это без предоставления каких-либо образов кода?  Ни в коем случае.  Действительно, есть мини-приложение, которое иллюстрирует этот рабочий процесс и а также простой рабочий процесс Copy Design из предыдущего поста.  Приложение включает в себя исходный код на C# и VB.NET. Наслаждайтесь!

 

Нажмите здесь, чтобы скачать

Источник: http://justonesandzeros.typepad.com/blog/2015/02/another-way-to-update-properties.html

 

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

Опубликовано 27.02.2015
Отредактировано 19.12.2015 в 02:09:01