2

我已经在我的 LMS 中添加了一个 Tin Can 课程,并且我能够成功地上传和播放该课程,以便我的陈述被写入 Initial Application Realm LRS。到目前为止,一切都很好。

现在我希望能够从 LRS 中检索已编写的所有语句的列表,以便我可以遍历这些语句并检查登录用户的课程完成情况。我的陈述被写入以下端点:

https://cloud.scorm.com/tc/7QLMQA89WV/

我尝试使用 .NET 库和以下代码查询语句:

//Initialize the TinCan Remote LRS for retrieving completion statistics
LRS = new RemoteLRS("https://cloud.scorm.com/tc/7QLMQA89WV/", "<username>", "<pw>");
Version = TinCan.TCAPIVersion.V101;

//Create the TinCan statement to query completed activities for the logged in user
var query = new StatementsQuery();
query.agent = new TinCan.Agent();
query.agent.mbox = "mailto:jpmcfeely@hsl-data.com";
query.verbId = new Uri("http://adlnet.gov/expapi/verbs/completed");
query.activityId = new Uri("http://tincanapi.com/GolfExample_TCAPI"); 

然而,这将返回所有语句的列表,无论已使用的动词或活动如何。查询过滤器中是否可能存在错误,因为在使用 SCORM Cloud 时我可以看到 TCPAPI 查询字符串,并且在此处输入动词或活动的 URI 时,它会适当地过滤。

作为测试语句是否正确输出的一种方法,我也有以下观点,不确定这是否是获得人类可读版本的语句的最佳方法,但我的列表中的每个语句都有这个输出

<p>@statement.actor.name @statement.verb.display.ToJObject().GetValue("und") '@statement.target.ToJObject(Model.Version)["definition"]["name"]["en-US"]'</p>
4

2 回答 2

3

+1 安德鲁关于使用图书馆的建议。您获得结果的原因是因为您缺少库适当地添加到所有请求的“X-Experience-API-Version”标头。缺少标头意味着 LRS 将请求解释为 0.9 版本请求,除非您使用该版本存储语句,否则不会返回任何语句(语句不会向下转换)。

我知道你知道图书馆在哪里,但对于 SO 的后代:

http://rusticisoftware.github.io/TinCanJS/

另请注意,这只会返回 LRS 的第一页语句,然后您需要处理 LRS 返回的“更多”URL 以递归方式获取下一页。TinCanJS 也提供了一个简单的方法来做到这一点。

于 2014-06-09T18:08:58.353 回答
0

我推荐使用 TinCanJS 库。稍后我会更新一个链接,但你应该可以在谷歌上找到它和说明。

于 2014-06-09T17:57:06.773 回答