function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
narendra jagwannarendra jagwan 

how we solve dis error..?? you have uncommitted work pending. please commit or rollback before calling out

public with sharing class installNewsObjectController {

//get sobject Name
public String sObjectName{get;set;}

// get sobject Label
public String sObjectLabel{get;set;}

//for delete sobject from this Object
public String deleteSelected{get;set;}

private String SOBJECT_FIELD_NAME;
private String SOBJECT_FIELD_LABEL;

private String SELECTED_DELETE;

public MetadataService.AsyncResult result {get;set;}
    public SelectOption[] selectedsobject { get; set; }
    public SelectOption[] allsobject {get; set;}   
   
    public SelectOption[] deletionSobject { get; set; }
    public SelectOption[] existingsobject {get; set;}   
    public String message {get; set;}

// create Field for custom object
public PageReference createField(){
       
        // Create a Custom Field
        MetadataService.CustomField customField = new MetadataService.CustomField();     
        customField.fullName = 'SA_S3_File__c.'+SOBJECT_FIELD_LABEL.replaceAll(' ','')+'__c';       
        customField.label = SOBJECT_FIELD_LABEL;
        system.debug('zzzzzzz'+ customField.label);
        customField.referenceTo = SOBJECT_FIELD_NAME;
        customField.relationshipLabel = (SOBJECT_FIELD_LABEL+'_SA_Files').replaceAll(' ','');
        customField.relationshipName = SOBJECT_FIELD_LABEL.replaceAll(' ','');
        customField.type_x = 'Lookup';         
        result = createService().create(new List<MetadataService.Metadata> { customField })[0];    
         system.debug('@@@@@@@'+result);
        // Display status of the request
        displayStatus();  
        return null;
    }


    //constructor
    public installNewsObjectController() {
       
        //get inintialize
        init();
       
        //check Already existing Object
        alreadySelectedObject();
         
    }
   
    public void init(){    
        
        selectedsobject = new List<SelectOption>();       
         List<Schema.SObjectType> listOfSobject = Schema.getGlobalDescribe().Values();  
         List<SelectOption> options = new List<SelectOption>();
         allsobject = new List<SelectOption>();
         options.add(new SelectOption('','---None---'));
          for(Schema.SObjectType sObj : listOfSobject){
                       
             if( !sObj.getDescribe().isCustomSetting()
                 && (sObj.getDescribe().getName()== 'Account'
                 || sObj.getDescribe().getName() == 'Contact'
                 || sObj.getDescribe().getName()== 'Opportunity'
                 || sObj.getDescribe().isCustom())){               
                allsobject.add(new SelectOption(sObj.getDescribe().getName()+'#'+sObj.getDescribe().getLabel(),sObj.getDescribe().getLabel()));   
               system.debug('<<<<<<<'+allsobject);
             }       
          }
         allsobject.sort();
    }

public PageReference deleteField(){
       
        // Delete a Custom Field
        MetadataService.CustomField customField = new MetadataService.CustomField();
        customField.fullName = 'SA_S3_File__c.'+SELECTED_DELETE.replaceAll(' ','_');
       
                           
        system.debug('&&&&&&&'+customField.fullName );
        result = createService().deleteMetadata(new List<MetadataService.Metadata> { customField })[0]; 
        system.debug('######'+result);   
        list<SA_Upload_Setting__c> setting = [Select id from SA_Upload_Setting__c where Object_Name__c =:'Opportunity'];
        delete setting;
        system.debug('aaaaaaaa'+setting); 
        // Display status of the request
        checkStatus();
        return null;  
    }
   
   
    public PageReference checkStatus(){    
        // Check status of the request
        result = createService().checkStatus(new List<String> { result.Id })[0];
        system.debug('************'+result);
        displayStatus();       
        return null;   
    }
   
    private void displayStatus(){
    
        // Inspect the AsyncResult and display the result
        ApexPages.addMessage(
            new ApexPages.Message(ApexPages.Severity.Info,
                result.done ? 'Request completed' : 'Request in progress...'));
        if(result.state == 'Error')
            ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.Error, result.message));
        if(result.done)
            result = null;
    }
       
    private static MetadataService.MetadataPort createService(){
     
        // Create the Metadata API service stub and authenticate
        MetadataService.MetadataPort service = new MetadataService.MetadataPort();
        service.SessionHeader = new MetadataService.SessionHeader_element();
        service.SessionHeader.sessionId = UserInfo.getSessionId();
        return service;    
    }


   
   
   
    public void alreadySelectedObject(){
    
      SObjectType ObjectType =  Schema.getGlobalDescribe().get('SA_S3_File__c');
      Schema.DescribeSObjectResult R = ObjectType.getDescribe();
   Map<String,Schema.SObjectField> fieldsMap = R.fields.getMap();
  
   deletionSobject = new List<SelectOption>();       
         List<Schema.SObjectType> listOfSobject = Schema.getGlobalDescribe().Values();  
         List<SelectOption> options = new List<SelectOption>();
         existingsobject = new List<SelectOption>();
           
    for(String ObjField : fieldsMap.keySet()){
                
         if((fieldsMap.get(ObjField).getDescribe().isCustom() && String.valueOf(fieldsMap.get(ObjField).getDescribe().getType()) == 'REFERENCE'))
            existingsobject.add(new SelectOption(fieldsMap.get(ObjField).getDescribe().getName(),fieldsMap.get(ObjField).getDescribe().getLabel()));
                   
        }   
    }

    public PageReference createFields() {
       
        message = 'Selected object: ';
        Boolean first = true;
        for ( SelectOption so : selectedsobject ) {
           
            if (!first) {
                message += ', ';
            }
            SOBJECT_FIELD_NAME = so.getValue().split('#')[0].trim();
            SOBJECT_FIELD_LABEL = so.getLabel();
            createField();
            message += so.getLabel() + ' (' + so.getValue() + ')';
            first = false;
        }       
        return null;      
    }
   
      public PageReference deleteFields() {
       
        message = 'Deleted Fields:';
        Boolean first = true;
        for ( SelectOption so : deletionSobject ) {
           
            if (!first) {
                message += ', ';
            }
            SELECTED_DELETE = so.getValue();           
            deleteField();
            message += so.getLabel() + ' (' + so.getValue() + ')'; 
            system.debug('^^^^^^^^^^'+message);
            first = false;
        }       
        return null;      
    }
   
}
Gigi.OchoaGigi.Ochoa
Are you making a web callout?  Are you inserting/updating/deleting a record before your callout?  If so, move it after your callout.

If you need to perform DML before your callout, then perform the callout asynchronously using @future.
Nilesh Jagtap (NJ)Nilesh Jagtap (NJ)
Hi,

It seems like you are calling some webservice and also doing DML like delete in same transaction.
In apex you can not do Callout and DML simultaneously.

You can move your Delete setting code to future method.
You will get more on creating future methods info at  https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_annotation_future.htm for creating (https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_classes_annotation_future.htm)

Thanks,
N.J