分类目录

链接

2018 年 5 月
 123456
78910111213
14151617181920
21222324252627
28293031  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > Salesforce > 正文
salseforce apex调用salesforce soap api
Salesforce 暂无评论 阅读(509)

salseforce apex调用salesforce soap api

我们不断需要从Salesforce沙盒向Salesforce生产环境移动一些配置相关的数据。

终端用户不喜欢使用数据加载程序,需要Salesforce中的一些简单方法来将数据从Salesforce沙盒移动到Salesforce生产环境。

  1. public class API_InsertHolidayRecords {
  2.      
  3.        static string outCallResult;
  4.        static string sessionID;
  5.        static string userName = 'xxxxx@xx.com';  
  6.        static string password = 'xxxxxxx';
  7.              
  8.        static string bodyToSendLogin = '';    
  9.        static string loginURL ='';
  10.     
  11.     
  12.     public static void InsertHoliday(){ 
  13.  
  14.         if(Login()){ 
  15.             
  16.             Map<String, String> fieldsValuesMap = new Map<String, String>();        
  17.             fieldsValuesMap.put('Name', '1 12 2018');    
  18.             fieldsValuesMap.put('Description', 'Weekend');
  19.             fieldsValuesMap.put('ActivityDate', '2018-12-01'); 
  20.             fieldsValuesMap.put('IsAllDay', 'false');
  21.             fieldsValuesMap.put('IsRecurrence', 'false');
  22.             fieldsValuesMap.put('StartTimeInMinutes', '0');//is allday=false
  23.             fieldsValuesMap.put('EndTimeInMinutes', '300');//is allday=false
  24.             
  25.             String result =  Create('Holiday',fieldsValuesMap);
  26.         
  27.             system.debug(result);
  28.         }else{
  29.             system.debug('login error');
  30.         }
  31.     }
  32.     
  33.     private static boolean Login(){        
  34.         bodyToSendLogin ='<?xml version="1.0" encoding="utf-8" ?>';
  35.         bodyToSendLogin+='<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"'; 
  36.         bodyToSendLogin+='    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'; 
  37.         bodyToSendLogin+='    xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">'; 
  38.         bodyToSendLogin+='  <env:Body>'; 
  39.         bodyToSendLogin+='    <n1:login xmlns:n1="urn:partner.soap.sforce.com">'; 
  40.         bodyToSendLogin+='      <n1:username>{0}</n1:username>'; 
  41.         bodyToSendLogin+='      <n1:password>{1}</n1:password>'; 
  42.         bodyToSendLogin+='    </n1:login>'; 
  43.         bodyToSendLogin+='  </env:Body>'; 
  44.         bodyToSendLogin+='</env:Envelope>';
  45.       
  46.         bodyToSendLogin = String.format(bodyToSendLogin, new String[]{userName, password});
  47.         
  48.         if (false){        
  49.              loginURL = 'https://test.salesforce.com/services/Soap/u/39.0';        
  50.         }else{        
  51.              loginURL = 'https://login.salesforce.com/services/Soap/u/39.0';        
  52.         }            
  53.         outCallResult = PostHttpRequest(loginURL,bodyToSendLogin,'');               
  54.         sessionID = getValueFromXMLString(outCallResult, 'sessionId'); 
  55.         if(sessionID !=''){
  56.             return true;            
  57.         }
  58.         return false;
  59.     }
  60.     
  61.     
  62.     private static String Create(String soType, Map<String, String> fieldsMap ) {
  63.         String fieldTemplate = '<{0} xmlns="urn:sobject.partner.soap.sforce.com">{1}</{0}>';
  64.         String sobjectTemplate = '<sObjects><type xmlns="urn:sobject.partner.soap.sforce.com">{0}</type>{1}</sObjects>';
  65.         String scope = '';
  66.         String fieldValues = '';
  67.         for ( String key: fieldsMap.keySet() ) {
  68.             String value = fieldsMap.get( key );
  69.             fieldValues += String.format(fieldTemplate, new String[]{key, value});
  70.         }
  71.         scope += String.format(sobjectTemplate, new String[]{soType, fieldValues});
  72.         
  73.         String serverUrl = getValueFromXMLString(outCallResult, 'serverUrl');
  74.         String sessionId = getValueFromXMLString(outCallResult, 'sessionId');
  75.         
  76.         String template = '<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Header><SessionHeader xmlns="urn:partner.soap.sforce.com"><sessionId>{0}</sessionId></SessionHeader></env:Header><env:Body><create xmlns="urn:partner.soap.sforce.com">{1}</create></env:Body></env:Envelope>';
  77.     
  78.         System.debug(LoggingLevel.ERROR, '@@@ xml request: ' + String.format(template, new String[]{sessionId, scope}) );
  79.         return PostHttpRequest(serverUrl ,String.format(template, new String[]{sessionId, scope}), sessionId );
  80.     }
  81.     
  82.     private static string PostHttpRequest(string endPoint, string soapBody, string sessionID){    
  83.         Http http = new Http();    
  84.         HttpRequest req  = new HttpRequest();    
  85.         req.setTimeout(60000);    
  86.         req.setEndpoint(endPoint);      
  87.         req.setMethod('POST');    
  88.         req.setHeader('SFDC_STACK_DEPTH', '1');    
  89.         req.setHeader('SOAPAction','DoesNotMatter');  
  90.         if(sessionID!=''){
  91.             req.setHeader('Authorization', 'Bearer ' + sessionId );  
  92.         }                    
  93.         //req.setHeader('User-Agent', 'SFDC-Callout/22.0');    
  94.         req.setHeader('Accept','text/xml');      
  95.         req.setHeader('Content-type','text/xml');  
  96.         req.setHeader('charset','UTF-8');         
  97.         req.setBody(soapBody);        
  98.         HttpResponse res  = http.send(req);    
  99.         outCallResult = res.getBody();    
  100.         return outCallResult;    
  101.     }
  102.     
  103.     
  104.     
  105.     private static string getValueFromXMLString(string xmlString, string keyField){    
  106.             string valueFound = '';    
  107.             if(xmlString.contains('<' + keyField + '>') ){
  108.     
  109.                 try{    
  110.                     valueFound = xmlString.substring(xmlString.indexOf('<' + keyField + '>') + keyField.length() + 2, xmlString.indexOf('</' + keyField + '>'));        
  111.                 }catch (exception e){    
  112.                     system.debug('Error in getValueFromXMLString.  Details: ' + e.getMessage() + ' keyfield: ' + keyfield);    
  113.                 }    
  114.             }    
  115.             return valueFound;    
  116.     }
  117.     
  118.  
  119. }

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:salseforce apex调用salesforce soap api | Bruce's Blog

发表评论

留言无头像?