1.关于自定义对象的结构体属性,按照BDN社区点此查看的如下示例代码,为我的自定义对象创建了一个结构体属性
<ECClass typeName="CurveData" isStruct="True" isDomainClass="True"> <ECProperty propertyName="Order" typeName="int" displayLabel="Order" /> </ECClass> <ECClass typeName="PointData" isStruct="True" isDomainClass="True"> <ECProperty propertyName="BCurve" typeName="CurveData" displayLabel="Curve" isStruct="True" /> </ECClass>
创建后的自定义对象属性栏图如所示:,请问其Curve属性如何体现出结构体的特性的?其内部的int类型Order属性为什么看不见呢?是我结构体属性创建的有问题,还是什么其他原因?
2.关于使用SetValue和GetValue时,accessString参数的使用问题
根据BDN的帮助文档点此查看,accessString可以采用类C表达式进行属性的访问,但实际测试,例如上面的结构体属性,通过SetValue设置属性,返回的结果是Error的,如图所示。。
另外,类似的问题在数组属性上也无法实现,如右图所示的数组属性,通过直接设置整个数组的方式能够成功,但通过设置数组的某个角标的方式,就无法设置成功,且在GetValue方法中同样无法使用类C的表达方式,如右图。
以上就是我的两个问题,期待回复!
请参考下面schema:
<ECClass typeName="CurveData" isStruct="True" isDomainClass="True"> <BaseClass>CimExampleLinearElement</BaseClass> <ECProperty propertyName="Order" typeName="int" displayLabel="Order" /> <ECProperty propertyName="Width" typeName="double" displayLabel="Width" /> <ECProperty propertyName="Height" typeName="double" displayLabel="Height" /> <ECProperty propertyName="Thickness" typeName="double" displayLabel="Thickness" /> </ECClass> <ECClass typeName="PointData" isStruct="True" isDomainClass="True"> <ECStructProperty propertyName="BCurve" typeName="CurveData" /> </ECClass>
非常感谢,您的代码解决了我的第一个问题,看来BDN上的参考代码是错误的哈~
那么请问我提的第二个问题有解决方法吗?
这个我怀疑是否是因为schema的问题导致,您试试获取一下看看能否获取到。
呃……麻烦您说的再清除一下,我没明白您的意思。
您看图中,通过直接给数组属性赋值和取值的方式是可以实现的,但通过“CustomArray[1]”这种类C的表达方式就不行了。
我意思是你的问题2不行的原因是因为问题1出现了问题,正常是可以获取的,请按照回复将问题1修改正确后,尝试用问题2的代码进行获取,另外关于accessString,BDN文档已经讲的很详细了,请参考文档进行操作。
您给的示例ECSchema中没有数组类型的属性,而我出问题的是数组类型的属性无法通过中括号的方式直接设置或者获取某个元素的值,即无法通过SetValue(“CustomArray[1]”,1,true,true)或者GetValue(“CustomArray[1]”)的方式访问数组属性的第2个元素(这前提我已经通过对数组属性整体赋值的方式对数组属性成功赋值),而只能通过整体设置数组或取出数组的方式进行,这和BDN帮助文档中关于accessString的介绍有出入,所以请问问题是出在哪里了呢?