@@ -7,11 +7,37 @@ XData UrlMap
77{
88<Routes >
99 <Route Url =" /save" Method =" POST" Call =" Save" />
10+ <Route Url =" /test" Method =" POST" Call =" Test" />
1011</Routes >
1112}
1213
14+ /// Saves keywords of class members and a class itself.
15+ ClassMethod SaveKeywords (memberKind As %String , definitionObj , assignObj As %ZEN .proxyObject ) As %String [ Private ]
16+ {
17+ set errors = " "
18+ #define logError (%e ) if (%e '= " " ) { set errors = errors _ %e _ $Char (10 ) }
19+ set propDefinition =
20+ ##class (%Dictionary.ClassDefinition ).%OpenId (" %Dictionary." _memberKind _" Definition" ).Properties
21+
22+ set pName = $order (assignObj .%data (" " ))
23+ while (pName '= " " ) {
24+ if (pName = " $add" ) { set pName = $order (assignObj .%data (pName )) continue }
25+ if (propDefinition .FindObjectId (" %Dictionary." _memberKind _" Definition||" _pName ) > 0 ) {
26+ if (('$IsObject ($PROPERTY (assignObj , pName )))) {
27+ set $PROPERTY (definitionObj , pName ) = $PROPERTY (assignObj , pName )
28+ }
29+ } else {
30+ $$$logError(" Unable to set " " " _pName _" " " property of " " " _memberKind _" " " in " _definitionObj .Name )
31+ }
32+ set pName = $order (assignObj .%data (pName ))
33+ }
34+ $$$logError($System .Status .GetErrorText (definitionObj .%Save ()))
35+
36+ return errors
37+ }
38+
1339/// Saves properties of class properties.
14- ClassMethod SaveClassMember (memberKind As %String , classDef As %Dictionary .ClassDefinition , prps As %ZEN .proxyObject ) As %String
40+ ClassMethod SaveClassMember (memberKind As %String , classDef As %Dictionary .ClassDefinition , prps As %ZEN .proxyObject ) As %String [ Private ]
1541{
1642 set errors = " "
1743
@@ -24,8 +50,6 @@ ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.Class
2450 #define nextProperty set memberName = $order (properties (memberName )) continue
2551 #define logError (%e ) if (%e '= " " ) { set errors = errors _ %e _ $Char (10 ) }
2652 #define hasErrors errors '= " "
27- set propDefs =
28- ##class (%Dictionary.ClassDefinition ).%OpenId (" %Dictionary." _memberKind _" Definition" ).Properties
2953
3054 set memberName = $order (properties (" " ))
3155 while (memberName '= " " ) {
@@ -39,24 +63,14 @@ ClassMethod SaveClassMember(memberKind As %String, classDef As %Dictionary.Class
3963 set pDef = $System .OBJ .OpenId (" %Dictionary." _memberKind _" Definition" , classDef .Name _" ||" _memberName )
4064 }
4165 if (pDef = " " ) {
42- $$$logError(memberKind _ " " _memberName _" not found in " _ className )
66+ $$$logError(" Member " " " _ memberKind _ " " " named " " " _memberName _" " " not found in " _ classDef . Name )
4367 $$$nextProperty
4468 }
4569
4670 if ($data (props .%data (" $delete" ))) {
4771 set error = $System .Status .GetErrorText (pDef .%Delete (pDef .%Oid ()))
4872 } else { // iterate over properties defined in props and save
49- set pName = $order (props .%data (" " ))
50- while (pName '= " " ) {
51- if (pName = " $add" ) { set pName = $order (props .%data (pName )) continue }
52- if (propDefs .FindObjectId (" %Dictionary." _memberKind _" Definition||" _pName ) > 0 ) {
53- set $PROPERTY (pDef , pName ) = $PROPERTY (props , pName )
54- } else {
55- $$$logError(" Unable to set " " " _pName _" " " property of " " " _memberName _" " " in class " _classDef .Name )
56- }
57- set pName = $order (props .%data (pName ))
58- }
59- $$$logError($System .Status .GetErrorText (pDef .%Save ()))
73+ do ..SaveKeywords (memberKind , pDef , props )
6074 }
6175
6276 $$$nextProperty
@@ -118,6 +132,7 @@ ClassMethod Save() As %Status
118132 $$$logError(..SaveClassMember (" Method" , classDef , $PROPERTY (classData , " Methods" )))
119133 $$$logError(..SaveClassMember (" Query" , classDef , $PROPERTY (classData , " Queries" )))
120134 $$$logError(..SaveClassMember (" XData" , classDef , $PROPERTY (classData , " XDatas" )))
135+ $$$logError(..SaveKeywords (" Class" , classDef , classData ))
121136
122137 if ($$$hasErrors) { $$$nextClass }
123138
@@ -139,6 +154,12 @@ ClassMethod Save() As %Status
139154
140155}
141156
157+ ClassMethod Test () As %Status
158+ {
159+ write %request .Content
160+ return $$$OK
161+ }
162+
142163/// This method is a handler that is executed before each request.
143164ClassMethod OnPreDispatch () As %Status
144165{
0 commit comments