Лёгкое программирование под Autodesk Vault Часть 39
Рекомендуемый способ добавления определяемых пользователем свойств (UDP) - это использование интерфейса Vault Explorer, но иногда разработчик хочет сделать это с помощью кода.
Будем использовать функцию API AddPropertyDefinition для достижения этой цели. Это позволяет установить отображение свойств со свойствами некоторых файлов, например iProperties в файле Inventor, при создании нового UDP. При настройке отображения псевдоним (Moniker) источника содержимого является ключевой информацией. Псевдоним - это строка, которая состоит из трех частей:
1) Отображаемое имя свойства файла;
2) CLSID для свойства (т.е. CLSID для любых пользовательских свойств в файле Inventor можно найти в Vault 2012\Explorer\ProviderConfig_Inventor.xml: Microsoft User Defined PropertySet id. Функция GetPropertyDefinitionInfosByEntityClassId в Vault API также может вернуть вам всю информацию по свойству.);
3) Строка указывает тип данных значения свойства.
Эти три части разделяются восклицательным знаком. Вот пример значения псевдонима для пользовательского свойства с именем 'UserPropertyTest' в файле Inventor:
UserPropertyTest!{D5CDD505-2E9C-101B-9397-08002B2CF9AE}!nvarchar
Первая часть, как правило, различна для разных свойствах, но вторая часть отображения значения псевдонима к Inventor iProperties постоянна во всех хранилищах. Это может быть неверно для других продуктов. Например, было сказано, что вторая часть для каждого из атрибута заглавного блока AutoCAD отличается, и даже для одного и того же атрибута, вторая часть на другом сервере хранилища не такая же.
Приведенный ниже пример на C# описывает, как добавить UDP с именем "TestMapAPI" и установить отображение типа запись (без чтения) для связи его с пользовательским свойством с именем "UserPropertyTest" в файле Inventor. Перед запуском примера, необходимо иметь существующий UDP с именем "Test" в Vault и его отображение в свойство "UserPropertyTest" в файле Inventor.
- // Настройте учетные данные для хранилища.
 - // Для демонстрационных целей, информация записана жестко.
 - UserPasswordCredentials login = new UserPasswordCredentials(
 - "localhost", "Vault", "Administrator", "", false);
 - // Создание WebServiceManager который может быть использован для всех вызовов Vault Server.
 - // Помещение менеджера в блок using гарантирует, что он разорвет соединение, когда мы закончим.
 - using (WebServiceManager serviceManager = new WebServiceManager(login))
 - {
 - PropDef[] props = serviceManager.PropertyService.
 - GetPropertyDefinitionsByEntityClassId("FILE");
 - string Moniker = "";
 - foreach (PropDef prop in props)
 - {
 - if (prop.DispName == "Test")
 - {
 - PropDefInfo[] propInfos = serviceManager.
 - PropertyService.GetPropertyDefinitionInfosByEntityClassId(
 - "FILE", new long[] { prop.Id });
 - foreach (PropDefInfo propInfo in propInfos)
 - {
 - Moniker = propInfo.EntClassCtntSrcPropCfgArray[0].
 - CtntSrcPropDefArray[0].Moniker.Split('!')[1];
 - }
 - }
 - }
 - CtntSrcPropDef ctntSrcPropDef = new CtntSrcPropDef();
 - ctntSrcPropDef.DispName = "UserPropertyTest";
 - ctntSrcPropDef.CanCreateNew = true;
 - ctntSrcPropDef.Classification = Classification.Custom;
 - ctntSrcPropDef.CtntSrcDefTyp = CSPDefTypes.File;
 - ctntSrcPropDef.CtntSrcId = 4;
 - ctntSrcPropDef.MapDirection = AllowedMappingDirection.Write;
 - ctntSrcPropDef.Typ = DataType.String;
 - ctntSrcPropDef.Moniker = "UserPropertyTest!"+Moniker+"!nvarchar";
 - EntClassCtntSrcPropCfg entClsCtntSrcPropCfg = newEntClassCtntSrcPropCfg();
 - entClsCtntSrcPropCfg.EntClassId = "FILE";
 - entClsCtntSrcPropCfg.CanCreateNewArray = new bool[] { true };
 - entClsCtntSrcPropCfg.CtntSrcPropDefArray = new CtntSrcPropDef[] {
 - ctntSrcPropDef };
 - entClsCtntSrcPropCfg.MapDirectionArray = new MappingDirection[] {
 - MappingDirection.Write };
 - entClsCtntSrcPropCfg.MapTypArray = newAutodesk.Connectivity.WebServices.
 - MappingType[] { Autodesk.Connectivity.WebServices.MappingType.Constant };
 - entClsCtntSrcPropCfg.PriorityArray = new int[] { 0 };
 - PropDefInfo propDefInfo = serviceManager.PropertyService.AddPropertyDefinition(
 - "921579AE-C383-4837-AC78-05B19F5DDDDB", "TestMapAPI", DataType.String,
 - false, true, string.Empty, new string[] { "FILE" },
 - new EntClassCtntSrcPropCfg[] { entityClassCtntSrcPropCfg }, null,null);
 
Если вы отображаете не пользовательские Inventor iProperties, например, свойство "Проект", вам необходимо изменить некоторые свойства объекта CtntSrcPropDef в коде выше - в том числе.DispName на "Проект", и.Classification to “Classification.Standard”, возле .Moniker изменить на: "Project!" + Moniker + "!nvarchar";
Источник: http://adndevblog.typepad.com/manufacturing/2012/06/add-user-defined-property-by-vault-api.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=966
Опубликовано 19.09.2014Отредактировано 19.09.2014 в 14:09:19