<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
我们这个XML定义的是ECClass(多个相关的ECClass可以放到一个ECSchema中),不是ECInstance。ECInstance是附到元素上的XML片段,含有具体的值。
我请教了EC方面的专家,在V8i的VBA下没有更好的办法实现您的需求。需要用C#编程应该是可以的。C#有关EC的开发请参考SDK中的帮助文档:ecsdk.chm、ecobjects.chm、ecservices.chm等。但请注意,EC编程V8i和CE下变化很大。
好的,谢谢老师的细心指导和耐心的咨询查找
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属性可以在附加完成后删除或替换吗?