SCORM规则条件与目标跟踪模型、CMI数据的评估问题咨询
解决SCORM活动交付前排序规则评估的CMI数据问题
一、CMI值的传输与获取时机
SCORM中cmi.objectives.n.success_status和cmi.objectives.n.score.scaled的传输完全依赖SCO与LMS的API交互:
- 传输时机:只有当第一个SCO主动调用
LMSCommit("")将数据提交给LMS,或者调用LMSTerminate("")退出时,这些目标数据才会被LMS持久化存储。如果SCO未执行这些API操作,LMS不会自动保存目标状态。 - 获取时机:在触发第二个SCO的导航请求前,必须确保第一个SCO已经完成了
Commit和Terminate流程。此时LMS会从持久化存储中读取对应目标的数据,在初始化第二个SCO的目标跟踪模型时,将这些CMI值同步到模型中。
二、使用CMI值评估规则条件的正确流程
针对你的配置,完整处理流程如下:
前置SCO的数据提交
第一个SCO(对应playing_completed目标)完成时,必须:- 设置
cmi.objectives.[index].success_status(如"passed"或"failed")和cmi.objectives.[index].score.scaled(可选,根据规则是否需要); - 调用
SCORM_API.LMSCommit("")提交数据; - 调用
SCORM_API.LMSTerminate("")正常退出。
- 设置
LMS初始化目标跟踪模型
当触发第二个SCO的导航请求时,LMS会:- 根据第二个SCO中
adlseq:objective的mapInfo配置,找到previous_sco_completed对应的targetObjectiveID(即com.scorm.golfsamples.sequencing.forcedsequential.playing_completed); - 从持久化存储中读取该目标对应的
success_status和score.scaled,填充到previous_sco_completed目标的跟踪属性中; - 自动计算
activityProgressKnown属性:如果目标的success_status已被设置(非空且有效),则activityProgressKnown为true,反之则为false。
- 根据第二个SCO中
执行规则条件评估
调用sequencingRulesCheckSubProcess时,基于已初始化的目标跟踪模型检查规则:- 你的
preConditionRule使用conditionCombination="any",只要两个条件中的任意一个满足(previous_sco_completed未完成,或进度未知),就会触发disabled动作,第二个SCO不可交付; - 只有当
previous_sco_completed的completed状态为true且activityProgressKnown为true时,规则不触发,第二个SCO才可交付。
- 你的
调试与校验要点
- 检查第一个SCO的API调用日志,确认
Commit和Terminate已执行; - 验证LMS中持久化存储的目标数据,确保
playing_completed的success_status已正确保存; - 确认
targetObjectiveID的字符串完全匹配,避免因拼写错误导致无法读取数据。
- 检查第一个SCO的API调用日志,确认
内容的提问来源于stack exchange,提问作者Arun Kalyan
相关产品推荐
相关产品推荐

