通过代理推送数据到Salesforce
2016-06-02 14:12
218 查看
package com.util.soap; import java.net.Authenticator; import java.net.Proxy; import java.net.Proxy.Type; import java.net.Socket; import java.net.SocketAddress; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sforce.soap.enterprise.EnterpriseConnection; import com.sforce.soap.enterprise.SaveResult; import com.sforce.soap.enterprise.sobject.Campaign; import com.sforce.soap.enterprise.sobject.CampaignMember; import com.sforce.soap.enterprise.sobject.Lead; import com.sforce.soap.enterprise.sobject.Product_Interests__c; import com.sforce.ws.ConnectionException; import com.sforce.ws.ConnectorConfig; import com.util.GetProperties; /** * 2015-11-16 * Salesforce的逻辑是先要有一条Lead,建立以后返回Id, 然后创建Campaign,返回Campaign Id, * 如果这个Lead下面有多个Campaign的话就要创建多条。 后用Campaign Member做关联 Lead l1; Campaign c1; * @author long * */ public class SoapConnectionDemo { private static final Logger log = LoggerFactory.getLogger(SoapConnectionDemo.class); /** * 创建连接 * @return */ public static EnterpriseConnection getConnection(){ EnterpriseConnection connection = null; try { //在发起Http请求之前设置一下属性 String host = GetProperties.getText("proxy.host"); int port= Integer.parseInt(GetProperties.getText("proxy.port")); String user = GetProperties.getText("proxy.user"); String password = GetProperties.getText("proxy.password"); String authEndPoint_release = GetProperties.getText("sfdc.release.authEndPoint"); String username_release = GetProperties.getText("sfdc.release.username"); String password_release = GetProperties.getText("sfdc.release.password"); ConnectorConfig config = new ConnectorConfig(); //System.out.println("========TOMCAT=代理环境==BEGIN=========="); Authenticator.setDefault(new BasicAuthenticator(user, password)); Socket socket = new Socket(host, port); SocketAddress sd = socket.getRemoteSocketAddress(); Proxy proxy = new Proxy(Type.HTTP, sd); config.setProxy(proxy); //System.out.println("=========TOMCAT=代理环境==END============="); //=========TOMCAT=代理环境==END============= config.setUsername(username_release); config.setPassword(password_release); config.setAuthEndpoint(authEndPoint_release); //System.out.println("===========proxy====="+config); // 新建连接 connection = new EnterpriseConnection(config); //System.out.println("===========conn==end==="); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); log.error(e.getMessage()); //System.out.println("===========conn===ex=="+e.getMessage()); } return connection; } /** * 创建活动关联 */ public static Map<String,String> createCampaignMember(String camId, String leadId) { Map<String,String> map = new HashMap<String,String>(); try { // 新建Salesforce中要插入的对象 CampaignMember cam = new CampaignMember(); cam.setCampaignId(camId); cam.setLeadId(leadId); // 可以批量插入数据,一次最多两百条。 CampaignMember[] camps = new CampaignMember[1]; camps[0] = cam; SaveResult[] saveResults = getConnection().create(camps); // 可以返回成功,失败,和新插入的记录Id等信息。 if(saveResults[0].getSuccess()){ map.put("campaignMember", saveResults[0].getId()); }else{ map.put("campaignMember","false"); map.put("errorMessage",saveResults[0].getErrors()[0].getMessage()); System.err.println("createCampaignMember Error :"+saveResults[0].getErrors()[0].getMessage()); } } catch (ConnectionException e) { map.put("campaignMember","false"); map.put("errorMessage",e.getMessage()); // TODO Auto-generated catch block e.printStackTrace(); log.error(e.getMessage()); } return map; } /** * 创建多个产品 * 需要赋值 Lead__c 、 Product__c 、 Quantity__c 、 Unit_Price__c 、CurrencyIsoCode * LeadId,产品的数量,价格,和币种 */ public static Map<String,String> createProduct(Object[] obj){ Map<String,String> map = new HashMap<String,String>(); try { if(obj!=null){ Product_Interests__c [] interests = new Product_Interests__c[obj.length]; for(int i=0;i<obj.length;i++){ interests[i]=(Product_Interests__c)obj[i]; } SaveResult[] saveResults = getConnection().create(interests); // 可以返回成功,失败,和新插入的记录Id等信息。 if (saveResults[0].getSuccess()) { map.put("productId", saveResults[0].getId()); }else{ //创建失败 map.put("productId", "false"); map.put("errorMessage", saveResults[0].getErrors()[0].getMessage()); System.err.println("createProduct Error :"+saveResults[0].getErrors()[0].getMessage()); } } } catch (Exception e) { map.put("productId", "false"); map.put("errorMessage",e.getMessage()); // TODO Auto-generated catch block e.printStackTrace(); log.error(e.getMessage()); } return map; } /** * 创建活动 2015-11-15 * @return camId */ public static Map<String,String> createCampaign(Object[] obj) { Map<String,String> map = new HashMap<String,String>(); try { // 新建Salesforce中要插入的对象 Campaign[] camps = new Campaign[obj.length]; for(int i=0;i<obj.length&&obj.length<200;i++){ camps[i]=(Campaign)obj[i]; } SaveResult[] saveResults = getConnection().create(camps); // 可以返回成功,失败,和新插入的记录Id等信息。 if (saveResults[0].getSuccess()) { map.put("camId", saveResults[0].getId()); }else{ //创建失败 map.put("camId", "false"); map.put("errorMessage", saveResults[0].getErrors()[0].getMessage()); System.err.println("createCampaign Error :"+saveResults[0].getErrors()[0].getMessage()); } } catch (ConnectionException e) { map.put("camId", "false"); map.put("errorMessage",e.getMessage()); // TODO Auto-generated catch block e.printStackTrace(); log.error(e.getMessage()); } return map; } /** * 创建Lead * return leadId */ public static Map<String,String> createLead(Object[] obj) { Map<String,String> map = new HashMap<String,String>(); try { // 新建Salesforce中要插入的对象 // 可以批量插入数据,一次最多两百条。 // int count = 200; Lead[] leads = new Lead[obj.length]; for(int i=0;i<obj.length&&obj.length<200;i++){ leads[i]=(Lead)obj[i]; } SaveResult[] saveResults = getConnection().create(leads); // 可以返回成功,失败,和新插入的记录Id等信息。 if (saveResults[0].getSuccess()) { map.put("leadId",saveResults[0].getId()); }else{ //创建失败 map.put("leadId","false"); map.put("errorMessage",saveResults[0].getErrors()[0].getMessage()); System.err.println("createLead Error :"+saveResults[0].getErrors()[0].getMessage()); } } catch (ConnectionException e) { map.put("leadId","false"); map.put("errorMessage",e.getMessage()); // TODO Auto-generated catch block e.printStackTrace(); log.error(e.getMessage()); } return map; } }
package com.util.soap;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
public class BasicAuthenticator extends Authenticator {
String userName;
String password;
public BasicAuthenticator(String userName, String password) {
this.userName = userName;
this.password = password;
}
/**
* Called when password authorization is needed. Subclasses should
* override the default implementation, which returns null.
*
* @return The PasswordAuthentication collected from the
* user, or null if none is provided.
*/
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password.toCharArray());
}
}
/**
* 监测超时
* @return
*/
public boolean checkTimeOut(){
boolean flag=true;
ExecutorService pool = Executors.newSingleThreadExecutor();
FutureTask future = new FutureTask(new Callable() {
public String call() throws Exception {
// TODO Auto-generated method stub
SoapConnectionDemo.getConnection();
return "true";
}
});
pool.execute(future);
try {
String result = future.get(10, TimeUnit.SECONDS).toString();
if(result.equals("true")){
flag= true;
}else{
flag= false;
}
pool.shutdown();
} catch (InterruptedException e) {
// TODO: handle exception
log.error("方法执行中断"+e.getMessage());
future.cancel(true);
flag= false;
if(num>=1){
num--;
sleepTime();
return checkTimeOut();
}
} catch (ExecutionException e) {
log.error("Excution异常"+e.getMessage());
// TODO: handle exception
future.cancel(true);
flag= false;
if(num>=1){
num--;
sleepTime();
return checkTimeOut();
}
} catch (TimeoutException e) {
// TODO: handle exception
log.error("方法执行时间超时"+e.getMessage());
future.cancel(true);
flag= false;
if(num>=1){
num--;
sleepTime();
return checkTimeOut();
}
}catch (Exception e) {
// TODO: handle exception
log.error("系统异常"+e.getMessage());
future.cancel(true);
flag= false;
if(num>=1){
num--;
sleepTime();
return checkTimeOut();
}
}finally{
pool.shutdown();
}
return flag;
}
相关文章推荐
- MVP架构
- 我有几个粽子,和一个故事
- Dashgo D1软件支持
- FZU 2230 翻翻棋 (找规律 水题)
- 剑指offer(1)-二维数组中的查找
- myeclipse项目过大打开弹警告窗口
- Android设备中实现陀螺仪(Orientation Sensor)
- Ant 风格路径表达式
- Android开发实战总结--编程规范(持续更新中...)
- 欢迎使用CSDN-markdown编辑器
- 数据库sql判断语句(case,IF)
- keepalived+lvs实现负责均衡群集
- mongo集群启动脚本
- swift学习之路(八)元组
- sql ROUND() 函数三个参数的含义
- (selenium 六)unittest通过测试套件组织用例 (2)
- 谈谈Keil 中C51的内存分配与优化
- 地域划分
- JavaScript中的Array 对象(数组对象)
- Gradle Android客户端程序打包(基于gradle 2.10版本验证通过)