25
25
*/
26
26
27
27
public class RemoteTKController {
28
+ private static String makeError (String message , String errorCode ) {
29
+ JSONGenerator gen = JSON .createGenerator (false );
30
+ gen .writeStartArray ();
31
+ gen .writeStartObject ();
32
+ gen .writeStringField (' message' , message );
33
+ gen .writeStringField (' errorCode' , errorCode );
34
+ gen .writeEndObject ();
35
+ gen .writeEndArray ();
36
+
37
+ return gen .getAsString ();
38
+ }
39
+
28
40
@remoteAction
29
41
public static String describe (String objtype ) {
30
42
// Just enough to make the sample app work!
31
43
Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
32
44
if (targetType == null ) {
33
- return ' [{"message":" The requested resource does not exist","errorCode":" NOT_FOUND"}] ' ;
45
+ return makeError ( ' The requested resource does not exist' , ' NOT_FOUND' ) ;
34
46
}
35
47
36
48
Schema .DescribeSObjectResult sobjResult = targetType .getDescribe ();
@@ -65,9 +77,8 @@ public class RemoteTKController {
65
77
@remoteAction
66
78
public static String create (String objtype , String fields ) {
67
79
Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
68
- Map <String , Schema .sObjectField > targetFields = targetType .getDescribe ().fields .getMap ();
69
80
if (targetType == null ) {
70
- return ' [{"message":" The requested resource does not exist","errorCode":" NOT_FOUND"}] ' ;
81
+ return makeError ( ' The requested resource does not exist' , ' NOT_FOUND' ) ;
71
82
}
72
83
73
84
SObject obj = targetType .newSObject ();
@@ -76,11 +87,17 @@ public class RemoteTKController {
76
87
try {
77
88
fieldMap = (Map <String , Object >)JSON .deserializeUntyped (fields );
78
89
} catch (JSONException je ) {
79
- return ' [{"message":" ' + je .getMessage ()+ ' ","errorCode":" JSON_PARSER_ERROR"}] ' ;
90
+ return makeError ( je .getMessage (), ' JSON_PARSER_ERROR' ) ;
80
91
}
81
92
93
+ Map <String , Schema .sObjectField > targetFields = targetType .getDescribe ().fields .getMap ();
94
+
82
95
try {
83
96
for (String key : fieldMap .keySet ()) {
97
+ if (targetFields .get (key ) == null ) {
98
+ return ' [{"message":"Field ' + key + ' does not exist on object type ' + objtype + ' ","errorCode":"INVALID_FIELD"}]' ;
99
+ }
100
+
84
101
if (targetFields .get (key ).getDescribe ().getType () == Schema .DisplayType .Date ) {
85
102
obj .put (key , Date .valueOf ((String )fieldMap .get (key )));
86
103
} else if (targetFields .get (key ).getDescribe ().getType () == Schema .DisplayType .Percent ||
@@ -95,7 +112,7 @@ public class RemoteTKController {
95
112
}
96
113
}
97
114
} catch (SObjectException soe ) {
98
- return ' [{"message":" ' + soe .getMessage ()+ ' ","errorCode":" INVALID_FIELD"}] ' ;
115
+ return makeError ( soe .getMessage (), ' INVALID_FIELD' ) ;
99
116
}
100
117
101
118
try {
@@ -139,7 +156,7 @@ public class RemoteTKController {
139
156
try {
140
157
records = Database .query (soql );
141
158
} catch (QueryException qe ) {
142
- return ' [{"message":" ' + qe .getMessage ()+ ' ","errorCode":" INVALID_QUERY"}] ' ;
159
+ return makeError ( qe .getMessage (), ' INVALID_QUERY' ) ;
143
160
}
144
161
145
162
return JSON .serialize (records [0 ]);
@@ -148,14 +165,21 @@ public class RemoteTKController {
148
165
@remoteAction
149
166
public static String upser (String objtype , String externalIdField , String externalId , String fields ) {
150
167
Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
168
+ if (targetType == null ) {
169
+ return makeError (' The requested resource does not exist' , ' NOT_FOUND' );
170
+ }
151
171
152
172
SObject obj = targetType .newSObject ();
153
173
obj .put (externalIdField , externalId );
154
174
155
175
Map <String , Object > fieldMap =
156
176
(Map <String , Object >)JSON .deserializeUntyped (fields );
157
- for (String key : fieldMap .keySet ()) {
158
- obj .put (key , fieldMap .get (key ));
177
+ try {
178
+ for (String key : fieldMap .keySet ()) {
179
+ obj .put (key , fieldMap .get (key ));
180
+ }
181
+ } catch (SObjectException soe ) {
182
+ return makeError (soe .getMessage (), ' INVALID_FIELD' );
159
183
}
160
184
161
185
Schema .SObjectField sobjField = targetType .getDescribe ().fields .getMap ().get (externalIdField );
@@ -169,7 +193,7 @@ public class RemoteTKController {
169
193
public static String updat (String objtype , String id , String fields ) {
170
194
Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
171
195
if (targetType == null ) {
172
- return ' [{"message":" The requested resource does not exist","errorCode":" NOT_FOUND"}] ' ;
196
+ return makeError ( ' The requested resource does not exist' , ' NOT_FOUND' ) ;
173
197
}
174
198
175
199
SObject obj = targetType .newSObject (id );
@@ -178,15 +202,15 @@ public class RemoteTKController {
178
202
try {
179
203
fieldMap = (Map <String , Object >)JSON .deserializeUntyped (fields );
180
204
} catch (JSONException je ) {
181
- return ' [{"message":" ' + je .getMessage ()+ ' ","errorCode":" JSON_PARSER_ERROR"}] ' ;
205
+ return makeError ( je .getMessage (), ' JSON_PARSER_ERROR' ) ;
182
206
}
183
207
184
208
try {
185
209
for (String key : fieldMap .keySet ()) {
186
210
obj .put (key , fieldMap .get (key ));
187
211
}
188
212
} catch (SObjectException soe ) {
189
- return ' [{"message":" ' + soe .getMessage ()+ ' ","errorCode":" INVALID_FIELD"}] ' ;
213
+ return makeError ( soe .getMessage (), ' INVALID_FIELD' ) ;
190
214
}
191
215
192
216
try {
@@ -209,7 +233,7 @@ public class RemoteTKController {
209
233
public static String del (String objtype , String id ) {
210
234
Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
211
235
if (targetType == null ) {
212
- return ' [{"message":" The requested resource does not exist","errorCode":" NOT_FOUND"}] ' ;
236
+ return makeError ( ' The requested resource does not exist' , ' NOT_FOUND' ) ;
213
237
}
214
238
215
239
SObject obj = targetType .newSObject (id );
@@ -236,7 +260,7 @@ public class RemoteTKController {
236
260
try {
237
261
records = Database .query (soql );
238
262
} catch (QueryException qe ) {
239
- return ' [{"message":" ' + qe .getMessage ()+ ' ","errorCode":" INVALID_QUERY"}] ' ;
263
+ return makeError ( qe .getMessage (), ' INVALID_QUERY' ) ;
240
264
}
241
265
242
266
Map <String , Object > result = new Map <String , Object >();
@@ -252,8 +276,10 @@ public class RemoteTKController {
252
276
List <List <SObject >> result ;
253
277
try {
254
278
result = Search .query (sosl );
279
+ } catch (QueryException qe ) {
280
+ return makeError (qe .getMessage (), ' INVALID_SEARCH' );
255
281
} catch (SearchException se ) {
256
- return ' [{"message":" ' + se .getMessage ()+ ' ","errorCode":" INVALID_SEARCH"}] ' ;
282
+ return makeError ( se .getMessage (), ' INVALID_SEARCH' ) ;
257
283
}
258
284
259
285
return JSON .serialize (result );
0 commit comments