@@ -112,6 +112,16 @@ ClassMethod fillClassData(oData As %ZEN.proxyObject, className As %String, level
112112 if (oData .restrictPackage ) && ('..inPackage (oData .basePackageName , package )) quit oClass
113113 set oClass .Super = ..correctInheritance (oData , classDefinition , package ) // now expand super names
114114
115+ // prebuild a list of properties that are part of an FK
116+ kill propToFK
117+ for i = 1 :1 :classDefinition .ForeignKeys .Count () {
118+ set fk = classDefinition .ForeignKeys .GetAt (i )
119+ for j = 1 :1 :$l (fk .Properties ," ," ) {
120+ set prop = $piece (fk .Properties ," ," )
121+ set propToFK (prop ) = fk
122+ }
123+ }
124+
115125 set oClass .properties = oProperties
116126 set count = classDefinition .Properties .Count ()
117127 set props = ##class (%Dictionary.ClassDefinition ).%OpenId (" %Dictionary.PropertyDefinition" )
@@ -127,14 +137,26 @@ ClassMethod fillClassData(oData As %ZEN.proxyObject, className As %String, level
127137 // Skip private properties that InterSystems may add in any future versions
128138 }
129139 }
130- if (..classExists (package _ " ." _ p .Type )) {
131- set oProp .Type = package _ " ." _ p .Type
132- do ..fillClassData (oData , package _ " ." _ p .Type , level , currLevel )
133- } elseif (..classExists (..extendClassFromType (p .Type ))) {
134- set oProp .Type = ..extendClassFromType (p .Type )
135- do ..fillClassData (oData , ..extendClassFromType (p .Type ), level , currLevel )
140+
141+ set pType = p .Type
142+
143+ // check if this property has an outgoing FK reference
144+ if $d (propToFK (p .Name ), fk ) {
145+ // if so, override target type and class relationship traits
146+ set pType = fk .ReferencedClass ,
147+ oProp .Relationship = 1 ,
148+ oProp .Cardinality = " one" ,
149+ oProp .Inverse = " [foreign key]"
150+ }
151+
152+ if (..classExists (package _ " ." _ pType )) {
153+ set oProp .Type = package _ " ." _ pType
154+ do ..fillClassData (oData , package _ " ." _ pType , level , currLevel )
155+ } elseif (..classExists (..extendClassFromType (pType ))) {
156+ set oProp .Type = ..extendClassFromType (pType )
157+ do ..fillClassData (oData , ..extendClassFromType (pType ), level , currLevel )
136158 } else {
137- set oProp .Type = ..extendClassFromType (p . Type )
159+ set oProp .Type = ..extendClassFromType (pType )
138160 }
139161 }
140162
0 commit comments