我有一个流动的问题。我有一个我正在制作的服装课程,它基于SCORM 2004第3版,并且部署在SABA LMS上。 我在做的是:
我使用“API.Commit”将数据保存到LMS
(我正在使用wrapper library,但它正在使用核心功能)
现在我对不同的数据字段进行了几次这样的操作,我们称之为“X”,“Y”和“Z”。
我对服务器的第一个请求的期望是看到只发送“X”,这正是我所看到的。然后在第二个我希望只看到“Y”,但这是我不明白的,我看到API发送“X”和“Y”。当然第3个发送“X”,“Y”和“Z”
你可以理解我关心的是什么。我得到一个点,每次我想要保存0.1k的数据,我必须做出40-50K的请求。
有人可以向我解释这是SCORM的问题,我正在使用的特定LMS(SABA)还是我做错了?
答案 0 :(得分:2)
这不是SCORM的事情。 SCORM只是告诉你API - GetValue,SetValue,Commit等 - 以及每个调用的一般行为。但它没有规定LMS如何实际做这些事情。似乎LMS正在保存数据客户端。因此,当您设置X时,它会将其保存在本地。当您调用Commit时,LMS将获取所有数据客户端并将其发送回服务器。稍后当你设置Y和Z时它会做同样的事情 - 获取所有数据并发送回LMS。
如果没有让LMS改变其行为,我认为你无法真正做到这一点。我经历的经验法则只是在您真正需要时提交。你可以只为X,Y和Z调用SetValue,然后只在进入另一个SCO时调用,或者到达你决定必须将这些数据保存到LMS的点。
答案 1 :(得分:2)
首先,我想说你没有做错,这完全是API的错误 - 这是我今天遇到的第二个API(巧合lol)做不好的做法:
有良好的做法和想法,有些是坏的 - 不幸的是,糟糕的做法要快得多,因此人们在组合客户端API时往往不会考虑这些事情。
要记住的其他事项:
API中的数据可以通过多种方式存储,但是如果有选择,我会选择标准的Javascript对象,每个键都是cmi键,值是一个对象(或数组)。标志和缓存值以及当前值(用于后续的GetValue / Commit调用)。
最后请记住,Commit本身是可选的 - 在调用SetValue一段时间后,API本身应该有效地调用它。
所以重复我的第一句 - 不是你的错,完全是API提供的错误。对它们进行更改应该很容易 - 在服务器端,只需支持合并而不是替换发送的数据。