/* Questions? Comments? rcarlberg@modelmetrics.com or http://Twitter.com/ReidCarlberg Contains Data Provider Org Code * DataProviderRequest (Apex) Data Consumer Org Code * DataConsumer (Apex) * OrgToOrgView (Visuaforce) * OrgToOrgViewController (Apex) Note if you're installing this in your org * use at your own risk * this one file contains code that should be split into four files * ideas on how to make it better? I'd love to hear them */ global class DataProviderRequest { webservice static List queryRecord(String objectname, String query) { Map m = Schema.getGlobalDescribe(); Schema.SObjectType d = m.get(objectName); Sobject a = d.newSObject(); List sobs = Database.query(query); List values = new List(); for(Sobject s : sobs) { for (Schema.SObjectField f : d.getDescribe().fields.getMap().values()) { try { Schema.DescribeFieldResult check = f.getDescribe(); values.add(check.getName() + ':' + s.get(f)); } catch (System.SObjectException x) { // Do nothing - just means that the field was not selected in the select list } } values.add('OBJECT END' + ':' + 'OBJECTEND'); } return values; } webservice static Boolean updateRecord(String id, String objectname, List newinstancedata) { SObject currentvalinstance = Database.query('select Id from ' + objectname + ' where Id = \'' + id + '\''); for(String pairval : newinstancedata) { String[] line = pairval.trim().split(':'); if(line.size() == 2) { currentvalinstance.put(line[0], line[1]); } } Database.SaveResult result = Database.update(currentvalinstance); return result.isSuccess(); } } public class DataConsumer { //@future(callout=true) public static List getSobjectData(String objectname, String query) { soapSforceComSchemasClassDataProvider.DataProviderRequest dat = new soapSforceComSchemasClassDataProvider.DataProviderRequest(); Map header = new Map(); soapSforceComSchemasClassDataProvider.SessionHeader_element sh = new soapSforceComSchemasClassDataProvider.SessionHeader_element(); sh.sessionId= DataConsumer.getSessionId(); dat.SessionHeader=sh; List fromquery = dat.queryRecord(objectname, query); Map m = Schema.getGlobalDescribe(); Schema.SObjectType d = m.get(objectname); Sobject value = d.newSObject(); List allObjects = new List(); IdInstanceObject readObject = new IdInstanceObject(); Integer fieldamount = 0; for(String stringcheck : fromquery) { String[] line = stringcheck.trim().split(':'); if(line[0] == 'OBJECT END') { break; } fieldamount++; } fieldamount++;//object end compensate System.debug('****CHECK******: ' + fieldamount); System.debug('****CHECK2******: ' + fromquery.size()); Integer amountofrecords = fromquery.size()/fieldamount; Integer otherlimit = fieldamount; Integer start = 0; for(; start < fromquery.size(); start += fieldamount) { for(Integer i=start; i < fieldamount+start; i++) { String[] line = fromquery[i].trim().split(':'); if(line[0] == 'Id') { readObject = new IdInstanceObject(); readObject.setId(line[1]); } else if(line[0] == 'OBJECT END') { readObject.setSobject(value); allObjects.add(readObject); readObject = new IdInstanceObject(); value = d.newSObject(); } else if (line[0] != 'Id' && line[0] != 'OBJECT END') { value.put(line[0], line[1]); } System.debug(line[0]); } } return allObjects; } public static Boolean updateSobjectData(String id, String objectname, SObject instance) { soapSforceComSchemasClassDataProvider.DataProviderRequest dat = new soapSforceComSchemasClassDataProvider.DataProviderRequest(); Map header = new Map(); soapSforceComSchemasClassDataProvider.SessionHeader_element sh = new soapSforceComSchemasClassDataProvider.SessionHeader_element(); sh.sessionId= DataConsumer.getSessionId(); dat.SessionHeader=sh; List sobjectdata = new List(); Map m = Schema.getGlobalDescribe(); Schema.SObjectType d = m.get(objectName); for (Schema.SObjectField f : d.getDescribe().fields.getMap().values()) { try { if(instance.get(f) != null) { Schema.DescribeFieldResult check = f.getDescribe(); sobjectdata.add(check.getName() + ':' + instance.get(f)); } } catch (System.SObjectException x) { // Do nothing - just means that the field was not selected in the select lis } } Boolean result = dat.updateRecord(id, objectname, sobjectdata); System.debug(result); return result; } public static String getSessionId() { Http h = new Http(); HttpRequest req = new HttpRequest(); HttpResponse res = new HttpResponse(); req.setMethod('POST'); req.setEndPoint('https://www.salesforce.com/services/Soap/u/14.0'); req.setHeader('Content-type','text/xml'); req.setHeader('SoapAction',''); //hey look your username and password should go here req.setBody('[username][secret]'); res = h.send(req); String auth = res.getBody(); String sessionId = auth.substring(auth.indexOf('')+11, auth.indexOf('')); return sessionId; } }
Please Input Your Query:
Please Input Your Object Name:

Please Input The Id:
Please Input Your Object Name:
Please Input The Field Name:
Please Input Your Field Value:
public class OrgtoOrgViewController { public List values = new List(); public List readObjects = new List(); public String query; public String objectname; public List getvalues() { return values; } public String getObjectName() { return objectname; } public void setObjectName(String oname) { objectname = oname; } public String getquery() { return query; } public void setQuery(String q) { query = q; } public void calloutput() { if(query != null && objectname != null) { if(values.size() > 0) { values.clear(); } try { readObjects = DataConsumer.getSobjectData(objectname, query); for(IdInstanceObject readObject : readObjects) { Sobject temp = readObject.getSObject(); Map m = Schema.getGlobalDescribe(); Schema.SObjectType d = m.get(objectname); ApexObject instance; instance = new ApexObject('Id', readObject.getId()); values.add(instance); for (Schema.SObjectField f : d.getDescribe().fields.getMap().values()) { if (f.getDescribe().getType() != DisplayType.ID) { try { if(temp.get(f) != null) { Schema.DescribeFieldResult check = f.getDescribe(); instance = new ApexObject(check.getLabel(), (String)temp.get(f)); values.add(instance); } } catch (System.SObjectException x) { // Do nothing - just means that the field was not selected in the select list } } } } } catch(Exception e) { ApexPages.addMessages(e); return; } } } public Boolean updateresult = false; public String theid; public String fieldname; public String fieldvalue; public String updateobject; public String getTheId() { return theid; } public void setTheId(String id) { theid = id; } public String getFieldName() { return fieldname; } public void setFieldName(String fname) { fieldname = fname; } public String getFieldValue() { return fieldvalue; } public void setFieldValue(String fvalue) { fieldvalue = fvalue; } public String getUpdateObject() { return updateobject; } public void setUpdateObject(String obj) { updateobject = obj; } public Boolean getUpdateResult() { return updateresult; } public class CustomException extends Exception {} public void runupdate() { try { if(theid != null && fieldname != null && fieldvalue != null && updateobject != null) { Map m = Schema.getGlobalDescribe(); Schema.SObjectType d = m.get(objectname); Sobject value = d.newSObject(); value.put(fieldname, fieldvalue); updateresult = DataConsumer.updateSobjectData(theid, updateobject, value); } else { throw new CustomException('Please Input all values'); } } catch(Exception e) { ApexPages.addMessages(e); return; } } }