您的位置:首页 > 其它

通过代理推送数据到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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: