Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public abstract class LightningComponentRecordUtils {
- @AuraEnabled
- public static Response createRecord(String objectType, List<String> fields, List<Object> values){
- Response resp;
- try {
- SObject newRecord = getRecord(objectType, fields, values);
- System.debug('newRecord ' + newRecord);
- insert newRecord;
- resp = new Response('success', 'record saved', newRecord);
- } catch(Exception e){
- System.debug(e.getMessage() + e.getStackTraceString());
- resp = new Response('fail', e.getStackTraceString());
- }
- return resp;
- }
- @AuraEnabled
- public static Response updateRecord(String objectType, String recordId, List<String> fields, List<Object> values){
- Response resp;
- try {
- SObject newRecord = getRecord(objectType, fields, values);
- if (!idIncluded(fields))
- newRecord.put('Id', recordId);
- System.debug('newRecord ' + newRecord);
- update newRecord;
- resp = new Response('success', 'record saved', newRecord);
- } catch(Exception e){
- System.debug(e.getMessage() + e.getStackTraceString());
- resp = new Response('fail', e.getStackTraceString());
- }
- return resp;
- }
- private static boolean idIncluded(List<String> fields){
- return new Set<String>(fields).contains('Id');
- }
- //todo: add field type check
- @AuraEnabled
- public static SObject getRecord(String objectType, List<String> fields, List<Object> values){
- SObject obj = Schema.getGlobalDescribe().get(objectType).newSObject();
- for (Integer i = 0 ; i < fields.size(); i++) {
- if (!String.isBlank(fields[i]) && fieldExists(objectType, fields[i]) && values[i] != null)
- obj.put(fields[i], values[i]);
- }
- return obj;
- }
- @AuraEnabled
- public static Boolean fieldExists(String objectType, String fieldName){
- Set<String> objectFields = Schema.getGlobalDescribe().get(objectType).getDescribe().fields.getMap().keySet();
- return objectFields.contains(fieldName.toLowerCase());
- }
- /* Is used dyanically get fields info, dynamiclaly create inputs
- */
- @AuraEnabled
- public static Response getFieldDescr(String objectType){
- Map<String, FieldDescr> fieldDescr = new Map<String, FieldDescr>();
- SObjectType templType = Schema.getGlobalDescribe().get(objectType);
- Map<String,Schema.SObjectField> mfields = templType.getDescribe().fields.getMap();
- List<String> values;
- for (String fKey : mfields.keySet()){
- Schema.DescribeFieldResult dfr = mfields.get(fKey).getDescribe();
- System.debug(dfr.getName() + ' iscreaeable ' + dfr.isCreateable() + ', is def on create ' + dfr.isDefaultedOnCreate());
- if (dfr.isCreateable() && !dfr.isDefaultedOnCreate())
- fieldDescr.put(fkey, new FieldDescr(dfr.getLabel(), !dfr.isNillable(), String.valueOf(dfr.getType())));
- }
- return new Response('success','', fieldDescr);
- }
- //get record w/ fields, generally for init purposes
- @AuraEnabled
- public static Response getDetailRecord(String objectType, String recordId, List<String> fields){
- Response resp;
- try {
- String query = 'SELECT ' + string.join(fields, ',') + ' FROM ' + objectType + ' WHERE ID=\'' + recordId + '\'';
- Sobject sobj = Database.query(query);
- resp = new Response('success', '', sobj);
- } catch (Exception e){
- System.debug(e.getMessage() + e.getStackTraceString());
- resp = new Response('fail', e.getStackTraceString());
- }
- return resp;
- }
- //todo: make filter criteria not hardcoded
- @AuraEnabled
- public static Response getFilteredRecordList(String objectType, List<String> fields, String filter){
- Response resp;
- try {
- String query = 'SELECT ' + string.join(fields, ',') + ' FROM ' + objectType + (!string.isEmpty(filter) ? ' WHERE ' + filter : '');
- List<Sobject> sobjects = Database.query(query);
- resp = new Response('success', '', sobjects);
- } catch (Exception e){
- System.debug(e.getMessage() + e.getStackTraceString());
- resp = new Response('fail', e.getStackTraceString());
- }
- return resp;
- }
- public class FieldDescr {
- @AuraEnabled
- public String label {get;set;}
- @AuraEnabled
- public Boolean required {get;set;}
- @AuraEnabled
- public String fieldType {get; set;}
- public FieldDescr(String label, Boolean required, String fieldType){
- this.label = label;
- this.required = required;
- this.fieldType = fieldType;
- }
- }
- }
Add Comment
Please, Sign In to add comment