Поиск по этому блогу

среда, 27 июля 2011 г.

Как передать данные из Flash в CourseLab

Наверное вопрос, которые рано или поздно задают 90% разработчиков в среде CourseLab. На клиентском портале этот вопрос поднимался, и даже есть решение, я дабы упростить задачу расскажу, как это сделать на примере (пример выдумывал на ходу, но что то такое подобное встречается в реальной жизни разработчика).

Пусть задача будет такая: во Flash пользователь должен выбрать один из предметов (понятно, что это можно сделать и в CL, но я не большой специалист во Flash, поэтому показываю простой пример). Например определить, чем чаще должен пользоваться менеджер по продажам. А CourseLab должен дать обратную связь (то ли он выбрал и прокомментировать).

1) CourseLab

  • создаем курс,
  • создаем цель (в моем примере цель “с1” максимальное значение 1, минимальное 0),1
  • вставляем скрипт в файл module.js (в папке с модулем).2

function recieveFromFlash (xyz)
{
SetObjectiveScore("c1", "flash", "replace", xyz);
}

Примечание: если вместо replace поставить sum, то вместо перезаписи цели этот скрипт суммирует значения с текущим.

3

2) Flash

  • на “чувствительные” объекты (в нашем случае пусть это будут принтер и телефон), накладываем прозрачные объекты, 4
  • применяем для них AS (при нажатии данные передаются в module.js, который в свою очередь “общается” с CL)

Для принтера (пусть это будет значение “1”):

on (release) {
import flash.external.ExternalInterface;
ExternalInterface.call("recieveFromFlash", 1);
}

Для телефона (пусть будет 0)

on (release) {
import flash.external.ExternalInterface;
ExternalInterface.call("recieveFromFlash", 0);
}

5

3) CourseLab

  • вставляем flash  на слайд,6_1
  • вставляем на следующий слайд объект “Текущие результаты” из блока “Тесты”. Выбираем в настройках нашу цель – c1 и убираем галку “приводить к 100%”. Это нужно для того, чтобы проверить передается цель (потом мы этот слайд уберем),8
  • проверяем, работает ли передача данных – запускаем курс, нажимаем на принтер, идем на следующий слайд, если результат цели показывает “1”, то у нас все работает, для пущей уверенности, возвращаемся на слайд с flash и проделываем туже процедуру только для телефона,8
  • если все работает – удаляем этот тестовый слайд,

далее сделаем так, чтобы нам выдавалась обратная связь в зависимости от выбранного во flash предмета, для этого:

  • создаем новый слайд и помещаем в него простой текстовый блок с текстом:

Вы выбрали: {{#a}}.

Таким образом мы заводим текстовую переменную, в которую будем записывать и выдавать обратную связь.

  • на начало показа настраиваем действия (Условия изменения текста в зависимости от выбранной цели – в нашем случае предмета во Flash):

9

9_1

Все, можно проверять!

Курс (исходник) можно скачать здесь.

Upt: Flash рядом.

10 комментариев:

Олег Сизонов комментирует...

Александр, ссылка на исходник курса не работает: "The requested URL /a.ryabinin/lmm/123.zip was not found on this server"

Якорев Денис комментирует...

Александр, мистика да и только! Вчера сидел делал небольшой обучающий ролик по передаче данных из Flash в CourseLab, опубликовать только не успел. Ладно, не пропадать же работе, опубликую сегодня, хоть и с опозданием.
А этот метод мы действительно описали на клиентском сайте. Правда есть небольшое различие вы код прописываете в module.js, а мы предлагали после публикации править файл courselab.js.

Alexander Ryabinin комментирует...

Олег, ссылку поправил, + добавил ссылку на flash.

Денис, спасибо вам за решение. Кстати на мой взгляд в module.js удобнее прописывать, т.к. этот файл как раз и предназначен для внешних скриптов.

Сергей Снегирёв комментирует...

А чего AS2-то?

Евгений Матвеев комментирует...

Действительно, а какое решение может быть в AS 3.0? Может знает кто...

Alexander Ryabinin комментирует...

Хороший вопрос - постараюсь выяснить его у разработчиков.

Сергей Снегирёв комментирует...

А что там выяснять-то? Насколько я вижу, суть метода сводится к следующему: написать скрипт-обертку для нативных функций CL, затем вызвать его через ExternalInterface.

ExternalInterface точно так же работает в AS3, отличаться будет только обработка нажатий (через листнеры).

Если я правильно понимаю (не пробовал, мы больше по Trivantis Lectora специалисты), можно и без скрипта-обертки вызывать SetObjectiveScore, но тогда любые правки требуют перекомпиляции флешки, а не правки JS ноутпадом. Т.е. вопрос удобства.

Олег Сизонов комментирует...

Планирую поддержать и развить тему на своём блоге, уже повесил анонс, следите

Олег Сизонов комментирует...

Вот, читайте пост. Пока предыстория и концепт, позже планирую выложить исходники.

Alexander Ryabinin комментирует...

Олег, спасибо!