0

当我尝试设置时发生错误:

setValue( "cmi.objectives.0.completion_status", "completed" );

SCORM交互日志:

[19:28:55.830] Initialize('')
[19:28:55.833] GetValue('cmi.objectives._count')
[19:28:55.833] GetValue('cmi.objectives.0.success_status')
[19:28:55.835] SetValue('cmi.exit', 'suspend')
[19:29:06.726] GetValue('cmi.learner_name')
[19:29:21.49] SetValue('cmi.objectives.0.completion_status', 'completed')

标准中有一个我不明白的模糊表述:“如果通信会话已经初始化并且在相关依赖关系不存在的情况下调用了 SetValue() API 方法,LMS 应将错误代码设置为 Data Model Dependency Not成立 (408) 并返回 false。

一个 SCORM 播放器(在 scorm.com 网站上)不会发出错误消息,这没关系。另一个 SCORM 播放器提出了错误。我不确定我的清单/调用是否正确。

imsmanifest.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Solo on the Keyboard Trainer, SCORM version, http://www.ergosolo.ru-->
<manifest identifier="ergosolo.solotrainer" version="1.0" xmlns="http://www.imsglobal.org/xsd/imscp_v1p1" xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_v1p3" xmlns:adlseq="http://www.adlnet.org/xsd/adlseq_v1p3" xmlns:adlnav="http://www.adlnet.org/xsd/adlnav_v1p3" xmlns:imsss="http://www.imsglobal.org/xsd/imsss" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lom="http://ltsc.ieee.org/xsd/LOM" xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd
                                           http://www.adlnet.org/xsd/adlcp_v1p3 adlcp_v1p3.xsd
                                           http://www.adlnet.org/xsd/adlseq_v1p3 adlseq_v1p3.xsd
                                           http://www.adlnet.org/xsd/adlnav_v1p3 adlnav_v1p3.xsd
                                           http://www.imsglobal.org/xsd/imsss imsss_v1p0.xsd
                                           http://ltsc.ieee.org/xsd/LOM lom.xsd">
    <metadata>
        <schema>ADL SCORM</schema>
        <schemaversion>2004 3rd Edition</schemaversion>
        <lom xmlns="http://ltsc.ieee.org/xsd/LOM" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ltsc.ieee.org/xsd/LOM lom.xsd">
            <general>
                <title>
                    <string language="ru">Соло на Клавиатуре</string>
                </title>
                <language>ru</language>
                <description>
                    <string language="ru">Соло на Клавиатуре - SCORM-версия</string>
                </description>
            </general>
            <metaMetadata>
                <metadataSchema>LOMv1.0</metadataSchema>
            </metaMetadata>
            <technical>
                <!-- All of the file types used by this course-->
                <format>text/html</format>
                <format>image/jpeg</format>
                <format>image/bmp</format>
                <format>application/x-javascript</format>
                <format>application/swf</format>
                <format>image/png</format>
                <format>text/css</format>
                <installationRemarks>
                    <string language="en">This activity requires the client browser to have a Macromedia Flash plugin installed.</string>
                </installationRemarks>
            </technical>
        </lom>
    </metadata>
    <organizations default="soloOrganization">
        <organization identifier="soloOrganization" structure="hierarchical" adlseq:objectivesGlobalToSystem="true">
            <title>Соло на Клавиатуре</title>
            <item identifier="speedTest" identifierref="speedTestResource">
                <title>Тест скорости</title>
                <imsss:sequencing IDRef="commonSeqRules">
                    <imsss:controlMode choice="true" choiceExit="true" forwardOnly="false" useCurrentAttemptObjectiveInfo="true" useCurrentAttemptProgressInfo="true"/>
                    <imsss:objectives>
                        <imsss:primaryObjective objectiveID="solo.objTest">
                        </imsss:primaryObjective>
                    </imsss:objectives>
                </imsss:sequencing>
            </item>
            <item identifier="startExam" identifierref="startExamResource">
                <title>Начальный экзамен</title>
                <imsss:sequencing IDRef="commonSeqRules">
                    <imsss:controlMode choice="true" choiceExit="true" forwardOnly="false" useCurrentAttemptObjectiveInfo="true" useCurrentAttemptProgressInfo="true"/>
                    <imsss:objectives>
                        <imsss:primaryObjective objectiveID="solo.objStartExam">
            </imsss:primaryObjective>

                    </imsss:objectives>
                </imsss:sequencing>
            </item>
            <item identifier="exercise0" identifierref="exercise0Resource">
                <title>Вступление</title>
                <imsss:sequencing IDRef="commonSeqRules">
                    <imsss:controlMode choice="true" choiceExit="true" forwardOnly="false" useCurrentAttemptObjectiveInfo="true" useCurrentAttemptProgressInfo="true"/>
                    <imsss:sequencingRules>
                        <imsss:preConditionRule>
                            <imsss:ruleConditions conditionCombination="any">
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="satisfied"/>
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="objectiveStatusKnown"/>
                            </imsss:ruleConditions>
                            <!-- <imsss:ruleAction action="hiddenFromChoice"/> -->
                        </imsss:preConditionRule>
                    </imsss:sequencingRules>

                    <imsss:objectives>
                        <imsss:primaryObjective objectiveID="solo.obj0">
                        </imsss:primaryObjective>
                        <imsss:objective objectiveID="objPrev">
                            <imsss:mapInfo targetObjectiveID="solo.objStartExam" readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
                        </imsss:objective>

                    </imsss:objectives>
                </imsss:sequencing>
            </item>
            <item identifier="exercise1" identifierref="exercise1Resource">
                <title>Упражнение 1</title>
                <imsss:sequencing IDRef="commonSeqRules">
                    <imsss:controlMode choice="true" choiceExit="true" forwardOnly="false" useCurrentAttemptObjectiveInfo="true" useCurrentAttemptProgressInfo="true"/>
                    <imsss:sequencingRules>
                        <imsss:preConditionRule>
                            <imsss:ruleConditions conditionCombination="any">
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="satisfied"/>
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="objectiveStatusKnown"/>
                            </imsss:ruleConditions>
                            <!-- <imsss:ruleAction action="hiddenFromChoice"/> -->
                        </imsss:preConditionRule>
                    </imsss:sequencingRules>

                    <imsss:objectives>
                        <imsss:primaryObjective objectiveID="solo.obj1">
            </imsss:primaryObjective>
                        <imsss:objective objectiveID="solo.obj1.1">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj1.2">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj1.3">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj1.4">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj1.5">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj1.6">
            </imsss:objective>
                        <imsss:objective objectiveID="objPrev">
                            <imsss:mapInfo targetObjectiveID="solo.objStartExam" readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
                        </imsss:objective>

                    </imsss:objectives>
                </imsss:sequencing>
            </item>
            <item identifier="exercise2" identifierref="exercise2Resource">
                <title>Упражнение 2</title>
                <imsss:sequencing IDRef="commonSeqRules">
                    <imsss:controlMode choice="true" choiceExit="true" forwardOnly="false" useCurrentAttemptObjectiveInfo="true" useCurrentAttemptProgressInfo="true"/>
                    <imsss:sequencingRules>
                        <imsss:preConditionRule>
                            <imsss:ruleConditions conditionCombination="any">
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="satisfied"/>
                                <imsss:ruleCondition referencedObjective="objPrev" operator="not" condition="objectiveStatusKnown"/>
                            </imsss:ruleConditions>
                            <!-- <imsss:ruleAction action="hiddenFromChoice"/> -->
                        </imsss:preConditionRule>
                    </imsss:sequencingRules>
                    <imsss:objectives>
                        <imsss:primaryObjective objectiveID="solo.obj2">
            </imsss:primaryObjective>
                        <imsss:objective objectiveID="solo.obj2.1">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj2.2">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj2.3">
            </imsss:objective>
                        <imsss:objective objectiveID="solo.obj2.4">
            </imsss:objective>
                        <imsss:objective objectiveID="objPrev">
                            <imsss:mapInfo targetObjectiveID="solo.obj1" readSatisfiedStatus="true" writeSatisfiedStatus="false"/>
                        </imsss:objective>
                    </imsss:objectives>
                </imsss:sequencing>
            </item>
        </organization>
    </organizations>
    <resources>
        <resource identifier="speedTestResource" type="webcontent" adlcp:scormType="sco" href="htm/test.htm">

            <file href="runtime.xml"/>

            <file href="htm/test.htm"/>
            <dependency identifierref="css"/>
            <dependency identifierref="flash"/>
            <dependency identifierref="img"/>
            <dependency identifierref="image"/>
            <dependency identifierref="caricature"/>
            <dependency identifierref="staff"/>
            <dependency identifierref="pics"/>
            <dependency identifierref="js"/>
        </resource>
        <resource identifier="startExamResource" type="webcontent" adlcp:scormType="sco" href="htm/startExam.htm">

            <file href="runtime.xml"/>

            <file href="htm/startExam.htm"/>
            <dependency identifierref="css"/>
            <dependency identifierref="flash"/>
            <dependency identifierref="img"/>
            <dependency identifierref="image"/>
            <dependency identifierref="caricature"/>
            <dependency identifierref="staff"/>
            <dependency identifierref="pics"/>
            <dependency identifierref="js"/>
        </resource>
        <resource identifier="exercise0Resource" type="webcontent" adlcp:scormType="sco" href="htm/000.htm">

            <file href="runtime.xml"/>

            <file href="htm/000.htm"/>
            <dependency identifierref="css"/>
            <dependency identifierref="flash"/>
            <dependency identifierref="img"/>
            <dependency identifierref="image"/>
            <dependency identifierref="caricature"/>
            <dependency identifierref="staff"/>
            <dependency identifierref="pics"/>
            <dependency identifierref="js"/>
        </resource>
        <resource identifier="exercise1Resource" type="webcontent" adlcp:scormType="sco" href="htm/001.htm">

            <file href="runtime.xml"/>

            <file href="htm/001.htm"/>
            <dependency identifierref="css"/>
            <dependency identifierref="flash"/>
            <dependency identifierref="img"/>
            <dependency identifierref="image"/>
            <dependency identifierref="caricature"/>
            <dependency identifierref="staff"/>
            <dependency identifierref="pics"/>
            <dependency identifierref="js"/>
        </resource>
        <resource identifier="exercise2Resource" type="webcontent" adlcp:scormType="sco" href="htm/002.htm">

            <file href="runtime.xml"/>

            <file href="htm/002.htm"/>
            <file href="js/init.js"/>
            <dependency identifierref="css"/>
            <dependency identifierref="flash"/>
            <dependency identifierref="img"/>
            <dependency identifierref="image"/>
            <dependency identifierref="caricature"/>
            <dependency identifierref="staff"/>
            <dependency identifierref="pics"/>
            <dependency identifierref="js"/>
        </resource>
        <resource identifier="css" type="webcontent" adlcp:scormType="asset">
            <file href="css/fields.cs"/>
            <file href="css/main.css"/>
        </resource>
        <resource identifier="flash" type="webcontent" adlcp:scormType="asset">
            <file href="flash/SoloType.swf"/>
        </resource>
        <resource identifier="img" type="webcontent" adlcp:scormType="asset">
            ... some files here ...
        </resource>
        <resource identifier="caricature" type="webcontent" adlcp:scormType="asset">
            <file href="caricature/1.jpg"/>
            <file href="caricature/2.jpg"/>
            <file href="caricature/3.jpg"/>
            <file href="caricature/4.jpg"/>
            <file href="caricature/5.jpg"/>
            <file href="caricature/6.jpg"/>
            <file href="caricature/7.jpg"/>
            <file href="caricature/8.jpg"/>
            <file href="caricature/9.jpg"/>
            <file href="caricature/10.jpg"/>
            <file href="caricature/11.jpg"/>
            <file href="caricature/12.jpg"/>
            <file href="caricature/13.jpg"/>
            <file href="caricature/14.jpg"/>
            <file href="caricature/15.jpg"/>
            <file href="caricature/16.jpg"/>
            <file href="caricature/17.jpg"/>
            <file href="caricature/18.jpg"/>
            <file href="caricature/19.jpg"/>
            <file href="caricature/20.jpg"/>
            <file href="caricature/21.jpg"/>
            <file href="caricature/22.jpg"/>
            <file href="caricature/23.jpg"/>
            <file href="caricature/24.jpg"/>
            <file href="caricature/25.jpg"/>
            <file href="caricature/26.jpg"/>
            <file href="caricature/27.jpg"/>
            <file href="caricature/28.jpg"/>
            <file href="caricature/29.jpg"/>
            <file href="caricature/30.jpg"/>
            <file href="caricature/31.jpg"/>
            <file href="caricature/32.jpg"/>
            <file href="caricature/33.jpg"/>
            <file href="caricature/34.jpg"/>
            <file href="caricature/35.jpg"/>
            <file href="caricature/36.jpg"/>
            <file href="caricature/37.jpg"/>
            <file href="caricature/38.jpg"/>
            <file href="caricature/39.jpg"/>
            <file href="caricature/40.jpg"/>
            <file href="caricature/41.jpg"/>
            <file href="caricature/42.jpg"/>
            <file href="caricature/43.jpg"/>
            <file href="caricature/44.jpg"/>
            <file href="caricature/45.jpg"/>
            <file href="caricature/46.jpg"/>
            <file href="caricature/47.jpg"/>
            <file href="caricature/48.jpg"/>
            <file href="caricature/49.jpg"/>
            <file href="caricature/50.jpg"/>
            <file href="caricature/51.jpg"/>
            <file href="caricature/52.jpg"/>
            <file href="caricature/53.jpg"/>
            <file href="caricature/54.jpg"/>
            <file href="caricature/55.jpg"/>
            <file href="caricature/56.jpg"/>
            <file href="caricature/57.jpg"/>
            <file href="caricature/58.jpg"/>
            <file href="caricature/59.jpg"/>
            <file href="caricature/60.jpg"/>
            <file href="caricature/61.jpg"/>
            <file href="caricature/62.jpg"/>
            <file href="caricature/63.jpg"/>
            <file href="caricature/64.jpg"/>
            <file href="caricature/65.jpg"/>
            <file href="caricature/66.jpg"/>
            <file href="caricature/67.jpg"/>
            <file href="caricature/68.jpg"/>
            <file href="caricature/69.jpg"/>
            <file href="caricature/70.jpg"/>
            <file href="caricature/71.jpg"/>
            <file href="caricature/72.jpg"/>
            <file href="caricature/73.jpg"/>
            <file href="caricature/74.jpg"/>
            <file href="caricature/75.jpg"/>
            <file href="caricature/76.jpg"/>
            <file href="caricature/77.jpg"/>
            <file href="caricature/78.jpg"/>
            <file href="caricature/79.jpg"/>
            <file href="caricature/80.jpg"/>
            <file href="caricature/81.jpg"/>
            <file href="caricature/82.jpg"/>
            <file href="caricature/83.jpg"/>
            <file href="caricature/84.jpg"/>
            <file href="caricature/85.jpg"/>
            <file href="caricature/86.jpg"/>
            <file href="caricature/87.jpg"/>
            <file href="caricature/88.jpg"/>
            <file href="caricature/89.jpg"/>
            <file href="caricature/90.jpg"/>
            <file href="caricature/91.jpg"/>
            <file href="caricature/92.jpg"/>
            <file href="caricature/93.jpg"/>
            <file href="caricature/94.jpg"/>
            <file href="caricature/95.jpg"/>
            <file href="caricature/96.jpg"/>
            <file href="caricature/97.jpg"/>
            <file href="caricature/98.jpg"/>
            <file href="caricature/99.jpg"/>
            <file href="caricature/100.jpg"/>
        </resource>
        <resource identifier="staff" type="webcontent" adlcp:scormType="asset">
            <file href="staff/1.jpg"/>
            <file href="staff/2.jpg"/>
            <file href="staff/3.jpg"/>
            <file href="staff/4.jpg"/>
            <file href="staff/5.jpg"/>
            <file href="staff/6.jpg"/>
            <file href="staff/7.jpg"/>
            <file href="staff/8.jpg"/>
            <file href="staff/9.jpg"/>
            <file href="staff/10.jpg"/>
            <file href="staff/11.jpg"/>
        </resource>
        <resource identifier="pics" type="webcontent" adlcp:scormType="asset">
            <file href="pics/anekdot_bottom.png"/>
            <file href="pics/anekdot_bottom_left.png"/>
            <file href="pics/anekdot_bottom_right.png"/>
            <file href="pics/anekdot_left.png"/>
            <file href="pics/anekdot_right.png"/>
            <file href="pics/anekdot_top.png"/>
            <file href="pics/anekdot_top_left.png"/>
            <file href="pics/anekdot_top_left1.png"/>
            <file href="pics/anekdot_top_left2.png"/>
            <file href="pics/anekdot_top_right.png"/>
            <file href="pics/edit.png"/>
            <file href="pics/envelope.gif"/>
            <file href="pics/envelope1.gif"/>
            <file href="pics/exercise_bottom.png"/>
            <file href="pics/exercise_bottom_left.png"/>
            <file href="pics/exercise_bottom_right.png"/>
            <file href="pics/exercise_left.png"/>
            <file href="pics/exercise_right.png"/>
            <file href="pics/exercise_top.png"/>
            <file href="pics/exercise_top_left.png"/>
            <file href="pics/exercise_top_left1.png"/>
            <file href="pics/exercise_top_left2.png"/>
            <file href="pics/exercise_top_right.png"/>
            <file href="pics/letter_bottom.png"/>
            <file href="pics/letter_bottom_left.png"/>
            <file href="pics/letter_bottom_right.png"/>
            <file href="pics/letter_left.png"/>
            <file href="pics/letter_right.png"/>
            <file href="pics/letter_top.png"/>
            <file href="pics/letter_top_left.png"/>
            <file href="pics/letter_top_left1.png"/>
            <file href="pics/letter_top_left12.png"/>
            <file href="pics/letter_top_left2.png"/>
            <file href="pics/letter_top_right.png"/>
            <file href="pics/logo.png"/>
            <file href="pics/menu_blue_bottom_left_corner.png"/>
            <file href="pics/menu_blue_bottom_right_corner.png"/>
            <file href="pics/menu_blue_top_left_corner.png"/>
            <file href="pics/menu_blue_top_right_corner.png"/>
            <file href="pics/mixanat.gif"/>
            <file href="pics/mix_quote_green_bottom.png"/>
            <file href="pics/mix_quote_green_bottom_left.png"/>
            <file href="pics/mix_quote_green_bottom_right.png"/>
            <file href="pics/mix_quote_green_left.png"/>
            <file href="pics/mix_quote_green_right.png"/>
            <file href="pics/mix_quote_green_top.png"/>
            <file href="pics/mix_quote_green_top_left.png"/>
            <file href="pics/mix_quote_green_top_right.png"/>
            <file href="pics/nabiraem.gif"/>
            <file href="pics/quote_green_bottom_left.png"/>
            <file href="pics/quote_green_bottom_right.png"/>
            <file href="pics/quote_green_top_left.png"/>
            <file href="pics/quote_green_top_right.png"/>
            <file href="pics/repeat_bottom_left.png"/>
            <file href="pics/repeat_bottom_right.png"/>
            <file href="pics/repeat_top_left.png"/>
            <file href="pics/repeat_top_right.png"/>
            <file href="pics/separator.gif"/>
            <file href="pics/separator1.gif"/>
            <file href="pics/green_border/angle_left.png"/>
            <file href="pics/green_border/angle_right.png"/>
            <file href="pics/green_border/bottom.png"/>
            <file href="pics/green_border/left.png"/>
            <file href="pics/green_border/right.png"/>
            <file href="pics/green_border/top.png"/>
            <file href="pics/image/corner_bottom_left.png"/>
            <file href="pics/image/corner_bottom_right.png"/>
            <file href="pics/image/corner_top_left.png"/>
            <file href="pics/image/corner_top_right.png"/>
            <file href="pics/image/image_bottom.png"/>
            <file href="pics/image/image_bottom_left.png"/>
            <file href="pics/image/image_bottom_right.png"/>
            <file href="pics/image/image_left.png"/>
            <file href="pics/image/image_right.png"/>
            <file href="pics/image/image_top.png"/>
            <file href="pics/image/image_top_left.png"/>
            <file href="pics/image/image_top_right.png"/>
            <file href="pics/line_round/line_round_bottom.png"/>
            <file href="pics/line_round/line_round_top.png"/>
        </resource>
        <resource identifier="js" type="webcontent" adlcp:scormType="asset">
            <file href="js/requests.js"/>
            <file href="js/StringUtils.js"/>
            <file href="js/arrows.js"/>
            <file href="js/captions.js"/>
            <file href="js/closeRedoButtons.js"/>
            <file href="js/common.js"/>
            <file href="js/commonHTML.js"/>
            <file href="js/convert.js"/>
            <file href="js/environment.js"/>
            <file href="js/errorCounter.js"/>
            <file href="js/exercise.js"/>
            <file href="js/fields.js"/>
            <file href="js/interface.js"/>
            <file href="js/keyboard.js"/>
            <file href="js/miksWaiter.js"/>
            <file href="js/miksanatik.js"/>
            <file href="js/offlineParams.js"/>
            <file href="js/panels.js"/>
            <file href="js/photoCaptions.js"/>
            <file href="js/progressObjects.js"/>
            <file href="js/resultPage.js"/>
            <file href="js/utils.js"/>
            <file href="js/writer.js"/>
            <file href="js/scormFunctions.js"/>
            <file href="js/scormExchange.js"/>
            <file href="js/scormUtils.js"/>
            <file href="js/init.js"/>
            <file href="js/soloTypeFlash.js "/>
            <file href="scormdata/rus/errors.js"/>
            <file href="scormdata/rus/exam.js"/>            
            <file href="scormdata/rus/exercises.js"/>
            <file href="scormdata/rus/quotations.js"/>
            <file href="scormdata/rus/results.js"/>
            <file href="scormdata/rus/speedTest.js"/>
            <file href="scormdata/rus/speedTestResults.js"/>
        </resource>
    </resources>
    <imsss:sequencingCollection>
        <imsss:sequencing ID="commonSeqRules">
            <!-- This course doesn't rollup a score -->
            <imsss:rollupRules objectiveMeasureWeight="0"/>
            <!-- Set these values to prevent content from accidently being auto-completed/satisfied-->
            <imsss:deliveryControls completionSetByContent="true" objectiveSetByContent="true"/>
        </imsss:sequencing>
    </imsss:sequencingCollection>
    <imsss:sequencing>
        <imsss:controlMode choice="true" flow="true"/>
    </imsss:sequencing>
</manifest>
4

1 回答 1

2

Collections in SCORM (i.e. cmi.----.n.----) require that certain properties of a record be set before you can read or write the rest of that record. Until that property is set, you're not allowed to get or set other values, and you'll get the 408 Data Model Dependency Not Established error. Basically, setting the dependency property is what creates the record. Mostly that property is .id.

I'd guess this was done in order to make the job easier for an LMS/player that stores records by ID - which means it would need the ID before it can store anything.

Rustici's (scorm.com) player is built to be lenient. Many other players aren't.

The properties that are dependency properties:

  • cmi.objectives.n.id
  • cmi.interactions.n.id
  • cmi.interactions.n.objectives.m.id
  • cmi.comments_from_learner.n.comment
  • cmi.comments_from_learner.n.location
  • cmi.comments_from_learner.n.timestamp

(Those last three basically mean that you can set the properties of a comments_from_learner record in any order).

In short, you have to do something like this:

setValue( "cmi.objectives.0.id", "YOUR_OBJECTIVE_ID" );
setValue( "cmi.objectives.0.completion_status", "completed" );
于 2013-05-10T07:10:21.987 回答