Получить данные из D365FO через OData - PullRequest
0 голосов
/ 27 марта 2020

Контекст. В настоящее время я занимаюсь разработкой приложения Android с Android Studio 3.6.1, которое должно извлекать данные из Dynamics 365 для финансов и операций. Пользователь входит в систему, и я получаю токен доступа. После этого я пытаюсь запросить необходимые данные из D365. (См. Пример кода ниже). Данные находятся в хосте Dev VM в Azure.

Проблема: я уже пытался вызвать URL в браузере, который работал просто отлично. Но когда я звоню через приложение, я всегда получаю 401 не авторизованным.

Дополнительная информация: приложение зарегистрировано в Azure через портал и имеет разрешения API AX.FullAccess, CustomService.FullAccess и Odata .FullAccess (которые также предоставляются / утверждаются пользователем при первом входе в систему). ClientID / AppID также указан в форме / таблице Azure приложений в D365FO, назначенной администратору. Я также знаю, что тип токена - Bearer.

Знаете ли вы, что я что-то упускаю в моем запросе?

Метод, который выполняет запрос:

public String doInBackground(String... pToken)
    {
        try {
            URL url = new URL("https://<myDevURL>.cloudax.dynamics.com/data/PersonUsers");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            conn.setRequestMethod("GET");
            conn.setRequestProperty("Authorization", "Bearer " + pToken[0]);
            conn.setRequestProperty("Accept", "application/json");
            conn.setRequestProperty("OData-Version", "4.0");
            conn.setRequestProperty("OData-MaxVersion", "4.0");

            int httpResponseCode = conn.getResponseCode();
            if(httpResponseCode == 200) {

                StringBuilder response;
                try(BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()))){
                    String inputLine;
                    response = new StringBuilder();

                    while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                    }
                }
                return response.toString();
            } else {
                return String.format("Connection returned HTTP code: %s with message: %s",
                        httpResponseCode, conn.getResponseMessage());
            }
        }
        catch (Exception e)
        {
            Log.d(TAG, e.getMessage());
            return "";
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...