So requirements are as follows. I need to parse out this information from a JSON string and insert some detail records after the parents creation. I have the following -
Can anyone tell me what im doing wrong here? The detail records aren't inserting on the insert. The trigger is after insert.
public static void consumeObject(JSONParser parser) {
Integer depth = 0;
do {
JSONToken curr = parser.getCurrentToken();
if (curr == JSONToken.START_OBJECT ||
curr == JSONToken.START_ARRAY) {
depth++;
} else if (curr == JSONToken.END_OBJECT ||
curr == JSONToken.END_ARRAY) {
depth--;
}
} while (depth > 0 && parser.nextToken() != null);
}
public String EntryType {get;set;}
public String ItemQuantity {get;set;}
public String ItemUnit {get;set;}
public String ItemCost {get;set;}
public String ItemDescription {get;set;}
public String ItemPercentComplete {get;set;}
public Class JsonTrigger {
public JsonTrigger(JSONParser parser) {
while (parser.nextToken() != JSONToken.END_OBJECT) {
if (parser.getCurrentToken() == JSONToken.FIELD_NAME) {
String text = parser.getText();
if (parser.nextToken() != JSONToken.VALUE_NULL) {
if (text == 'DARS__Entry_Type__c') {
EntryType = parser.getText();
} else if (text == 'DARS__Item_Quantity__c') {
ItemQuantity = parser.getText();
} else if (text == 'DARS__Item_Unit__c') {
ItemUnit = parser.getText();
} else if (text == 'DARS__Item_Cost__c') {
ItemCost = parser.getText();
} else if (text == 'DARS__Item_Description__c') {
ItemDescription = parser.getText();
} else if (text == 'DARS__Item_Percent_Completed__c') {
ItemPercentComplete = parser.getText();
} else {
System.debug(LoggingLevel.WARN, 'Root consuming unrecognized property: '+text);
consumeObject(parser);
}
}
}
}
}
}
public static Mobile_Details_Trigger_Handler parse(String json) {
DSRDetails = [select
id,
name,
Item_Description__c,
Item_Unit__c,
Item_Currency__c,
Item_Cost__c,
Item_Quantity__c,
Item_Percent_Completed__c
from DDIR_Detail__c
where Entry_Type__c = 'Emergency Repair' and DDIR_Detail__c = :ApexPages.currentPage().getParameters().get('iID')
];
SObject record = trigger.new[0];
Map<String, Object> data = (Map<String, Object>)JSON.deserializeUntyped(record.get('JSON_Data__c'));
DSRDetails.name = 'test';
DSRDetails.Item_Description__c = EntryType;
DSRDetails.Item_Unit__c = ItemUnit;
DSRDetails.Item_Percent_Completed__c = decimal.valueOf(ItemPercentComplete);
DSRDetails.Item_Quantity__c = decimal.valueOf(ItemQuantity);
insert DSRDetails;
return new Mobile_Details_Trigger_Handler(System.JSON.createParser(json));
}