我正在尝试集成用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();
}
}
通过上述程序获得访问权限,我可以使用SOSQL查询API获取REST端点并获取一些帐户详细信息json。
但是,我有一些非常基本的问题。因为,我使用自己的连接应用程序提供了我的开发人员salesforce帐户的用户名和密码,这种方法是否适用于从其他组织Salesforce帐户获取?他们是否必须向我的应用程序提供用户名/密码信息?组织的Salesforce应用程序中是否有某种配置能够与我新创建的应用程序连接?
答案 0 :(得分:0)
要回答你的问题,让我问你一件事..如果你在google上拥有自己的账号并且你创建了一个使用OAUTH 2.0登录的应用,那么你认为你能够登录谷歌账户吗?其他用户。?我相信不会。除非您获得管理员权限,否则您无法登录。相反,您可以要求用户使用隐私政策输入他们的用户名和密码。 希望这可以帮到你.. 谢谢