@@ -112,6 +112,16 @@ ClassMethod fillClassData(oData As %ZEN.proxyObject, className As %String, level
112
112
if (oData .restrictPackage ) && ('..inPackage (oData .basePackageName , package )) quit oClass
113
113
set oClass .Super = ..correctInheritance (oData , classDefinition , package ) // now expand super names
114
114
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
+
115
125
set oClass .properties = oProperties
116
126
set count = classDefinition .Properties .Count ()
117
127
set props = ##class (%Dictionary.ClassDefinition ).%OpenId (" %Dictionary.PropertyDefinition" )
@@ -127,14 +137,26 @@ ClassMethod fillClassData(oData As %ZEN.proxyObject, className As %String, level
127
137
// Skip private properties that InterSystems may add in any future versions
128
138
}
129
139
}
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 )
136
158
} else {
137
- set oProp .Type = ..extendClassFromType (p . Type )
159
+ set oProp .Type = ..extendClassFromType (pType )
138
160
}
139
161
}
140
162
0 commit comments