<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>
好的,谢谢老师的细心指导和耐心的咨询查找
EC技术确实复杂,刚刚又深入研究了一下Bentley ClassEditor工具,其中有CalculatedECPropertySpecification 自定义属性可满足给ECProperty设置默认值的功能。修改你的ECSchema.XML如下:
<CalculatedECPropertySpecification xmlns="Bentley_Standard_CustomAttributes.01.00"> <RequiredSymbolSets /> <ECExpression>"Default Name"</ECExpression> <IsDefaultValueOnly>True</IsDefaultValueOnly> </CalculatedECPropertySpecification>
即在每个ECProperty的<ECCustomAttributes>下增加如上的一段就能给一个ECProperty增加默认值了。增加部分的位置如下图所示:
我写VBA代码测试通过了。
万分感谢,看到您的回复,下班了还折回来研究了一下!我们本来都要放弃VBA,转变方向了!真的万分感谢符工,您太负责任了!
符老师,根据你们的讨论我这边也将EC属性赋值成功,我想追问的是,如果一个已经附加自定义属性的元素在换父级对象后需要替换为不同的自定义属性!就是说:EC属性可以在附加完成后删除或替换吗?
XiaoHu said:EC属性可以在附加完成后删除或替换吗?
是可以的。但由于VBA功能太有限,需要切换到C#或C++中来完成。MSCE中的EC功能从底层上重写了(用C++代替了C#,C#效率太低),所以,强烈推荐您升级到MSCE。