Лёгкое программирование под 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