You need to sign in to do that
Don't have an account?
Mitesh Saparia 8
System.QueryException: unexpected token: <EOF>: Trigger.ProductDetail: line 52, column 1
trigger ProductDetail on Design_Selected_Junction__c (After insert) {
if(Trigger.isInsert){
Set<Id> designTemplateSet = new Set<Id>();
Set<Id> oppSet = new Set<Id>();
for(Design_Selected_Junction__c desiSele : trigger.new){
designTemplateSet.add(desiSele.Design_Template__c);
oppSet.add(desiSele.Opportunity__c);
//System.debug('ID --->' +designTemplateSet);
//System.debug('ID --->' +oppSet);
}
// sObject types to describe
Map<String, Schema.SObjectField> fields = Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().fields.getMap();
List<String> listFields = new List<String>();
for(Schema.SObjectField fieldRef : fields.values()){
Schema.DescribeFieldResult parentfieldResult = fieldRef.getDescribe();
if(parentfieldResult.isUpdateable()) {
listFields.add(parentfieldResult.getName());
}
}
String query = '';
query = 'Select Id,' + String.join(listFields,',') + ',';
System.debug('Query --->' +query);
String dynamicQuery = '';
List<String> fieldNames;
Set<String> childString = new Set<String>{
'Handles__r','Prints__r','Linings__r','Closures__r','Inserts__r','Patches__r','Insulation_Padding__r','Tags__r'
};
String childStringQuery = '';
String finalQuery = '';
for(ChildRelationship childRel : Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().getChildRelationships()){
if(childString.contains(childRel.getRelationshipName())){
DescribeSObjectResult describeResult = childRel.getChildSObject().getDescribe();
System.debug('Child Relationship Name --->' +childRel.getRelationshipName());
Map <String, Schema.SObjectField> fieldsMap = describeResult.fields.getMap();
fieldNames = new List<String>();
for(Schema.SObjectField sObjectField : fieldsMap.values()){
Schema.DescribeFieldResult fieldResult = sObjectField.getDescribe(); if(fieldResult.isUpdateable()){
fieldNames.add(fieldResult.getName());
}
dynamicQuery +='(select Id,' + String.join(fieldNames, ',')
+ ' from ' + String.valueOf(childRel.getRelationshipName())+'),';
}
}
}
dynamicQuery = dynamicQuery.removeEnd(',');
childStringQuery += dynamicQuery;
System.debug('Check dynamic ---> '+childStringQuery);
String condition = 'Where Parent_template__c In:designTemplateSet';
query += query + childStringQuery+' FROM Design_Item__c '+ condition;
//String finalQuery = query +','+ dynamicQuery +' from Design_Item__c '+ condition;
System.debug('Check final ---> '+query);
List<Design_Item__c> designRecords = Database.query(finalQuery);
System.debug('Check List ---> '+designRecords);
}
}
if(Trigger.isInsert){
Set<Id> designTemplateSet = new Set<Id>();
Set<Id> oppSet = new Set<Id>();
for(Design_Selected_Junction__c desiSele : trigger.new){
designTemplateSet.add(desiSele.Design_Template__c);
oppSet.add(desiSele.Opportunity__c);
//System.debug('ID --->' +designTemplateSet);
//System.debug('ID --->' +oppSet);
}
// sObject types to describe
Map<String, Schema.SObjectField> fields = Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().fields.getMap();
List<String> listFields = new List<String>();
for(Schema.SObjectField fieldRef : fields.values()){
Schema.DescribeFieldResult parentfieldResult = fieldRef.getDescribe();
if(parentfieldResult.isUpdateable()) {
listFields.add(parentfieldResult.getName());
}
}
String query = '';
query = 'Select Id,' + String.join(listFields,',') + ',';
System.debug('Query --->' +query);
String dynamicQuery = '';
List<String> fieldNames;
Set<String> childString = new Set<String>{
'Handles__r','Prints__r','Linings__r','Closures__r','Inserts__r','Patches__r','Insulation_Padding__r','Tags__r'
};
String childStringQuery = '';
String finalQuery = '';
for(ChildRelationship childRel : Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().getChildRelationships()){
if(childString.contains(childRel.getRelationshipName())){
DescribeSObjectResult describeResult = childRel.getChildSObject().getDescribe();
System.debug('Child Relationship Name --->' +childRel.getRelationshipName());
Map <String, Schema.SObjectField> fieldsMap = describeResult.fields.getMap();
fieldNames = new List<String>();
for(Schema.SObjectField sObjectField : fieldsMap.values()){
Schema.DescribeFieldResult fieldResult = sObjectField.getDescribe(); if(fieldResult.isUpdateable()){
fieldNames.add(fieldResult.getName());
}
dynamicQuery +='(select Id,' + String.join(fieldNames, ',')
+ ' from ' + String.valueOf(childRel.getRelationshipName())+'),';
}
}
}
dynamicQuery = dynamicQuery.removeEnd(',');
childStringQuery += dynamicQuery;
System.debug('Check dynamic ---> '+childStringQuery);
String condition = 'Where Parent_template__c In:designTemplateSet';
query += query + childStringQuery+' FROM Design_Item__c '+ condition;
//String finalQuery = query +','+ dynamicQuery +' from Design_Item__c '+ condition;
System.debug('Check final ---> '+query);
List<Design_Item__c> designRecords = Database.query(finalQuery);
System.debug('Check List ---> '+designRecords);
}
}
Looking through the code I observe one problem which may be the root cause.
On Below line(Line Number 49) :
Replace with : If above will not help then could you provide the final query string from debug log which is executing on below statement :
System.debug('Check final ---> '+query);
This will help us to find the root cause in query.
Thanks
Dheeraj Kumar
1. Don't have to again pass query when you are using += in the line 49. Make the below changes in line 49.
query += childStringQuery+' FROM Design_Item__c '+ condition;
2. You have commented the string finalQuery at line 50 but passing it to line 52. Instead change line 52 to below one
List<Design_Item__c> designRecords = Database.query(query);
Let me know if it works after making these 2 changes.
if(Trigger.isInsert){
Set<Id> designTemplateSet = new Set<Id>();
Set<Id> oppSet = new Set<Id>();
for(Design_Selected_Junction__c desiSele : trigger.new){
designTemplateSet.add(desiSele.Design_Template__c);
oppSet.add(desiSele.Opportunity__c);
//System.debug('ID --->' +designTemplateSet);
//System.debug('ID --->' +oppSet);
}
// sObject types to describe
Map<String, Schema.SObjectField> fields = Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().fields.getMap();
List<String> listFields = new List<String>();
for(Schema.SObjectField fieldRef : fields.values()){
Schema.DescribeFieldResult parentfieldResult = fieldRef.getDescribe();
if(parentfieldResult.isUpdateable()) {
listFields.add(parentfieldResult.getName());
}
}
String query = '';
query = 'Select Id,' + String.join(listFields,',') + ',';
System.debug('Query --->' +query);
String dynamicQuery = '';
List<String> fieldNames;
Set<String> childString = new Set<String>{
'Handles__r','Prints__r','Linings__r','Closures__r','Inserts__r','Patches__r','Insulation_Padding__r','Tags__r'
};
for(ChildRelationship childRel : Schema.getGlobalDescribe().get('Design_Item__c').getDescribe().getChildRelationships()){
if(childString.contains(childRel.getRelationshipName())){
DescribeSObjectResult describeResult = childRel.getChildSObject().getDescribe();
System.debug('Child Relationship Name --->' +childRel.getRelationshipName());
Map <String, Schema.SObjectField> fieldsMap = describeResult.fields.getMap();
fieldNames = new List<String>();
for(Schema.SObjectField sObjectField : fieldsMap.values()){
Schema.DescribeFieldResult fieldResult = sObjectField.getDescribe();
if(fieldResult.isUpdateable()){
fieldNames.add(fieldResult.getName());
}
dynamicQuery +='(select Id,' + String.join(fieldNames, ',')
+ ' from ' + String.valueOf(childRel.getRelationshipName())+'),';
}
}
}
dynamicQuery = dynamicQuery.removeEnd(',');
query += dynamicQuery;
System.debug('Check dynamic ---> '+query);
String condition = 'Where Parent_template__c In : designTemplateSet';
//query = query +' FROM Design_Item__c '+ condition;
String finalQuery = query +' from Design_Item__c '+ condition;
System.debug('Check final ---> '+finalQuery);
List<Design_Item__c> designRecords = Database.query(finalQuery);
System.debug('Check List ---> '+designRecords);
}
}
Try to replace the code with below code :
So the problem is for each field for child object adding the query in the inner query. Below code was in loop which needs to be out of loop of fieldMap.
Hit Kudos if this solve you problem and if this is what you are looking for then please mark it as a solution.
Thanks
Dheeraj Kumar