Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 15 additions & 30 deletions src/classes/ngForceController.cls
Original file line number Diff line number Diff line change
Expand Up @@ -54,48 +54,33 @@ global class ngForceController {
@remoteAction
public static String bulkCreate(String objtype, String fields) {
Schema.SObjectType targetType = Schema.getGlobalDescribe().get(objtype);
Map<String, Schema.sObjectField> targetFields = targetType.getDescribe().fields.getMap();
if (targetType == null) {
return '[{"message":"The requested resource does not exist","errorCode":"NOT_FOUND"}]';
return makeError('The requested resource does not exist', 'NOT_FOUND');
}

Map<String, Schema.sObjectField> targetFields = targetType.getDescribe().fields.getMap();

List<sObject> objs = new List<sObject>();

Map<String, Object> incomingFieldJsonObject = null;
try {
incomingFieldJsonObject = (Map<String, Object>)JSON.deserializeUntyped(fields);
} catch (JSONException je) {
return '[{"message":"'+je.getMessage()+'","errorCode":"JSON_PARSER_ERROR"}]';
return makeError('Unable to deserialize the fields object', 'INVALID_JSON');
}

try {
for(String row : incomingFieldJsonObject.keySet()){
Map<String,Object> current = (Map<String,Object>) incomingFieldJsonObject.get(row);
SObject obj = targetType.newSObject();
for(String property : current.keySet()) {
if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Date) {
obj.put(property, Date.valueOf((String)current.get(property)));
} else if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.DateTime) {
obj.put(property, DateTime.valueOfGmt((String)current.get(property)));
} else if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Percent ||
targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Currency) {
obj.put(property, String.valueOf(current.get(property)) == '' ? null : Decimal.valueOf((String)current.get(property)));
} else if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Double) {
obj.put(property, String.valueOf(current.get(property)) == '' ? null : Double.valueOf(current.get(property)));
} else if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Integer) {
obj.put(property, Integer.valueOf(current.get(property)));
} else if (targetFields.get(property).getDescribe().getType() == Schema.DisplayType.Boolean) {
obj.put(property, Boolean.valueOf((String) current.get(property)));
} else {
obj.put(property, current.get(property));
}
}
objs.add(obj);
for(String row: incomingFieldJsonObject.keySet()){
Map<String,Object> current = (Map<String,Object>) incomingFieldJsonObject.get(row);
String currentAsJson = JSON.serialize(current);
SObject obj = targetType.newSObject();
String error = writeFields(objtype, obj, currentAsJson);
if(error != null){
return error;
}
} catch (SObjectException soe) {
return '[{"message":"'+soe.getMessage()+'","errorCode":"INVALID_FIELD"}]';

objs.add(obj);
}

try {
insert objs;
} catch (DMLException dmle) {
Expand All @@ -108,7 +93,7 @@ global class ngForceController {
}
return '[{"fields":['+fieldNames+'],"message":"'+dmle.getDmlMessage(0)+'","errorCode":"'+dmle.getDmlType(0).name()+'"}]';
}

List<Id> rids = new List<Id>();
for(sObject o : objs) {
rids.add(o.Id);
Expand Down
9 changes: 9 additions & 0 deletions src/classes/ngForceController_TEST.cls
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,15 @@ public class ngForceController_TEST{
System.assertNotEquals(null, result);
}

static testMethod void testBulkCreate(){
Map<Integer,Account> js = new Map<Integer,Account>();
String fields = '{"0":{"Name":"foo company 1368751413359"},"1":{"Name":"foo company 1368751413440"},"2":{"Name":"foo company 1368751413459"},"3":{"Name":"foo company 1368751413479"},"4":{"Name":"foo company 1368751413497"},"5":{"Name":"foo company 1368751413517"},"6":{"Name":"foo company 1368751413540"},"7":{"Name":"foo company 1368751413559"},"8":{"Name":"foo company 1368751413577"},"9":{"Name":"foo company 1368751413597"}}';
String jsonResult = ngForceController.bulkCreate('Account', fields);
Map<String, Object> result = (Map<String, Object>)JSON.deserializeUntyped(jsonResult);
System.AssertNotEquals(result.get('id'), null);
System.AssertEquals(result.get('success'), true);
}

static testMethod void testCRUD() {
String accName = 'Test1';
String accNumber = '1234';
Expand Down