【发布时间】:2016-05-09 06:25:08
【问题描述】:
我正在尝试集成一个用 java 编写的软件,以便能够从多个组织的 Salesforce 站点获取一些数据。
我是 Salesforce 的新手,这就是我目前所做的。我在我的开发人员 Salesforce 帐户中创建了一个连接的应用程序,并根据博客中可用的内容编写了这段代码:
private static final String CLIENT_ID = "my-connected-app-client-id";
private static final String CLIENT_SECRET = "my-connected-app-client-secret";
private static final String REDIRECT_URI = "https://localhost:8443/callback";
private static final String ENVIRONMENT = "https://login.salesforce.com";
private static String tokenUrl = null;
private static final String username = "my-developer-sf-login";
private static final String password = "my-developer-sf-password";
private String accessToken = null;
private String instanceUrl = null;
private List<BasicNameValuePair> getParams(){
ArrayList<BasicNameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("grant_type", "password"));
params.add(new BasicNameValuePair("client_id", CLIENT_ID));
params.add(new BasicNameValuePair("client_secret", CLIENT_SECRET));
params.add(new BasicNameValuePair("redirect_uri", REDIRECT_URI));
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
return params;
}
@Override
public boolean connect() throws ConnectException {
System.out.println("Getting a token");
tokenUrl = ENVIRONMENT + "/services/oauth2/token";
HttpClient httpclient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost(tokenUrl);
try {
post.setEntity(new UrlEncodedFormEntity(getParams(), "UTF-8"));
HttpResponse response = httpclient.execute(post);
String responseStr = EntityUtils.toString(response.getEntity());
HashMap loginResponse = new ObjectMapper().readValue(responseStr, HashMap.class);
accessToken = loginResponse.get("access_token").toString();
instanceUrl = loginResponse.get("instance_url").toString();
System.out.println("We have an access token: " + accessToken + "\n" + "Using instance " + instanceUrl + "\n\n");
return accessToken != null && instanceUrl != null;
} catch (ClientProtocolException e) {
throw new ConnectException("Unable to connect to salesforce", e);
} catch (IOException e) {
throw new ConnectException("Unable to connect to salesforce", e);
} finally {
post.releaseConnection();
}
}
通过在上述程序中获得访问令牌,我可以访问 REST 端点并使用 SOSQL 查询 API 获取一些帐户详细信息 json。
但是,我有一些非常基本的问题。由于我在自己连接的应用程序中提供了我的开发人员 Salesforce 帐户的用户名和密码,这种方法是否适用于从其他组织的 Salesforce 帐户中获取?他们是否必须向我的应用程序提供他们的用户名/密码信息?组织的 Salesforce 应用程序中是否有某种配置可以连接到我新创建的应用程序?
【问题讨论】:
标签: java salesforce