2525 */
2626
2727public 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+
2840 @remoteAction
2941 public static String describe (String objtype ) {
3042 // Just enough to make the sample app work!
3143 Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
3244 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' ) ;
3446 }
3547
3648 Schema .DescribeSObjectResult sobjResult = targetType .getDescribe ();
@@ -65,9 +77,8 @@ public class RemoteTKController {
6577 @remoteAction
6678 public static String create (String objtype , String fields ) {
6779 Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
68- Map <String , Schema .sObjectField > targetFields = targetType .getDescribe ().fields .getMap ();
6980 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' ) ;
7182 }
7283
7384 SObject obj = targetType .newSObject ();
@@ -76,11 +87,17 @@ public class RemoteTKController {
7687 try {
7788 fieldMap = (Map <String , Object >)JSON .deserializeUntyped (fields );
7889 } catch (JSONException je ) {
79- return ' [{"message":" ' + je .getMessage ()+ ' ","errorCode":" JSON_PARSER_ERROR"}] ' ;
90+ return makeError ( je .getMessage (), ' JSON_PARSER_ERROR' ) ;
8091 }
8192
93+ Map <String , Schema .sObjectField > targetFields = targetType .getDescribe ().fields .getMap ();
94+
8295 try {
8396 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+
84101 if (targetFields .get (key ).getDescribe ().getType () == Schema .DisplayType .Date ) {
85102 obj .put (key , Date .valueOf ((String )fieldMap .get (key )));
86103 } else if (targetFields .get (key ).getDescribe ().getType () == Schema .DisplayType .Percent ||
@@ -95,7 +112,7 @@ public class RemoteTKController {
95112 }
96113 }
97114 } catch (SObjectException soe ) {
98- return ' [{"message":" ' + soe .getMessage ()+ ' ","errorCode":" INVALID_FIELD"}] ' ;
115+ return makeError ( soe .getMessage (), ' INVALID_FIELD' ) ;
99116 }
100117
101118 try {
@@ -139,7 +156,7 @@ public class RemoteTKController {
139156 try {
140157 records = Database .query (soql );
141158 } catch (QueryException qe ) {
142- return ' [{"message":" ' + qe .getMessage ()+ ' ","errorCode":" INVALID_QUERY"}] ' ;
159+ return makeError ( qe .getMessage (), ' INVALID_QUERY' ) ;
143160 }
144161
145162 return JSON .serialize (records [0 ]);
@@ -148,14 +165,21 @@ public class RemoteTKController {
148165 @remoteAction
149166 public static String upser (String objtype , String externalIdField , String externalId , String fields ) {
150167 Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
168+ if (targetType == null ) {
169+ return makeError (' The requested resource does not exist' , ' NOT_FOUND' );
170+ }
151171
152172 SObject obj = targetType .newSObject ();
153173 obj .put (externalIdField , externalId );
154174
155175 Map <String , Object > fieldMap =
156176 (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' );
159183 }
160184
161185 Schema .SObjectField sobjField = targetType .getDescribe ().fields .getMap ().get (externalIdField );
@@ -169,7 +193,7 @@ public class RemoteTKController {
169193 public static String updat (String objtype , String id , String fields ) {
170194 Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
171195 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' ) ;
173197 }
174198
175199 SObject obj = targetType .newSObject (id );
@@ -178,15 +202,15 @@ public class RemoteTKController {
178202 try {
179203 fieldMap = (Map <String , Object >)JSON .deserializeUntyped (fields );
180204 } catch (JSONException je ) {
181- return ' [{"message":" ' + je .getMessage ()+ ' ","errorCode":" JSON_PARSER_ERROR"}] ' ;
205+ return makeError ( je .getMessage (), ' JSON_PARSER_ERROR' ) ;
182206 }
183207
184208 try {
185209 for (String key : fieldMap .keySet ()) {
186210 obj .put (key , fieldMap .get (key ));
187211 }
188212 } catch (SObjectException soe ) {
189- return ' [{"message":" ' + soe .getMessage ()+ ' ","errorCode":" INVALID_FIELD"}] ' ;
213+ return makeError ( soe .getMessage (), ' INVALID_FIELD' ) ;
190214 }
191215
192216 try {
@@ -209,7 +233,7 @@ public class RemoteTKController {
209233 public static String del (String objtype , String id ) {
210234 Schema .SObjectType targetType = Schema .getGlobalDescribe ().get (objtype );
211235 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' ) ;
213237 }
214238
215239 SObject obj = targetType .newSObject (id );
@@ -236,7 +260,7 @@ public class RemoteTKController {
236260 try {
237261 records = Database .query (soql );
238262 } catch (QueryException qe ) {
239- return ' [{"message":" ' + qe .getMessage ()+ ' ","errorCode":" INVALID_QUERY"}] ' ;
263+ return makeError ( qe .getMessage (), ' INVALID_QUERY' ) ;
240264 }
241265
242266 Map <String , Object > result = new Map <String , Object >();
@@ -252,8 +276,10 @@ public class RemoteTKController {
252276 List <List <SObject >> result ;
253277 try {
254278 result = Search .query (sosl );
279+ } catch (QueryException qe ) {
280+ return makeError (qe .getMessage (), ' INVALID_SEARCH' );
255281 } catch (SearchException se ) {
256- return ' [{"message":" ' + se .getMessage ()+ ' ","errorCode":" INVALID_SEARCH"}] ' ;
282+ return makeError ( se .getMessage (), ' INVALID_SEARCH' ) ;
257283 }
258284
259285 return JSON .serialize (result );
0 commit comments