SharePoint Learning Kit核心内容概述(三)

上一篇中,我们介绍了SLK中的验证机制。今天将继续为大家介绍作为SLK重要组成部分的查询、视图以及支持的课件类型。

查询与视图

SLK中设立查询与视图的目的:

  1. 提供一种灵活的方式来在ALWP中显示用户课程记录的过滤列表
  2. 允许管理员修改或创建新的数据库查询过滤条件并将结果显示在ALWP中
  3. 具有一个webpart属性来决定哪些查询或查询集对用户有效,实现这一点并不需要了解查询和查询集是如何定义的
  4. 允许集中管理查询和查询集的定义,而特定的webpart却可以选择使用哪一个查询或查询集

定义
SLK查询(SLK Query) —— 对课程记录数据表的一个查询,包含返回的栏,要满足的条件等。

  • 唯一的名称- (跨所有查询和查询集)不允许有空格
  • 该查询的标题 -  容易阅读的本地化的标题
  • 基础 Learning Store视图
  • 需要满足的条件
  • 需要显示的栏
  • 格式化属性用于显示(可选)
  • 栏排序(可选)

一个SLK查询由一个基础学习存储(learning store)视图开始。通过在查询结果定义中指定的查询条件对该视图进行过滤,最终决定显示在课程记录列表中的记录。最后,对于每条记录,查询定义了哪些数据将被显示在栏中,以及以什么样的格式来显示。

比如,LearnerOverdue查询会显示当前学习者所有逾期未完成的课程记录,并在课程记录列表栏中显示所属的站点,课程名称,截止日期,状态和分数。每一栏都可以指定不同的文本格式。

SLK 查询集(Query Set)—— SLK查询的一个集合,通过一段xml的形式定义在SLK配置文件中。其中指定了:

  • 唯一的名称- (跨所有查询和查询集)不允许有空格
  • 该查询集的标题 -  容易阅读的本地化的标题
  • SLK查询的集合。以在ALWP摘要列表中显示的顺序排列。
  • 为该查询集设置一个默认SLK查询。用于首次在ALWP中加载该查询集时的默认显示。 

ALWP以查询集来定义哪些查询要显示在摘要列表中,以及其中哪个查询是ALWP加载时默认选中的。在ALWP规范文档中有详细的使用方式。另外,关于“查询与视图”更详细的信息也请大家参考ALWP规范。

 

LearningStore视图与SLK查询
 

LearningStore视图是由SLK数据库中数据的一个子集组成的虚拟表。它们通过SQL SELECT语句的形式定义在slk架构(schema.xml)中。通过它可以从多个条目中返回数据,计算值,并提供条目级安全。LearningStore视图会根据视图定义处理用户的授权,仅返回当前用户有权访问的数据。所有的视图都定义在MLC数据库的架构中。


比如,其中名为LearnerAssignmentListForLearners的 LearningStore视图将会仅返回当前用户在指派流程中作为一个学习者所对应的课程记录。而且,一些数据在被视图返回之前就处理过了。例如,最终点数仅在该课程记录已经被指导员“返回”后才会显示给该学习者。对应这种情况,LearnerAssignmentListForLearners定义中会指定当学习者的课程记录状态小于”final”时,最终点数返回null。


而SLK查询是定义在SLK配置xml文件中。用于提供一种灵活的方式来组织从一个LearningStore得到的数据。SLK查询将一个LearningStore视图进行进一步过滤并以特定格式显示特定的一些栏。


通常LearningStore视图用于从数据库中返回合适的结果集,然后通过SLK使用来定制展现。

 

内容

SLK支持的内容格式如下:

  • SCORM 2004 ——SLK的运行时引擎支持包含完整的排序和导航(sequencing and navigation)功能的SCORM 2004内容。SLK符合SCORM 2004第二版,版本号1.3.1,其中包含SCORM 2004 2nd Edition Addendum Version 1.2。
  • SCORM 1.2 —— SLK – SLK的运行时引擎也支持SCORM 1.2格式的学习内容。SLK符合SCORM 1.2 ,其中包含SCORM 1.2 Addendum Version 2.0。
  • Class Server(LRM/IMS+) – SLK支持除以下两种情况外的Class Server学习资源:
    • 远程内容 –用于执行Class Server学习资源的运行时不支持使用远程内容。Class Server 3和4都支持一种远程内容协议,它允许发布者在e-learning包外面宿主特定的内容。但此功能在Class Server中并不常用,因此MS在SLK中将其移除,以降低复杂度。
    • 包含许可证的LRM内容 – Class Server中的此项功能允许发布者将执行学习内容所必需的授权信息包含到内容中。SLK没有实现该功能,因此这类内容无法直接在SLK中使用。内容发布者只需将许可证移除就可以用于SLK了。
  • 非e-Learning内容 —— SLK支持非e-learning内容(如,Word文档,PowerPoint演示文稿等)的指派。一般类型的文档都没问题,只要能存到SharePoint文档库里就行。在SLKSettings.xml中包含了SLK中用到的MIME类型映射的清单。我们可以根据需要添加新的MIME类型,进而扩展SLK对特定文档的支持。

    非e-learning内容与e-learning内容的管理和流转方式都是一样的。但是,非e-learning内容在SLK数据库中不存在学习和交互数据。eLearning内容可以利用JScript运行时环境提供的CMI数据模型来支持丰富的状态跟踪,评分,日期与进度等功能。而非eLearning内容只提供状态,最终点数(或称为得分),和指导员评语。当一个学习者点击“开始学习”链接时,该内容会在相应的客户端应用或插件中打开。

    当完成学习后需要返回给指导员批阅时,学习者必须将文档保存一份到本地,然后根据文档中指导员的要求以文件的形式“提交”他/她的作业。SLK并没有提供类似自动保存的功能。通过页面“提交”本次学习,学习者可以告诉指导员他们已经完成了相应的学习。

    有很多用户要求提高SLK对非eLearning内容的支持,特别是在日期(被指派,被开始,被完成)和结果信息的提交(aka drop box  对于变更的内容)。解决该问题的一条途径是启用对非eLearning内容的CMI 跟踪。因为在CMI数据模型中已经包含了大量类似的信息并且在现在版本的SLK中已经实现。

    创建指派并存储关于该指派相关课程记录数据的SQL架构如图所示:

SharePoint Learning Kit核心内容概述(三)_第1张图片 

这个架构是如何工作的?

当我们通过一个文档库来指派一个文档时,一个eLearning操作被调用,该文档对应的一条指派(AssignmentItem)记录被创建,对于每个学习者会创建一条课程(LearnerAssignmentItem)记录,也对应到该文档。

对于eLearning内容,当学习者开始学习时,对应该课程记录会创建一条尝试记录(AttemptItem)。对于eLearning内容中每个活动(Activity,可能有多个),当该活动结束时,会创建一条新的活动尝试记录(ActiveAttemptItem)来存储其对应的CMI数据。

对于非eLearning内容,当学习者开始学习时,LearnerAssignmentItem.NonElearningStatus写一个值。指导员在批阅已完成的学习时,可以设置一个最终点数和一个评语。整个过程并没有尝试记录或活动尝试记录的创建。所以也没有地方可以存储CMI数据。


SLK大牛们分析了使用SLK API来为非eLearing内容创建尝试记录和活动尝试记录的可能性。大致想法为:

  1. 将LearnerAssignmentId传递到非eLearning内容
  2. 新建一个与SLK并行的Web服务。使用类似如下的一个调用来从非eLearning内容中提交CMI状态到SLK:
    trackingService.Submit(learnerAssignmentId,cmiData);
  3. 当web服务接收到传来的调用时,它会调用:
    StoredLearningSession slc=slkStore.StartAttemptOnLearnerAssignment(learnerAssignmentId);
    Slc.CurrentActivityDataModel…=cmiData;

然而这条途径走不通。对应StoredLearningSession在SLK API中有太多的逻辑了,并且它与SCOMR和Class Server内容所提供的丰富数据紧密集成在一起。他们曾经考虑过“模拟”这些数据,以便当检测到非eLearning内容时,创建一个最简化版本的pseudo-data,将其写入数据库(类似AssignmentItem.RootActivityId=0),以便可以针对非eLearning内容通过欺骗的方式来使用SLK API。但思路还是不太容易理清。


后来干脆,从CMI跟踪服务等待一个传入的调用开始,当调用过来后,该服务会直接操作数据表(AttemptItem和ActiveAttemptItem)来插入记录并关联到该非eLearning内容对应的课程记录(LearnerAssignmentItem)。如果他们不存在,将会为该指派(Assignment)新建一条PackageItem(manifest为空,PackageFormat为'Document’)和一个ActivityPackageItem。这样我们就可以利用相同的数据库架构了。实质上,我们为上面提到的内容生成了一个“SCORM 伪装”。非eLearning内容因为没有manifest,所以被限制为每个包仅一个活动。

 

流程图

SharePoint Learning Kit核心内容概述(三)_第2张图片

 

安全性


由于非eLearning内容并不能假定就能在浏览器中运行,因此它不能像SCORM和Class Server内容一样共享安全上下文。因此我们考虑使用基于web服务的REST/POX来支持数据的上传,以使开发启用CMI数据的内容变得简单。我们不能依赖像Windows验证或WS/Security这样的安全机制来自动得到一个安全上下文。
大多数基于REST/POX的web服务使用一个共享的令牌来保证调用的安全。它的实现是通过传输一个很长的由计算机生成的令牌,而且令牌的分发是基于会话的。在SLK里已经有一个这样的基于会话的令牌了,那就是LearnerAssignmentId。不幸的是,迄今为止它是一个递增的长整型数字,非常好猜。将来会变成一个随机生成的GUID,到时就可以大大提高这种方法的安全性了。然而,这个变更现在将会被postponed,因此我们可以在不需要进行昂贵的架构变更的情况下启用该功能。

 

更高层的设计

  • LearnerAssignmentId被从SLK传递到内容的方式是:当开始学习时,通过HTTP参数(如 http://MySLK/Lessons/MyLesson.htm?LearnerAssignmentId=12)
  • Windows Communications Foundation基于Web Service并使用WebHttpBinding(如 REST/POX)来实现与内容的最大交换能力
  • System.Runtime.Serialization DataContracts将represent the CMI数据,使其通过C#来创建/consume变得简单。同时兼容简单的XML 解析。
    希望这些在新版本中可以实现。更多信息参考http://slk.codeplex.com/wikipage?title=Enabling%20CMI%20Tracking%20for%20non-eLearning%20content

你可能感兴趣的:(SharePoint)