You need to sign in to do that
Don't have an account?
narendra 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;
}
}
//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;
}
}
If you need to perform DML before your callout, then perform the callout asynchronously using @future.
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