需要帮助使用java获取多个组织的salesforce数据

时间:2016-05-09 06:25:08

标签: java salesforce

我正在尝试集成用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应用程序中是否有某种配置能够与我新创建的应用程序连接?

1 个答案:

答案 0 :(得分:0)

要回答你的问题,让我问你一件事..如果你在google上拥有自己的账号并且你创建了一个使用OAUTH 2.0登录的应用,那么你认为你能够登录谷歌账户吗?其他用户。?我相信不会。除非您获得管理员权限,否则您无法登录。相反,您可以要求用户使用隐私政策输入他们的用户名和密码。 希望这可以帮到你.. 谢谢