getPropInfo(parClass : Integer; subLevel : Integer; subId : Integer) : String; vars oa : ObjectArray; obj : Object; klass : Class; lvl : Integer; prop1 : Property; prop2 : Property; msg : String; begin create oa transient; klass := rootSchema.getClassByNumber(parClass); while true do // place at head and push others down oa.insert(1, klass); if klass = Object then break; // finished endif; klass := klass.getSuperclass(); endwhile; /* foreach lvl in 1 to oa.size do klass := oa[lvl].Class; write 'Class ' & klass.name & ' is level ' & lvl.String; endforeach; */ if subLevel < 1 or subLevel > oa.size then msg := 'subLevel (' & subLevel.String & ') is out of bounds: Hierarchy ='; foreach lvl in 1 to oa.size do msg := msg & ' ' & oa[lvl].Class.name & '(' & lvl.String & ')'; endforeach; else klass := oa[subLevel].Class; foreach prop1 in klass.getProperties() do if prop1.subId = subId then if prop1.isKindOf(ExplicitInverseRef) then msg := prop1.schemaType.name & '.' & prop1.name; prop2 := prop1.getOtherProperty(); msg := msg & ' - inverse ' & prop2.getSchemaType.name & '.' & prop2.name; else // collection of some sort (e.g., array) msg := prop1.type.name & ' ' & prop1.schemaType.name & '.' & prop1.name; endif; break; endif; endforeach; endif; return msg; epilog delete oa; end;