Как запросить LRS агентом через javascript

Мне кажется, что я перепробовал все, но мне все время не хватает. Я работаю над курсом в Storyline 360, и я могу нормально возвращать операторы при использовании глаголов и идентификаторов объектов, но независимо от того, что я делаю, чтобы попытаться вернуть операторы для определенного агента, я не могу получить запрос для прохождения .

Вот мой код в его нынешнем виде - где я возвращаю множество операторов... мне нужно знать, как заставить его запрашивать текущие операторы учащегося на совпадения. Я могу получить их имя или mbox, но попытка передать их через мои параметры каждый раз терпит неудачу.

Любая помощь очень ценится!

var lrs;
var statementFound = false;
var player = GetPlayer();
try {
    lrs = new TinCan.LRS(
        {
            endpoint: "https://cloud.scorm.com/lrs/MYINFO/",
            username: "MYINFO",
            password: "MYINFO",
            allowFail: false
        }
    );
}
catch (ex) {
    console.log("Failed to setup LRS object: ", ex);
    // TODO: do something with error, can't communicate with LRS
};

var myObj = JSON.parse(getParameterByName('actor'));
lrs.queryStatements(
    {
        params: {
            verb: new TinCan.Verb(
                { 
                   id:  "http://adlnet.gov/expapi/verbs/answered"
                }
            )
    },
        callback: function (err, sr) {
            if (err !== null) {
                console.log("Failed to query statements: " + err);
                // TODO: do something with error, didn't get statements
                return;
             }

            if (sr.more !== null) {
                // TODO: additional page(s) of statements should be fetched
             }

           if (sr.statements.length > 0) {
            statementFound = true;
             console.log(sr.statements);
             player.SetVar("sf",statementFound);
            }
        }
    }
);

var myObj может получить необходимую информацию для идентификации учащегося, если это необходимо, но опять же, я просто не могу понять, как передать ее в запросе.


person dogtuna    schedule 25.06.2020    source источник


Ответы (1)


Вам нужно установить свойство agent в объекте params, переданном в первом аргументе. Предполагая, что Агент является оператором actor in.

lrs.queryStatements(
    {
        params: {
            agent: TinCan.Agent.fromJSON(getParameterByName('actor'))
        }
    },
    ...
);
person Brian J. Miller    schedule 25.06.2020
comment
Брайан. Возможно, ты только что изменил мою жизнь, мой мужчина. Я боролся с этим пару дней и был так близок к тому, чтобы сдаться. Я даже никогда не пробовал TinCan.Agent.fromJSON — это имеет гораздо больше смысла, и я не могу вам передать, как вы изменили мой день! Спасибо Спасибо спасибо. - person dogtuna; 26.06.2020
comment
Приведенное выше решение отлично подходит для моей исходной ситуации, но, скажем, я хочу жестко закодировать имя в этом запросе — как это будет выглядеть? - person dogtuna; 27.06.2020
comment
Любой объект TinCan.Agent может быть передан как значение этого параметра, поэтому, как бы вы ни конструировали указанный экземпляр, он будет работать. Вы можете просто сделать new TinCan.Agent({"mbox": "..."}) или любой другой IFI, разрешенный спецификацией xAPI. Метод fromJSON — это простой фабричный метод, позволяющий библиотеке анализировать строку JSON и одновременно создавать объект. - person Brian J. Miller; 27.06.2020
comment
Еще раз спасибо - эти две части помощи огромны для того, что мне нужно. Не могу отблагодарить вас достаточно. - person dogtuna; 27.06.2020