D2L Valance: ПОСТАВКА оценок с помощью Java

Мне было любопытно, успешно ли кто-нибудь реализовал на Java маршрут в D2L с использованием Valance следующим образом:

PUT /d2l/api/le/(D2LVERSION: версия)/(D2LID: orgUnitId)/grades/(D2LID:gradeObjectId)/values/(D2LID: userId)

Я изо всех сил пытался получить 404 от этого звонка, когда я тщательно проверил, соответствуют ли требуемые идентификаторы моим записям в D2L. Когда я вхожу в D2L с учетной записью уровня инструктора, которую я использую в Java, я вижу, что там есть курс, тест и участники. Идентификаторы для них используются в коде Java для вызова указанного выше маршрута, но я получаю ошибку 404, а оценка не обновляется.

Вот фрагмент кода:

HttpURLConnection  connection = null ;

    try {
        uri = userContext.createAuthenticatedUri ("/d2l/api/le/1.0/"+courseId+"/grades/"+gradeId+"/values/"+ userId, "PUT");

        connection= (HttpURLConnection)uri.toURL().openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("PUT");
        connection.setRequestProperty("Content-Type", "application/json");

        OutputStream os = connection.getOutputStream();
        String updatedScore = "{\"GradeObjectType\":1,\"PointsNumerator\":\"5\"}";
        os.write(updatedScore.getBytes());
        os.flush();

    }catch(Exception e){
        e.printStackTrace();
    }

Идентификатор курса, идентификатор класса и идентификатор пользователя передаются и проверяются в веб-интерфейсе D2L. Как видите, у меня создается строка JSON для GradeObjectType со значением 1 и PointsNumerator со значением 5. Существуют ли специальные разрешения, которые должна иметь эта учетная запись инструктора помимо разрешений учетной записи инструктора по умолчанию, чтобы разрешить такой вызов?

Любые мысли будут оценены. Спасибо


person Rental    schedule 22.07.2012    source источник


Ответы (1)


  1. (Если вы еще этого не сделали) Вы можете попробовать сделать вызовы get для получения этих значений, чтобы убедиться, что они присутствуют и ваша основная логика работает.
  2. Если у вас есть доступ к очень привилегированной учетной записи, вы можете использовать эту учетную запись, чтобы попытаться исключить проблемы с разрешениями. Преподаватели, которые могут выставлять оценки в пользовательском интерфейсе, должны иметь возможность выставлять оценки через API.

обновление:

Далее следует пример успешного запроса и ответа, возможно, вы сможете выявить различия:

REQUEST:

PUT https://valence.desire2learn.com/d2l/api/le/1.0/7574/grades/4852/values/3902?x_b=xDaPHeptaw9syoI1EGdeJ1&x_a=L2Hd9WvDTcyiyu5n2AEgpg&x_d=6U5NTYnTswz4gnu-vZHT3bajswsp3jvxYtwzoeOWKUs&x_c=a6f5hEMrvAxC6PS5UlSUOusVpj-XKnOBwxqhYg5pNtg&x_t=1343070852 HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/json

{
                "GradeObjectType": 1,
                "PointsNumerator": 9
}


RESPONSE:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Date: Mon, 23 Jul 2012 19:14:48 GMT
person Cadmium    schedule 22.07.2012
comment
Да.. пробовал с/без кавычек без разницы. Я просто работал над подпрограммой GET, как вы предложили, так что это должно что-то раскрыть. Должны ли параметры courseId,gradeId и userId в показанном выше пути заключаться в кавычки или соответствовать стилю параметра? Спасибо за быстрый ответ. - person Rental; 23.07.2012
comment
Нет, эти параметры отображаются в маршруте как целые числа. Для получения оценок пример рабочего поиска (время истекло, поэтому вам не подойдет): GET valence.desire2learn.com/d2l/api/le/1.0/6784/grades/ 2950/значения/ HTTP/1.1 - person Cadmium; 23.07.2012
comment
Итак, я, кажется, ломаю конкретного пользователя для данного объекта класса. Они отображаются в веб-интерфейсе, но при выполнении GET /d2l/api/le/1.0/{courseId}/grades/{gradeId}/values/{userId} я получаю не найдено. Это также происходит после ввода оценок для этого пользователя в веб-интерфейсе. Так что его просто не видно. - person Rental; 23.07.2012
comment
Работают ли другие пользователи и объекты оценок? Если это так, то я бы искал различия в списке, используемом для этого пользователя, или свойствах этого объекта оценки (в основном сужая различия). Если вы видите это только ситуативно для этого пользователя или элемента, это звучит как конфигурация, если у вас ничего не работает, это звучит так, как будто что-то не так с подготовкой запроса. Не могли бы вы вместо кода добавить, как это выглядит на трассе типа провода для облегчения сравнения. - person Cadmium; 23.07.2012
comment
Как оказалось, ошибки 404 были побочным эффектом настройки проблемы с разрешениями в случае, когда мы сталкивались с обновлением оценок для конкретной роли пользователя, которую мы использовали. Кроме того, нисходящая ошибка 400 привела к попытке обновить оценку со значением (скажем, 50), когда максимальное количество баллов установлено на 0. Это возможно, когда преподаватель потенциально может разрешить дополнительный балл за задание. Задание должно быть настроено так, чтобы оценка превышала максимальное количество баллов, прежде чем 400 исчезнут. Приведенный выше исходный пример работает, но с оценкой ‹= максимальному количеству баллов. - person Rental; 27.07.2012