<ECProperty propertyName="Name" typeName="string"> <ECCustomAttributes> <PreviousNameArray xmlns="Bentley_Standard_CustomAttributes.01.00"> <PreviousNames> <PreviousName> <OldName /> <SchemaFullNameKey>TestSchema.01.00</SchemaFullNameKey> <IsNewInThisVersion>True</IsNewInThisVersion> </PreviousName> </PreviousNames> <PreviousNameAlreadySaved>True</PreviousNameAlreadySaved> </PreviousNameArray> <PropertyPriority xmlns="EditorCustomAttributes.01.00"> <Priority>100</Priority> </PropertyPriority> </ECCustomAttributes> </ECProperty>
Sub test() Dim oPH As PropertyHandler Set oPH = CreatePropertyHandler(ActiveModelReference.GetElementByID(DLongFromLong(32358))) oPH.SelectByAccessString "mingCheng" oPH.SetValue "12" End Sub
从你粘贴出来的ECSchema.XML中看到的ECProperty的名称是"Name",而你的代码中SelectByAccessString后指定的名称是"mingCheng",这两个名称不匹配。请查看一下是否是这个原因?
我这个xml粘贴自您给的文件!疏忽了,我使用的是我另写的xml,并没有不匹配,如下:
<ECProperty propertyName="mingCheng" typeName="String" displayLabel="名称"> <ECCustomAttributes> <PreviousNameArray xmlns="Bentley_Standard_CustomAttributes.01.00"> <PreviousNames> <PreviousName> <OldName /> <SchemaFullNameKey>TestSchema.01.00</SchemaFullNameKey> <IsNewInThisVersion>True</IsNewInThisVersion> </PreviousName> </PreviousNames> <PreviousNameAlreadySaved>True</PreviousNameAlreadySaved> </PreviousNameArray> <PropertyPriority xmlns="EditorCustomAttributes.01.00"> <Priority>100</Priority> </PropertyPriority> </ECCustomAttributes> </ECProperty>
我测试这个ProertyHandler的SelectByAccessString,它只认识系统自带的属性,无法选择自定义的属性。该方法返回值总是False。
请升级到MSCE,改用ItemType编程。会比在V8i中这样用EC属性要简单得多。
确实是有默认值或手工赋过值之后就能用ProertyHandler的SelectByAccessString来选择了。由于V8i将被淘汰,CE下又有新的ItemType可用,所以,这类Bug开发组不给修复的。
利用XML还可以定义一个ECInstance来给自定义属性赋初始值吧?符老师我们在V8i平台花费的心血太多了,最后一步也不好立马转CE平台,所以才会如此守旧