├── 1_language.md
├── 1_pril.md
├── 2_data_types.md
├── 2_pril.md
├── 3_object_model.md
├── 3_pril.md
├── 4_pril.md
├── 4_queries.md
├── 5_document.md
├── 6_practical_realization.md
├── Attention03a.jpg
├── Collab_test1.png
├── Collab_test2.png
├── Excel-TestFile01.xlsx
├── Making_Package1.png
├── Making_Package_Error.png
├── README.md
├── Save_Icon.PNG
├── Test.md
├── TopElem.md
├── TopElem01.PNG
├── Window_XQuery01.png
├── Window_XQuery02.png
├── XQuery.md
├── XQuery01.jpg
├── XQuery_control.md
├── XQuery_quantity.md
├── XmlDoc.md
├── XmlDoc01.png
├── XmlDoc02.PNG
├── activate_assessment.md
├── activate_course.md
├── agent.md
├── agent01.png
├── agent02.png
├── agent03.png
├── agent_code.md
├── agent_code01.PNG
├── alert.md
├── array01.PNG
├── array02.PNG
├── array03.PNG
├── array04.PNG
├── arrays.md
├── assessment.md
├── assessment01.png
├── assessment02.png
├── assessment03.png
├── assessment04.png
├── assessment1.md
├── blue_15x15.png
├── blue_20x20.png
├── catalogs.md
├── collaborator.md
├── collaborator01.png
├── collaborator02.png
├── collaborator03.png
├── collaborator04.png
├── collaborator05.png
├── collaborator06.png
├── collaborator1.md
├── collaborator2.md
├── course.md
├── course01.png
├── course02.png
├── course03.png
├── course04.png
├── course1.md
├── dark-green_15x15.png
├── dark-green_15x15a.png
├── dark-green_20x20.png
├── data_types01.PNG
├── err01.png
├── err02.png
├── err03.png
├── err04.png
├── err05.png
├── err06.png
├── err07.png
├── err08.png
├── err09.png
├── err1.md
├── err10.png
├── err11.png
├── err12.png
├── err2.md
├── excel01.PNG
├── excel02.PNG
├── excel03.PNG
├── excel_data.md
├── find_assessment.md
├── find_collaborator.md
├── find_course.md
├── first_agent__if.md
├── for.md
├── for01.PNG
├── for_in.md
├── function01.PNG
├── functions.md
├── green_15x15.png
├── green_20x20.png
├── if01.PNG
├── if02.PNG
├── other_catalogs1.md
├── pril_1_1.PNG
├── pril_3_1.PNG
├── pril_errors.md
├── pril_test_collaborator.md
├── quantity01.PNG
├── red_15x15.png
├── red_20x20.png
├── run_agent.md
├── run_agent01.png
├── switch.md
├── switch01.PNG
├── test_agent.md
├── test_agent01.png
├── try.md
├── try01.png
├── ttt1.xls
├── underconstruction.png
├── variables.md
├── variables01.PNG
├── violet_15x15.png
├── violet_20x20.png
└── vved.md
/1_language.md:
--------------------------------------------------------------------------------
1 | # Часть 1. Основы языка программирования
2 | ***
3 |
4 | Язык программирования в среде WebTutor аналогичен языку JavaScript. Однако он имеет свои особенности, и не все функциональности языка JavaScript поддерживаются в WebTutor.
5 |
6 | ---
7 |
8 |
9 |
Переменные
10 | Вывод на экран информационного окна: метод alert
11 | Создаем первый агент с условным оператором if
12 | Оператор выбора switch
13 | Цикл for
14 | Цикл for… in
15 | Обработка ошибок: операторы try… catch (err)
16 | Массивы
17 | Функции
18 |
19 |
20 | ***
21 |
22 |
23 | Возврат к оглавлению
24 |
--------------------------------------------------------------------------------
/1_pril.md:
--------------------------------------------------------------------------------
1 | # Как загрузить пакет с агентом в систему
2 | ***
3 |
4 | Для загрузки пакета с агентом выполните следующие действия:
5 |
6 | * Скачайте файл пакета с агентом (такой файл обычно имеет расширение ZIP).
7 | * В программе WebTutor Administrator откройте раздел **Системное администрирование – Обмен данными – Скачанные пакеты данных**.
8 | * Нажмите кнопку **Обработать пакет**.
9 | * Укажите путь к скачанному файлу пакета с агентом.
10 |
11 | 
12 |
13 |
14 |
15 | ***
16 |
17 |
18 | Возврат к оглавлению
19 |
--------------------------------------------------------------------------------
/2_data_types.md:
--------------------------------------------------------------------------------
1 | # Часть 2. Типы данных
2 | ***
3 |
4 | В данном разделе рассматриваются некоторые основные функции преобразования типов данных:
5 |
6 | **String()** – Преобразует аргумент в строку.
7 |
8 | **Int()** – Преобразует значение аргумента к целому числу.
9 |
10 | **Real()** – Преобразует значение аргумента к вещественному числу.
11 |
12 | **Date()** – Преобразует значение аргумента к типу Дата.
13 |
14 | **XQueryLiteral()** – Преобразует значение аргумента к типу данных, используемому в запросах.
15 |
16 | ---
17 |
18 | Примеры преобразования типов данных:
19 |
20 | a = 1;
21 | b = 2;
22 | c = a + b;
23 | d = String(a) + "" + String(b);
24 | e = '13.01.2018';
25 | f = Date(e) + 2;
26 | alert("Число - " + c + "\n" + "Строка - " + d + "\n" + "Дата - " + f);
27 |
28 | ---
29 |
30 | Скопируйте приведенный код в тестовый агент на вкладку **"Выполняемый код"** и запустите агент, как это описано в разделе [Как запустить агент?](run_agent.md)
31 |
32 | Результат выполнения агента:
33 |
34 | 
35 |
36 |
37 | ***
38 | Возврат к оглавлению
39 |
--------------------------------------------------------------------------------
/2_pril.md:
--------------------------------------------------------------------------------
1 | # Приложение. Как создать собственный пакет с агентом
2 | ***
3 |
4 | Для создания собственного пакета (файла с расширением ZIP) выполните следующие действия:
5 |
6 | * В списке агентов выделить нужную строку.
7 | * Нажмите на правую кнопку мыши
8 | * Выберите команду **Добавить в пакет**.
9 |
10 | Агент добавляется в пакет с именем "Новый".
11 |
12 | * Выполните команду **Сервис - Содержимое пакета"".
13 |
14 | Открывается окно "Объекты пакета":
15 |
16 | 
17 |
18 | * Нажмите кнопку **"Сохранить полный пакет"**.
19 |
20 | В некоторых случаях при формировании пакета с агентом возникает ошибка:
21 |
22 | 
23 |
24 | В этом случае попробуйте установить флажок **Использовать альтернативный компонент ZIP** (**Сервис - Настройки пользователя - Дополнительно - Использовать альтернативный компонент ZIP**).
25 |
26 |
27 |
28 | ***
29 |
30 |
31 | Возврат к оглавлению
32 |
--------------------------------------------------------------------------------
/3_object_model.md:
--------------------------------------------------------------------------------
1 | # Часть 3. Работа с объектной моделью. Изучение объектной модели
2 | ***
3 |
4 | Для программирования в среде WebTutor нужно хорошо знать объектную модель системы, которая представлена в WebTutor в форме каталогов.
5 |
6 |
7 | Далее мы рассмотрим некоторые основные объектные модели, которые будут полезны нам в процессе дальшейшего обучения.
8 |
9 | ---
10 |
11 | Справочник каталогов
12 | Структура каталога collaborator (Сотрудник)
13 | Разбор объектной модели collaborator (Сотрудник) в режиме просмотра каталога
14 | Разбор объектной модели collaborator (Сотрудник) программным методом
15 | Структура каталога assessment (Тест)
16 | Разбор объектной модели assessment (Тест) в режиме просмотра каталога
17 | Структура каталога course (Электронный курс)
18 | Разбор объектной модели course (Электронный курс) в режиме просмотра каталога
19 | Структуры каталогов active_test_learning (Незавершенный тест) и test_learning (Завершенный тест)
20 |
21 | ***
22 |
23 | Возврат к оглавлению
24 |
--------------------------------------------------------------------------------
/3_pril.md:
--------------------------------------------------------------------------------
1 | # Приложение. Как определить ID объекта
2 | ***
3 |
4 | Для определения ID объекта выполните следующие действия:
5 |
6 | * Откройте в Webtutor Administrator карточку объекта.
7 | * Выполните команду меню карточки объекта **Сервис - Копировать ID документа**.
8 |
9 | 
10 |
11 | В результате ID объекта записывается в буфер обмена операционной системы.
12 |
13 | * Вставьте ID объекта из буфера обмена в нужное место (в текстовый редактор, таблицу и т.д.).
14 |
15 | ***
16 |
17 |
18 | Возврат к оглавлению
19 |
--------------------------------------------------------------------------------
/4_pril.md:
--------------------------------------------------------------------------------
1 | # Приложение. Как открыть окно просмотра каталога
2 | ***
3 |
4 | Для включения режима просмотра каталога и открытия окна просмотра каталога откройте главную страницу WebTutor Administrator и нажмите комбинацию клавиш Ctrl+Shift+F8.
5 |
6 | Открывается интерфейс, позволяющий получить данные из каталога:
7 |
8 | 
9 |
10 | ---
11 |
12 | Для проверки корректности запросов в формате XQuery установите флажок слева от поля **XQuery**, скопируйте текст запроса в поле **XQuery** и нажмите на кнопку **Запрос**:
13 |
14 | 
15 |
16 |
17 | ***
18 |
19 |
20 | Возврат к оглавлению
21 |
--------------------------------------------------------------------------------
/4_queries.md:
--------------------------------------------------------------------------------
1 | # Часть 4. Запросы
2 | ***
3 |
4 | Запросы XQuery. Примеры запросов
5 | Тестирование запроса в режиме просмотра каталога
6 | Определение количества объектов, полученных в результате запроса
7 |
8 |
9 | ***
10 |
11 |
12 |
13 | Возврат к оглавлению
14 |
--------------------------------------------------------------------------------
/5_document.md:
--------------------------------------------------------------------------------
1 | # Часть 5. Изменение атрибутов объекта. Встроенный объект Документ
2 | ***
3 |
4 | Изменение атрибутов объекта. Использование встроенного объекта Документ
5 | Обращение к атрибутам объекта из документа. Функция TopElem
6 |
7 | ***
8 |
9 | Возврат к оглавлению
10 |
--------------------------------------------------------------------------------
/6_practical_realization.md:
--------------------------------------------------------------------------------
1 | # Часть 6. Реализация практических задач
2 | ***
3 |
4 | В этом разделе мы напишем агент для назначения сотруднику указанного набора курсов и тестов.
5 |
6 | К решению данной задачи будем подходить постепенно. Ниже приводятся основные этапы решения данной задачи с подробными комментариями.
7 |
8 | ---
9 |
10 | Чтение данных из файла Excel
11 | Поиск сотрудника
12 | Поиск курса
13 | Поиск теста
14 | Назначение курса сотруднику
15 | Назначение теста сотруднику
16 | Выполняемый код агента для пакетного назначения сотруднику набора курсов и тестов
17 |
18 |
19 | ***
20 |
21 | Возврат к оглавлению
22 |
--------------------------------------------------------------------------------
/Attention03a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Attention03a.jpg
--------------------------------------------------------------------------------
/Collab_test1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Collab_test1.png
--------------------------------------------------------------------------------
/Collab_test2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Collab_test2.png
--------------------------------------------------------------------------------
/Excel-TestFile01.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Excel-TestFile01.xlsx
--------------------------------------------------------------------------------
/Making_Package1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Making_Package1.png
--------------------------------------------------------------------------------
/Making_Package_Error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Making_Package_Error.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Основы программирования в среде WebTutor: Практикум
2 |
3 | ## Гуревич А.Л.
4 |
5 | Москва, 2018.
6 |
7 | ---
8 |
9 | Учебное пособие разработано на основе учебного портала АНО "Институт безопасности труда" и содержит набор практических упражнений, предназначенных для отработки основных приемов программирования в среде WebTutor. Рассматривается объектная модель системы WebTutor и основных ее объектов, а также основы работы с объектной моделью.
10 |
11 | Пособие предназначено для администраторов учебного портала (пользователей WebTutor Administrator), интересующихся вопросами программирования в среде WebTutor.
12 |
13 | ---
14 |
15 | ### Содержание
16 |
17 | Введение
18 | Что такое агент?
19 | Создание тестового агента для выполнения практических занятий
20 | Как запустить агент?
21 | ---
22 | Часть 1. Основы языка программирования
23 | Переменные
24 | Вывод на экран информационного окна: метод alert
25 | Создаем первый агент с условным оператором if
26 | Оператор выбора switch
27 | Цикл for
28 | Цикл for… in
29 | Обработка ошибок: операторы try… catch (err)
30 | Массивы
31 | Пользовательские функции
32 | ---
33 | Часть 2. Типы данных
34 | ---
35 | Часть 3. Работа с объектной моделью. Изучение объектной модели
36 | Справочник каталогов
37 | Структура каталога collaborator (Сотрудник)
38 | Разбор объектной модели collaborator (Сотрудник) в режиме просмотра каталога
39 | Разбор объектной модели collaborator (Сотрудник) программным методом
40 | Структура каталога assessment (Тест)
41 | Разбор объектной модели assessment (Тест) в режиме просмотра каталога
42 | Структура каталога course (Электронный курс)
43 | Разбор объектной модели course (Электронный курс) в режиме просмотра каталога
44 | Структуры каталогов active_test_learning (Незавершенный тест) и test_learning (Завершенный тест)
45 | ---
46 | Часть 4. Запросы
47 | Запросы XQuery. Примеры запросов
48 | Тестирование запроса в режиме просмотра каталога
49 | Определение количества объектов, полученных в результате запроса
50 | ---
51 | Часть 5. Изменение атрибутов объекта. Встроенный объект Документ
52 | Изменение атрибутов объекта. Использование встроенного объекта Документ
53 | Обращение к атрибутам объекта из документа. Функция TopElem
54 | ---
55 | Часть 6. Реализация практических задач
56 | Чтение данных из файла Excel
57 | Поиск сотрудника
58 | Поиск курса
59 | Поиск теста
60 | Назначение курса сотруднику
61 | Назначение теста сотруднику
62 | Выполняемый код агента для пакетного назначения сотруднику набора курсов и тестов
63 | ---
64 | Приложения:
65 | Почему я не могу найти тестового сотрудника?
66 | Как загрузить пакет с агентом в систему
67 | Как создать собственный пакет с агентом
68 | Как определить ID объекта
69 | Как открыть окно просмотра каталога
70 | Основные сообщения об ошибках
71 |
72 |
--------------------------------------------------------------------------------
/Save_Icon.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Save_Icon.PNG
--------------------------------------------------------------------------------
/Test.md:
--------------------------------------------------------------------------------
1 | # HEADING h1
2 | ***
3 |
4 | ## HEADING h2
5 |
6 | ### SUB-HEADING h3
7 | ***
8 |
9 | #### h4 SUB-HEADING
10 |
11 | THIS IS MY FIRST PARAGRAPH
12 |
13 | THIS IS MY SECOND PARAGRAPH
14 |
15 | VS
16 |
17 | THIS IS MY FIRST PARAGRAPH
18 | THIS IS MY SECOND PARAGRAPH
19 | (объединяются в одну строку)
20 |
21 | ---
22 |
23 | **THIS IS BOLDED**
24 |
25 | ***THIS IS ITALIC***
26 |
27 | `выделенные слова`
28 |
29 |
30 |
31 | (такая ссылка не работает)
32 |
33 | [Мой сайт](http://webdesign.ru.net)
34 |
35 | [Введение](vved.md)
36 |
37 | 
38 |
--------------------------------------------------------------------------------
/TopElem.md:
--------------------------------------------------------------------------------
1 | # Обращение к атрибутам объекта из документа. Функция TopElem
2 | ***
3 |
4 | В предыдущем разделе [Изменение атрибутов объекта. Использование встроенного объекта Документ](XmlDoc.md) мы обращались из документа к атрибуту основного («корневого») объекта, указав его название типа этого объекта (например, **collaborator**):
5 |
6 | open_doc.collaborator.email = "TestTestTest111@TestTestTest.Test.ru";
7 |
8 | Однако, при программировании в системе WebTutor рекомендуется вместо имени корневого объекта использовать атрибут **TopElem**:
9 |
10 | open_doc.TopElem.email = "TestTestTest111@TestTestTest.Test.ru";
11 |
12 | ---
13 |
14 | **TopElem** – это специальный атрибут объекта XmlDoc, возвращающий корневой объект документа.
15 |
16 | Проверим, как работает данный атрибут:
17 |
18 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
19 |
20 | personArray = XQuery(_query_str);
21 | // Запросом отобран только один объект, но personArray является массивом объектов.
22 | // Поэтому мы выбираем первый элемент из массива personArray.
23 | _elem = ArrayOptFirstElem(personArray);
24 |
25 | // Получить URL объекта
26 | doc_url = UrlFromDocID(_elem.id);
27 |
28 | // Открыть объект(XML-документ) используя его URL
29 | open_doc = OpenDoc(doc_url);
30 | // open_doc = объект типа XmlDoc
31 |
32 | // Пытаемся изменить электронный адрес тестового сотрудника
33 | open_doc.TopElem.email = "TestTestTest111@TestTestTest.Test.ru";
34 |
35 | // Получить название типа корневого элемента
36 | doc_rootName = open_doc.TopElem.Name;
37 | alert("Новый электронный адрес - " + _elem.email + "\n" + "Тип корневого элемента - " + doc_rootName);
38 |
39 | // Сохранение документа
40 | open_doc.Save();
41 |
42 | ---
43 |
44 | Результат работы агента:
45 |
46 | 
47 |
48 | После обновления с помощью клавиши **F5** на вкладке **Сотрудники** в Администраторе электронный адрес сотрудника изменяется.
49 |
50 |
51 | ***
52 |
53 | Возврат к части 5
54 |
55 | Возврат к оглавлению
56 |
--------------------------------------------------------------------------------
/TopElem01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/TopElem01.PNG
--------------------------------------------------------------------------------
/Window_XQuery01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Window_XQuery01.png
--------------------------------------------------------------------------------
/Window_XQuery02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/Window_XQuery02.png
--------------------------------------------------------------------------------
/XQuery.md:
--------------------------------------------------------------------------------
1 | # Запросы XQuery. Примеры запросов
2 |
3 |
4 | ***
5 |
6 | В системе WebTutor широко используются запросы в формате XQuery. Эти запросы менее известны, чем аналогичные запросы на языке SQL, но после некоторой практики запросы XQuery становятся вполне понятными.
7 |
8 | Для понимания того, как устроены запросы XQuery, на наш взгляд, может быть полезна следующая прекрасная иллюстрация взята из книги Максима Юркова ["Progressive WebTutor"](https://maksimyurkov.gitbooks.io/progressive-webtutor/content/).
9 |
10 | 
11 |
12 | 1.  Объект в котором хранятся запрашиваемые записи
13 | 2.  Название таблицы из которой берутся записи. Все записи созданы по одному шаблону, и могут содержать только те поля, которые содержатся в шаблоне.
14 | 3.  Логическое условие
15 | 4.  Сортировка записей
16 | 5.  Результат запроса, объект с отфильтрованными записями
17 |
18 | ---
19 |
20 | **Отбор сотрудников по одному критерию:**
21 |
22 | for $elem in collaborators where contains($elem/fullname, 'Test') return $elem
23 |
24 |  for $elem  in collaborators  where contains($elem/fullname, 'Test')  return $elem
25 |
26 | * Аналогичный запрос на языке SQL:
27 |
28 | SELECT * FROM collaborators WHERE CONTAINS(fullname, 'Test')
29 |
30 | * Присвоение переменной текста запроса:
31 |
32 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') return $elem";
33 |
34 | **Примечание**: Обратите внимание на то, что значение критерия поиска (ФИО) заключено в одинарные кавычки, а весь текст кода запроса – в двойные кавычки.
35 |
36 | **CONTAINS** — предикат, используемый для выполнения полнотекстового поиска подстроки в полях, содержащих символьные данные.
37 |
38 | ---
39 |
40 | **Отбор сотрудников по двум критериям:**
41 |
42 | for $elem in collaborators where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest') return $elem
43 |
44 |  for $elem  in collaborators  where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest')  return $elem
45 |
46 | * Аналогичный запрос на языке SQL:
47 |
48 | SELECT * FROM collaborators WHERE CONTAINS(fullname, 'Test') AND login = 'TestTestTest'
49 |
50 | * Присвоение переменной текста запроса:
51 |
52 | _query_str = "for $elem in collaborators where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest') return $elem";
53 |
54 | ---
55 |
56 | **Отбор теста по одному критерию (коду):**
57 |
58 | for $elem in assessments where $elem/code = '00000017' return $elem
59 |
60 |  for $elem  in assessments  where $elem/code = '00000017'  return $elem
61 |
62 | * Аналогичный запрос на языке SQL:
63 |
64 | SELECT * FROM assessments WHERE code = '00000017'
65 |
66 | * Присвоение переменной текста запроса:
67 |
68 | _query_str = " for $elem in assessments where $elem/code = '00000017' return $elem ";
69 |
70 | ---
71 |
72 | **Отбор курса по одному критерию (коду):**
73 |
74 | for $elem in courses where $elem/code = 'OTM8' return $elem
75 |
76 |  for $elem  in courses  where $elem/code = 'OTM8'  return $elem
77 |
78 | * Аналогичный запрос на языке SQL:
79 |
80 | SELECT * FROM courses WHERE code = 'OTM8'
81 |
82 | * Присвоение переменной текста запроса:
83 |
84 | _query_str = "for $elem in courses where $elem/code = 'OTM8' return $elem";
85 |
86 | ---
87 |
88 | **Отбор объекта по ID:**
89 |
90 | for $elem in collaborators where $elem/id = 6511610587817075498 return $elem
91 |
92 | for $elem in assessments where $elem/id = 6424083603832075130 return $elem
93 |
94 | for $elem in courses where $elem/id = 6486395195918459516 return $elem
95 |
96 |  for $elem  in collaborators  where $elem/id = 6511610587817075498  return $elem
97 |
98 |  for $elem  in assessments  where $elem/id = 6424083603832075130  return $elem
99 |
100 |  for $elem  in courses  where $elem/id = 6486395195918459516  return $elem
101 |
102 | **Примечание** – Об определении ID объектов – см. [Приложение 3. Как определить ID объекта](3_pril.md).
103 |
104 | ---
105 |
106 |
107 |
108 | **Отбор сотрудников с упорядочиванием (по возрастанию):**
109 |
110 | for $elem in collaborators where contains($elem/fullname, 'Иванов') order by $elem/id return $elem
111 |
112 | или
113 |
114 | for $elem in collaborators where contains($elem/fullname, 'Иванов') order by $elem/id ascending return $elem
115 |
116 |
117 |  for $elem  in collaborators  where contains($elem/fullname, 'Иванов')  order by $elem/id  return $elem
118 |
119 |  for $elem  in collaborators  where contains($elem/fullname, 'Иванов')  order by $elem/id ascending  return $elem
120 |
121 | * Аналогичный запрос на языке SQL:
122 |
123 | SELECT * FROM collaborators WHERE CONTAINS(fullname, 'Иванов') ORDER BY id
124 |
125 | * Присвоение переменной текста запроса:
126 |
127 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Иванов') order by $elem/id return $elem";
128 |
129 |
130 | ----
131 |
132 | **Отбор сотрудников с упорядочиванием (по убыванию):**
133 |
134 | for $elem in collaborators where contains($elem/fullname, 'Иванов') order by $elem/id descending return $elem
135 |
136 |  for $elem  in collaborators  where contains($elem/fullname, 'Иванов')  order by $elem/id descending  return $elem
137 |
138 | * Аналогичный запрос на языке SQL:
139 |
140 | SELECT * FROM collaborators WHERE CONTAINS(fullname, 'Иванов') ORDER BY id DESC
141 |
142 | * Присвоение переменной текста запроса:
143 |
144 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Иванов') order by $elem/id descending return $elem";
145 |
146 | ---
147 |
148 | **Отбор законченных тестов для определенного сотрудника:**
149 |
150 | for $emp in test_learnings where contains($emp/person_fullname, 'Иванов Иван Иванович') return $emp
151 |
152 |  for $emp  in test_learnings  where contains($emp/person_fullname, 'Иванов Иван Иванович')  return $emp
153 |
154 | * Присвоение переменной текста запроса:
155 |
156 | _query_str = "for $emp in test_learnings where contains($emp/person_fullname, 'Иванов Иван Иванович') return $emp";
157 |
158 | ---
159 |
160 | **Отбор незаконченных тестов для определенного сотрудника:**
161 |
162 | for $emp in active_test_learnings where contains($emp/person_fullname, 'Иванов Иван Иванович') return $emp
163 |
164 |  for $emp  in active_test_learnings  where contains($emp/person_fullname, 'Иванов Иван Иванович')  return $emp
165 |
166 | * Присвоение переменной текста запроса:
167 |
168 | _query_str = "for $emp in active_test_learnings where contains($emp/person_fullname, 'Иванов Иван Иванович') return $emp";
169 |
170 |
171 | ---
172 |
173 | **Отбор пройденных тестов (state_id=4) среди завершенных по данному сотруднику:**
174 |
175 | for $elem in collaborators where contains($elem/fullname, 'Иванов') and $elem/state_id=4 return $elem
176 |
177 |  for $elem  in collaborators  where contains($elem/fullname, 'Иванов') and $elem/state_id=4  return $elem
178 |
179 | * Присвоение переменной текста запроса:
180 |
181 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Иванов') and $elem/state_id=4 return $elem";
182 |
183 | ---
184 |
185 | **Отбор пройденных тестов (state_id=4) среди незавершенных по данному сотруднику:**
186 |
187 | for $elem in collaborators where contains($elem/fullname, 'Иванов') and $elem/state_id=4 return $elem
188 |
189 |  for $elem  in collaborators  where contains($elem/fullname, 'Иванов') and $elem/state_id=4  return $elem
190 |
191 | * Присвоение переменной текста запроса:
192 |
193 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Иванов') and $elem/state_id=4 return $elem";
194 |
195 | ---
196 |
197 |
198 | * Откройте окно просмотра каталога Ctrl+Shift+F8 (см. [Приложение 4. Как открыть окно просмотра каталога](4_pril.md)).
199 | * Скопируйте тексты запросов в поле **XQuery** и выполните запросы.
200 |
201 |  **Внести изменения!** Обратите внимание, что в Вашей системе будут иные коды курсов и тестов, иные идентификационные номера ID, а также может не быть сотрудника с именем 'Иванов Иван Иванович'. Внесите в приведенные выше тесты запросов изменения, в соответствии с особенностями Вашей системы.
202 |
203 |
204 | ***
205 | Возврат к части 4
206 | Возврат к оглавлению
207 |
--------------------------------------------------------------------------------
/XQuery01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/XQuery01.jpg
--------------------------------------------------------------------------------
/XQuery_control.md:
--------------------------------------------------------------------------------
1 | # Тестирование запроса в режиме просмотра каталога
2 | ***
3 |
4 | Откройте окно просмотра каталога, как это описано в разделе [Приложение 4. Как открыть окно просмотра каталога](4_pril.md).
5 |
6 | Для проверки корректности запросов в формате XQuery установите флажок слева от поля **XQuery**, скопируйте текст запроса в поле **XQuery** и нажмите на кнопку **Запрос**:
7 |
8 | 
9 |
10 | В нижней части окна выводятся объекты системы, отобранные в результате выполнения запроса.
11 |
12 | В случае, если найден искомый объект, - запрос можно далее использовать в работе агента.
13 |
14 | В случае, если не найдено ни одного объекта, - скорее всего запрос был составлен не вполне корректно и его нужно изменить.
15 |
16 | В случае, если найден объект, отличающийся от искомого, - запрос также нужно изменить.
17 |
18 | В случае, если найдено несколько объектов, - необходимо задуматься о способах обработки всех найденных объектов или скорректировать текст запроса, чтобы уточнить результаты запроса.
19 |
20 |
21 |
22 | ***
23 | Возврат к части 4
24 | Возврат к оглавлению
25 |
--------------------------------------------------------------------------------
/XQuery_quantity.md:
--------------------------------------------------------------------------------
1 | # Определение количества объектов, полученных в результате запроса
2 | ***
3 |
4 | Составьте запрос, позволяющий отобрать несколько объектов. Для нашей базы я использовал следующий запрос:
5 |
6 | **for $elem in collaborators where contains($elem/fullname, 'Иван') return $elem**
7 |
8 | Проверьте запрос в режиме просмотра каталога, как это описано в разделе [Тестирование запроса в режиме просмотра каталога](XQuery_control.md).
9 |
10 | В нашей базе в результате выполнения этого запроса было отобрано 80 объектов (80 сотрудников).
11 |
12 | Выведем программным способом количество отобранных объектов.
13 |
14 | Результатом отбора объектов по запросу является массив объектов.
15 |
16 | Для определения количества элементов массива используется команда:
17 | **ArrayCount(НаименованиеМассива)**
18 |
19 | ---
20 |
21 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
22 |
23 | _query_str = "for $emp in collaborators where contains($emp/fullname, 'Иван') return $emp";
24 |
25 | personArray = XQuery(_query_str);
26 | quantity = ArrayCount(personArray);
27 | alert(quantity);
28 |
29 | switch(quantity)
30 | {
31 | case 0:
32 | alert("Предупреждение! Не найдено ни одного пользователя!");
33 | break;
34 | case 1:
35 | alert("Найден только один пользователь!");
36 | break;
37 | default:
38 | alert("Предупреждение! Найдено более одного пользователя!");
39 | break;
40 | }
41 |
42 | ---
43 |
44 | Результат выполнения агента:
45 |
46 | 
47 |
48 | ---
49 |
50 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
51 |
52 |
53 | ***
54 |
55 | Возврат к части 4
56 | Возврат к оглавлению
57 |
--------------------------------------------------------------------------------
/XmlDoc.md:
--------------------------------------------------------------------------------
1 | # Изменение атрибутов объекта. Использование встроенного объекта Документ
2 | ***
3 |
4 | Попробуем программно изменить фамилию тестового сотрудника.
5 |
6 | **Внимание**. Данное упражнение производит изменение в рабочей базе. Проверьте, что производится изменение данных только тестового пользователя.
7 |
8 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
9 |
10 | personArray = XQuery(_query_str);
11 | // Запросом отобран только один объект, но personArray является массивом объектов.
12 | // Поэтому мы выбираем первый элемент из массива personArray.
13 | _elem = ArrayOptFirstElem(personArray);
14 |
15 | // Пытаемся изменить электронный адрес тестового сотрудника
16 | _elem.email = "TestTestTest111@TestTestTest.Test.ru";
17 | alert(_elem.email);
18 |
19 |
20 |
21 | 
22 |
23 | Мы видим, что в процессе выполнения данного агента значение атрибута изменилось, но, если мы откроем карточку объекта, то мы увидим, что внесенное изменение в карточке не сохранилось.
24 |
25 | **Примечание** - Документы также широко используются при разработке шаблонов уведомлений и др. элементов системы WebTutor.
26 |
27 | Для того, чтобы иметь возможность вносить реальные изменения в значения атрибутов объекта, используется встроенный объект **XmlDoc** (**Документ**) (Об атрибутах и методах этого объекта – см. [http://docs.datex.ru/article.htm?id=5620203358492510980](http://docs.datex.ru/article.htm?id=5620203358492510980) ).
28 |
29 | Приведем простой пример работы с документом для изменения значения атрибута объекта **collaborator**.
30 |
31 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
32 |
33 | personArray = XQuery(_query_str);
34 | // Запросом отобран только один объект, но personArray является массивом объектов.
35 | // Поэтому мы выбираем первый элемент из массива personArray.
36 | _elem = ArrayOptFirstElem(personArray);
37 |
38 | alert(_elem.id);
39 |
40 | // Получить URL объекта
41 | doc_url = UrlFromDocID(_elem.id);
42 |
43 | // Открыть объект(XML-документ) используя его URL
44 | open_doc = OpenDoc(doc_url);
45 | // open_doc = объект типа XmlDoc
46 |
47 | // Пытаемся изменить электронный адрес тестового сотрудника
48 | open_doc.collaborator.email = "TestTestTest111@TestTestTest.Test.ru";
49 |
50 | // Сохранить документ
51 | open_doc.Save();
52 |
53 | alert(_elem.email);
54 |
55 | Теперь, если мы откроем в Администраторе системы вкладку **Сотрудники** и обновим данные клавишей **F5**. Видим, что электронный адрес в системе изменился:
56 |
57 |
58 | 
59 |
60 | ---
61 |
62 | После выполнения данного упражнения восстановите исходный электронный адрес сотрудника в Администраторе системы.
63 |
64 |
65 | ***
66 |
67 | Возврат к части 5
68 |
69 | Возврат к оглавлению
70 |
--------------------------------------------------------------------------------
/XmlDoc01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/XmlDoc01.png
--------------------------------------------------------------------------------
/XmlDoc02.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/XmlDoc02.PNG
--------------------------------------------------------------------------------
/activate_assessment.md:
--------------------------------------------------------------------------------
1 | # Назначение теста сотруднику
2 | ***
3 |
4 | Для назначения сотруднику теста используется функция:
5 | tools.activate_test_to_person( PersonID, _object.id );
6 |
7 | ---
8 |
9 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
10 |
11 | // Выполняем отбор сотрудника
12 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
13 |
14 | personArray = XQuery(_query_str);
15 | // Запросом отобран только один объект, но personArray является массивом объектов.
16 | // Поэтому мы выбираем первый объект из массива personArray.
17 | _elem = ArrayOptFirstElem(personArray);
18 |
19 |
20 | // Выполняем отбор теста
21 | _query_str = "for $elem in assessments where $elem/code='00000017' return $elem";
22 |
23 | FoundArray = XQuery(_query_str);
24 | // Запросом отобран только один объект, но FoundArray является массивом объектов.
25 | // Поэтому мы выбираем первый объект из массива FoundArray.
26 | _elem1 = ArrayOptFirstElem(FoundArray);
27 |
28 |
29 | PersonID = _elem.id;
30 |
31 | try
32 | {
33 | // Курс _object.id назначается сотруднику PersonID
34 | tools.activate_test_to_person( PersonID, _elem1.id );
35 | alert("Должен быть назначен один объект");
36 | }
37 | catch(err)
38 | {
39 | alert("ОШИБКА: невозможно активировать/добавить объект сотруднику." + err);
40 | continue;
41 | }
42 |
43 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**).
44 |
45 | ---
46 |
47 | Результат выполнения агента:
48 |
49 | 
50 |
51 | ---
52 |
53 | Проверьте, что сотруднику с именем 'Test Test Test' назначен указанный Вами тест.
54 |
55 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
56 |
57 |
58 |
59 | ***
60 |
61 | Возврат к части 6
62 |
63 | Возврат к оглавлению
64 |
--------------------------------------------------------------------------------
/activate_course.md:
--------------------------------------------------------------------------------
1 | # Назначение курса сотруднику
2 | ***
3 |
4 | Для назначения сотруднику курса используется функция:
5 |
6 | **tools.activate_course_to_person( PersonID, _object.id );**
7 |
8 |
9 | ---
10 |
11 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
12 |
13 | // Выполняем отбор сотрудника
14 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
15 |
16 | personArray = XQuery(_query_str);
17 | // Запросом отобран только один объект, но personArray является массивом объектов.
18 | // Поэтому мы выбираем первый объект из массива personArray.
19 | _elem = ArrayOptFirstElem(personArray);
20 |
21 | // Выполняем отбор курса
22 | _query_str = "for $elem in courses where $elem/code='OTM8' return $elem";
23 |
24 | FoundArray = XQuery(_query_str);
25 | // Запросом отобран только один объект, но FoundArray является массивом объектов.
26 | // Поэтому мы выбираем первый объект из массива FoundArray.
27 | _elem1 = ArrayOptFirstElem(FoundArray);
28 |
29 | PersonID = _elem.id;
30 |
31 | try
32 | {
33 | // Курс _object.id назначается сотруднику PersonID
34 | tools.activate_course_to_person( PersonID, _elem1.id );
35 | alert("Должен быть назначен один объект");
36 | }
37 | catch(err)
38 | {
39 | alert("ОШИБКА: невозможно активировать/добавить объект сотруднику." + err);
40 | continue;
41 | }
42 |
43 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**).
44 |
45 |
46 | ---
47 |
48 | Результат выполнения агента:
49 |
50 | 
51 |
52 | ---
53 |
54 | Проверьте, что сотруднику с именем 'Test Test Test' назначен указанный Вами курс.
55 |
56 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
57 |
58 |
59 |
60 | ***
61 |
62 | Возврат к части 6
63 |
64 | Возврат к оглавлению
65 |
--------------------------------------------------------------------------------
/agent.md:
--------------------------------------------------------------------------------
1 | # Что такое агент?
2 | ***
3 |
4 | Пользовательские программы в среде WebTutor называются **агентами**. Программирование в среде WebTutor производится, в основном, с помощью соответствующих агентов.
5 |
6 | Агенты в системе размещаются в WebTutor Administrator в разделе **Дизайнер - Агенты сервера**.
7 |
8 | 
9 |
10 | ---
11 |
12 | Откройте в WebTutor Administrator раздел **Агенты сервера**.
13 |
14 | В этом разделе обычно уже имеются некоторые агенты, предоставленные компанией WebSoft.
15 |
16 |
17 |
18 | Откройте карточку какого-нибудь агента и посмотите, как устроена карточка.
19 |
20 | 
21 |
22 | На карточке размещены 2 вкладки - **"Общие сведения"** и **"Выполняемый код"**.
23 |
24 | На вкладке **"Общие сведения"** можно увидеть **Код** агента и его **Название**. Может быть также установлена ссылка на файл выполняемого кода, расписание запуска агента, переменные, используемые в процессе работы агента, и др.
25 |
26 | На вкладке **"Выполняемый код"** размещается код, выполняемый агентом. Если была указана ссылка на файл выполняемого кода, то вкладка **"Выполняемый код"** может оставаться пустой.
27 |
28 | 
29 |
30 | В процессе работы с данным практикумом мы будем записывать выполняемый код на вкладке **"Выполняемый код"**.
31 |
32 |
33 | ***
34 |
35 |
36 | Возврат к оглавлению
37 |
--------------------------------------------------------------------------------
/agent01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/agent01.png
--------------------------------------------------------------------------------
/agent02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/agent02.png
--------------------------------------------------------------------------------
/agent03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/agent03.png
--------------------------------------------------------------------------------
/agent_code.md:
--------------------------------------------------------------------------------
1 | # Выполняемый код агента для пакетного назначения сотруднику набора курсов и тестов
2 | ***
3 |
4 | Соберем приведенные выше решения воедино.
5 |
6 | Предварительно скачайте [файл Excel](ttt1.xls) для загрузки.
7 |
8 |  **Внести изменения!** Измените файл, указав в нем коды курсов и тестов из своей информационной базы. Обратите внимание, что в данный файл нужно вставить коды реальных курсов и тестов из Вашей базы (коды курсов и тестов можно найти на карточках курсов и тестов, на вкладке **Общие сведения** в поле **Код**).
9 |
10 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
11 |
12 | // ******************ОПРЕДЕЛЕНИЕ СОТРУДНИКА*************************
13 | // Пример запроса: for $elem in collaborators where (contains($elem/fullname, 'Test')
14 | // and $elem/login = 'TestTestTest') return $elem
15 |
16 | try
17 | {
18 | // если агент выполняется на клиенте, то запросим файл ttt1.xls
19 | excelFileUrl = Screen.AskFileOpen( '', 'Выберите файл ttt1.xls' );
20 | }
21 | catch(err)
22 | {
23 | // агент должен выполняться на клиенте
24 | alert("Агент должен выполняться на клиенте. Нажмите кнопку Выполнить агент на стороне клиента.");
25 | }
26 |
27 | try
28 | {
29 | sourceList = OpenDoc( excelFileUrl, 'format=excel' );
30 |
31 | // Работаем с первым листом книги Excel
32 | // (нумерация загруженных в WebTutor листов начинается с 0;
33 | // первый лист имеет индекс 0 или задается с помощью функции ArrayOptFirstElem)
34 | lineArray = ArrayFirstElem( sourceList.TopElem );
35 | }
36 | catch(err)
37 | {
38 | alert("ОШИБКА: невозможно получить доступ к файлу " + excelFileUrl + ".");
39 | alert("Агент для активации курсов и тестов завершен аварийно.");
40 | return;
41 | }
42 |
43 | PersonID = 0;
44 |
45 | // Определение сотрудника, которому назначаются курсы и тесты
46 | // Производится отбор по ФИО и логину сотрудника
47 | // Пример запроса: for $elem in collaborators where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest') return $elem
48 | _query_str = "for $elem in collaborators where $elem/fullname = " + XQueryLiteral(lineArray[1][0]) +
49 | " and $elem/login = " + XQueryLiteral(lineArray[1][1]) + " return $elem";
50 | personArray = XQuery(_query_str);
51 |
52 | // Результатом отбора по запросу является массив
53 | // Работаем с первым (и единственным) элементом массива
54 | _elem = ArrayOptFirstElem(personArray);
55 | if (_elem == undefined)
56 | {
57 | alert("ОШИБКА: сотрудник " + lineArray[1][0] + " не найден.");
58 | continue;
59 | }
60 | PersonID = _elem.id;
61 |
62 | alert("Сотрудник: " + _elem.fullname);
63 |
64 |
65 | // ******************АКТИВАЦИЯ КУРСОВ*************************
66 |
67 | alert("Активация курсов");
68 |
69 | // Количество назначаемых курсов
70 | _counter_activate = 0;
71 |
72 | for (i = 1; i < ArrayCount(lineArray); i++)
73 | {
74 | // Коды курсов находятся в ячейках C2, C3, C4 и т.д.
75 | // Нумерация загруженных в WebTutor ячеек начинается с 0
76 | // (первый индекс – строка, второй – столбец)
77 | // Ячейке C2 соответствует индекс [1][2], ячейке C3 – индекс [2][2], C4 – индекс [3][2] и т.д.
78 | // Производится отбор по коду курса
79 | courseArray = XQuery("for $elem in courses where $elem/code = " +
80 | XQueryLiteral(lineArray[i][2]) + " return $elem");
81 |
82 | // Результатом отбора по запросу является массив
83 | // Работаем с первым (и единственным) элементом массива
84 | _object = ArrayOptFirstElem(courseArray);
85 |
86 | if (_object == undefined)
87 | {
88 | alert("ОШИБКА: объект с первичным ключом code = " + XQueryLiteral( lineArray[i][2] ) + " не найден.");
89 | continue;
90 | }
91 | try
92 | {
93 | // Курс _object.id назначается сотруднику PersonID
94 | tools.activate_course_to_person( PersonID, _object.id );
95 | alert( "Обработан курс " + i + " из " + (ArrayCount(lineArray)-1));
96 | _counter_activate++;
97 | }
98 | catch(err)
99 | {
100 | alert("ОШИБКА: невозможно активировать/добавить объект сотруднику." + err);
101 | continue;
102 | }
103 | }
104 |
105 | alert( (i - 1) + " курсов обработано, из них " + _counter_activate + " курсов успешно." );
106 |
107 |
108 | // ******************АКТИВАЦИЯ ТЕСТОВ*************************
109 | alert("Активация тестов");
110 |
111 | try
112 | {
113 | // Работаем со вторым листом книги Excel
114 | // (нумерация загруженных в WebTutor листов начинается с 0;
115 | // второй лист имеет индекс 1)
116 | lineArray1 = sourceList.TopElem[1];
117 | }
118 | catch(err)
119 | {
120 | alert(err);
121 | alert("Агент для активации курсов и тестов завершен аварийно.");
122 | return;
123 | }
124 |
125 | // Количество назначаемых тестов
126 | _counter_activate = 0;
127 |
128 | for (i = 1; i < ArrayCount(lineArray1); i++)
129 | {
130 | // Коды тестов находятся в ячейках A2, A3, A4 и т.д.
131 | // Нумерация загруженных в WebTutor ячеек начинается с 0
132 | // (первый индекс – строка, второй – столбец)
133 | // Ячейке A2 соответствует индекс [1][0] второго листа, ячейке A3 – индекс [2][0], A4 – индекс [3][0] и т.д.
134 | // Производится отбор по коду теста
135 | assessmentArray = XQuery("for $elem in assessments where $elem/code = " +
136 | XQueryLiteral(lineArray1[i][0]) + " return $elem");
137 |
138 | // Результатом отбора по запросу является массив
139 | // Работаем с первым (и единственным) элементом массива
140 | _object = ArrayOptFirstElem(assessmentArray);
141 |
142 | if (_object == undefined)
143 | {
144 | alert("ОШИБКА: объект с первичным ключом code = " + XQueryLiteral( lineArray1[i][0] ) + " не найден.");
145 | continue;
146 | }
147 | try
148 | {
149 | // Тест _object.id назначается сотруднику PersonID
150 | tools.activate_test_to_person( PersonID, _object.id );
151 | alert( "Обработан тест " + i + " из " + (ArrayCount(lineArray1)-1));
152 | _counter_activate++;
153 | }
154 | catch(err)
155 | {
156 | alert("ОШИБКА: невозможно активировать/добавить объект сотруднику." + err);
157 | continue;
158 | }
159 | }
160 |
161 | alert( (i - 1) + " тестов обработано, из них " + _counter_activate + " тестов успешно." );
162 |
163 |
164 |
165 |
166 | После запуска программы загрузите скачанный ранее файл **ttt1.xls**.
167 |
168 |
169 | ...
170 |
171 | ---
172 |
173 | Результат выполнения агента:
174 |
175 | 
176 |
177 | Проверьте, корректно ли были назначены курсы и тесты тестовому сотруднику.
178 |
179 | Внесите изменения в программу и в загружаемый файл Excel и понаблюдайте, как это повлияет на полученный результат.
180 |
181 | ***
182 |
183 | Возврат к части 6
184 |
185 | Возврат к оглавлению
186 |
--------------------------------------------------------------------------------
/agent_code01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/agent_code01.PNG
--------------------------------------------------------------------------------
/alert.md:
--------------------------------------------------------------------------------
1 | # Вывод на экран информационного окна: метод alert
2 | ***
3 |
4 | Синтаксис метода:
5 |
6 | `alert(сообщение)`
7 |
8 | ---
9 |
10 | Приведем примеры использования метода alert:
11 |
12 | alert("Привет, мир!");
13 | a = 1;
14 | alert("Значение переменной a равно " + a + "\n" + "Привет!" + "\t" + "Привет, мир!");
15 |
16 |
17 | Скопируйте приведенный код в тестовый агент на вкладку **"Выполняемый код"** и запустите агент, как это описано в разделе [Как запустить агент?](run_agent.md)
18 |
19 | ---
20 |
21 | Результат выполнения агента:
22 |
23 | Рис. alert01
24 |
25 | ---
26 |
27 | **Примечание** – Информационные окна взаимодействия с пользователем, вызываемые методами ***prompt*** и ***confirm***, которые используются в языке JavaScript, в среде WebTutor не действуют!
28 |
29 | Информационное окно alert имеет заголовок «Ошибка» - не обращаем на это внимания.
30 |
31 | ---
32 |
33 | Управляющие символы, наиболее часто используемые в сообщении в окне alert:
34 |
35 | \n – переход на следующую строку;
36 |
37 | \t – переход к следующей позиции горизонтальной табуляции.
38 |
39 | Подробнее об управляющих символах - см. .
40 |
41 |
42 |
43 | ***
44 |
45 |
46 | Возврат к части 1
47 | Возврат к оглавлению
48 |
--------------------------------------------------------------------------------
/array01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/array01.PNG
--------------------------------------------------------------------------------
/array02.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/array02.PNG
--------------------------------------------------------------------------------
/array03.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/array03.PNG
--------------------------------------------------------------------------------
/array04.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/array04.PNG
--------------------------------------------------------------------------------
/arrays.md:
--------------------------------------------------------------------------------
1 | # Массивы
2 | ***
3 |
4 | ## Объявление массива
5 |
6 | Массивы в системе WebTutor в общем случае требуют объявления:
7 |
8 | // одномерный массив
9 | var array1 = new Array();
10 | или
11 | var array1 = [5,6,4,7,3,8];
12 |
13 |
14 | // двумерный массив
15 | var array2 = [
16 | [1, 2, 3],
17 | [10, 20, 30],
18 | [100, 120, 130]];
19 |
20 |
21 | Обращение к элементам массива имеет следующий вид:
22 |
23 | // одномерный массив
24 | array1[0]
25 |
26 | // двумерный массив
27 | array2[0][2]
28 |
29 | Нумерация членов массива начинается с 0.
30 |
31 | Для работы с массивами используются встроенные функции. В системе WebTutor часто встречаются следующие встроенные функции:
32 |
33 | **ArrayCount(НаименованиеМассива)** - возвращает количество элементов массива.
34 |
35 | **ArrayOptFirstElem(НаименованиеМассива)** - возвращает первый элемент заданного массива.
36 |
37 | ---
38 |
39 | К массивам применима конструкция цикла **for... in**.
40 |
41 | ---
42 |
43 | Примеры:
44 |
45 | var a = new Array();
46 | a[0] = 5;
47 | a[1] = 6;
48 | a[2] = 4;
49 | a[3] = 7;
50 | a[4] = 3;
51 | a[5] = 8;
52 |
53 | // Расчет суммы элементов массива
54 | summa01 = 0;
55 | for (i = 0; i < ArrayCount(a); i++)
56 | {
57 | summa01 = summa01 + a[i];
58 | }
59 | alert("Сумма элементов массива равна " + summa01 + "\n" +
60 | "Количество элементов массива равно " + ArrayCount(a) + "\n" +
61 | "Первый элемент массива равен " + ArrayOptFirstElem(a));
62 |
63 | ---
64 |
65 | Результат выполнения агента:
66 |
67 | 
68 |
69 | Изменяйте значения элементов массива и понаблюдайте, как это влияет на полученный результат.
70 |
71 | ---
72 |
73 | var a = [5,6,4,7,3,8];
74 |
75 | // Расчет суммы элементов массива
76 | summa01 = 0;
77 | for (i = 0; i < ArrayCount(a); i++)
78 | {
79 | summa01 = summa01 + a[i];
80 | }
81 | alert("Сумма элементов массива равна " + summa01 + "\n" +
82 | "Количество элементов массива равно " + ArrayCount(a) + "\n" +
83 | "Первый элемент массива равен " + ArrayOptFirstElem(a));
84 |
85 | ---
86 |
87 | Результат выполнения агента:
88 |
89 | 
90 |
91 | Изменяйте значения элементов массива и понаблюдайте, как это влияет на полученный результат.
92 |
93 | ---
94 |
95 | ## Обход массива с помощью цикла for... in
96 |
97 | var a = [5,6,4,7,3,8];
98 |
99 | // Расчет суммы элементов массива
100 | summa01 = 0;
101 | for (a1 in a)
102 | {
103 | summa01 = summa01 + a1;
104 | }
105 | alert("Сумма элементов массива равна " + summa01 + "\n" +
106 | "Количество элементов массива равно " + ArrayCount(a) + "\n" +
107 | "Первый элемент массива равен " + ArrayOptFirstElem(a));
108 |
109 | ---
110 |
111 | Результат выполнения агента:
112 |
113 | 
114 |
115 | Изменяйте значения элементов массива и понаблюдайте, как это влияет на полученный результат.
116 |
117 | ---
118 |
119 | ## Работа с двумерным массивом
120 |
121 | var array2 = [
122 | [1, 2, 3],
123 | [10, 20, 30],
124 | [100, 120, 130]];
125 |
126 | alert("Элемент array2[0][2] равен " + array2[0][2]);
127 |
128 | ---
129 |
130 | Результат выполнения агента:
131 |
132 | 
133 |
134 | Изменяйте значения элементов массива и понаблюдайте, как это влияет на полученный результат.
135 |
136 |
137 | ***
138 | Возврат к части 1
139 | Возврат к оглавлению
140 |
--------------------------------------------------------------------------------
/assessment.md:
--------------------------------------------------------------------------------
1 | # Структура каталога assessment (Тест)
2 |
3 |
4 | ***
5 |
6 | Ознакомьтесь со [структурой каталога assessment (Тест)](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment) (версия 3.4.0.54 (2017.11.03)).
7 |
8 | В дальнейшем мы будем работать с объектами данного типа и выполнять с ними некоторые практические занятия.
9 |
10 | ---
11 |
12 | id – Тип поля: integer – ID
13 |
14 | code – Тип поля: string – Код
15 |
16 | title – Тип поля: string – Название теста
17 |
18 | status – Тип поля: string – Статус – common.course_test_states
19 |
20 | duration – Тип поля: integer – Продолжительность в минутах
21 |
22 | duration_days – Тип поля: integer – Продолжительность в днях
23 |
24 | passing_score – Тип поля: integer – Проходной балл
25 |
26 | not_display_unfinished_score – Тип поля: bool – Не показывать набранный балл для незавершенных тестов
27 |
28 | is_open – Тип поля: bool – Открытый тест (возможно самостоятельно назначить тест)
29 |
30 | external_type – Тип поля: string – Тип внешнего источника – common.assessment_external_types
31 |
32 | modification_date – Тип поля: date – Дата модификации
33 |
34 | app_instance_id – Тип поля: string – Код сервера
35 |
36 | knowledge_parts – Тип поля: string – Значения карты знаний
37 |
38 | tags – Тип поля: string – Тэги
39 |
40 | experts – Тип поля: string – Эксперты
41 |
42 | user_access_role – Тип поля: string – Роль пользователя – Ссылка на другой каталог: [access_roles](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=access_role)
43 |
44 | user_group_id – Тип поля: integer – Группа пользователя – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
45 |
46 |
47 |
48 | ***
49 | Возврат к части 3
50 | Возврат к оглавлению
51 |
--------------------------------------------------------------------------------
/assessment01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/assessment01.png
--------------------------------------------------------------------------------
/assessment02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/assessment02.png
--------------------------------------------------------------------------------
/assessment03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/assessment03.png
--------------------------------------------------------------------------------
/assessment04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/assessment04.png
--------------------------------------------------------------------------------
/assessment1.md:
--------------------------------------------------------------------------------
1 | # Разбор объектной модели assessment (Тест) в режиме просмотра каталога
2 | ***
3 |
4 | Нажимаем **Ctrl+Shift+F8** и в открывшемся окне просмотра каталога вводим текст запроса - отбор теста по коду:
5 |
6 | **for $elem in assessments where $elem/code = '00000017' return $elem**
7 |
8 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**).
9 |
10 | ---
11 |
12 | Находим искомый тест.
13 |
14 | На следующих скриншотах показаны значения всех полей (атрибутов) объекта **assessment**:
15 |
16 |
17 | 
18 |
19 |
20 | 
21 |
22 |
23 | ---
24 |
25 | Ниже приводятся все атрибуты объекта, отображенные в режиме просмотра каталога:
26 |
27 | **id** = '6325699241730391195'
28 |
29 | **code** = '00000017'
30 |
31 | **title** = '4 арх. Пожарная безопасность'
32 |
33 | **status** = 'publish'
34 |
35 | **duration** = 40
36 |
37 | **duration_days** = 90
38 |
39 | **passing_score** = 20
40 |
41 | **not_display_unfinished_score** = false
42 |
43 | **is_open** = false
44 |
45 | **external_type** – атрибут неопределен
46 |
47 | **modification_date** = '09.01.2018 12:43:29'
48 |
49 | **app_instance_id** – атрибут неопределен
50 |
51 | **knowledge_parts** – атрибут неопределен
52 |
53 | **tags** – атрибут неопределен
54 |
55 | **experts** – атрибут неопределен
56 |
57 | **user_access_role** – атрибут неопределен
58 |
59 | **user_group_id** – атрибут неопределен
60 |
61 |
62 | ***
63 | Возврат к части 3
64 | Возврат к оглавлению
65 |
--------------------------------------------------------------------------------
/blue_15x15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/blue_15x15.png
--------------------------------------------------------------------------------
/blue_20x20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/blue_20x20.png
--------------------------------------------------------------------------------
/catalogs.md:
--------------------------------------------------------------------------------
1 | # Справочник каталогов
2 | ***
3 |
4 | Ниже приводится [Cправочник каталогов WebTutor](http://news.websoft.ru/view_doc.html?mode=catalogs) (версия 3.4.0.54 (2017.11.03)):
5 |
6 | ---
7 |
8 | [org](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=org) – Организация
9 |
10 | [subdivision](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=subdivision) – Подразделение
11 |
12 | [subdivision_group](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=subdivision_group) – Группа подразделений
13 |
14 | [position](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position) – Должность
15 |
16 | [collaborator](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=collaborator) – Сотрудник
17 |
18 | [group](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group) – Группа
19 |
20 | [position_common](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position_common) – Типовая должность
21 |
22 | [position_common_instruction](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position_common_instruction) – Должностная инструкция
23 |
24 | [qualification](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=qualification) – Квалификация
25 |
26 | [qualification_assignment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=qualification_assignment) – Присвоение квалификации
27 |
28 | [position_family](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position_family) – Семейство должностей
29 |
30 | [availability_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=availability_plan) – План доступности
31 |
32 | [benefit](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=benefit) – Тип привилегий
33 |
34 | [salary_survey_source](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=salary_survey_source) – Источник обзоров зарплат
35 |
36 | [payment_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=payment_type) – Тип выплат
37 |
38 | [position_level](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position_level) – Уровень должности
39 |
40 | [payment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=payment) – Выплата сотруднику
41 |
42 | [salary_survey](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=salary_survey) – Обзор зарплат
43 |
44 | [benefit_item](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=benefit_item) – Привелегия
45 |
46 | [good](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=good) – Товар
47 |
48 | [good_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=good_type) – Тип товаров
49 |
50 | [good_instance](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=good_instance) – Экземпляр товара
51 |
52 | [basket](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=basket) – Корзина
53 |
54 | [order](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=order) – Заказ
55 |
56 | [outstaff_provider](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=outstaff_provider) – Провайдер временного персонала
57 |
58 | [outstaff_contract](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=outstaff_contract) – Контракт на временный персонал
59 |
60 | [outstaff_order](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=outstaff_order) – Заказ на временный персонал
61 |
62 | [outstaff_order_execution](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=outstaff_order_execution) – Исполнение заказа на временный персонал
63 |
64 | [knowledge_classifier](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=knowledge_classifier) – Классификатор знаний
65 |
66 | [knowledge_part](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=knowledge_part) – Значение карты знаний
67 |
68 | [knowledge_part_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=knowledge_part_type) – Тип значение карты знаний
69 |
70 | [knowledge_part_level](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=knowledge_part_level) – Категория значения карты знаний
71 |
72 | [knowledge_profile](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=knowledge_profile) – Профиль знаний
73 |
74 | [expert](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=expert) – Эксперт
75 |
76 | [expert_question](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=expert_question) – Вопрос эксперту
77 |
78 | [acquaint](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=acquaint) – Ознакомление
79 |
80 | [tag](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=tag) – Тег
81 |
82 | [book](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=book) – Книга
83 |
84 | [article](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=article) – Статья
85 |
86 | [career_reserve](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=career_reserve) – Развитие карьеры
87 |
88 | [resume](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=resume) – Резюме
89 |
90 | [personnel_reserve](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=personnel_reserve) – Кадровый резерв
91 |
92 | [personnel_committee](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=personnel_committee) – Кадровый комитет
93 |
94 | [committee_member](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=committee_member) – Участник кадрового комитета
95 |
96 | [exclusion_reason](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=exclusion_reason) – Основание для исключения
97 |
98 | [talent_pool_nomination](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=talent_pool_nomination) – Способ выдвижения в резерв
99 |
100 | [typical_development_program](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=typical_development_program) – Типовая программа развития
101 |
102 | [career_reserve_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=career_reserve_type) – Тип кадрового резерва
103 |
104 | [skill](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=skill) – Навык
105 |
106 | [professional_area](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=professional_area) – Профессиональная область
107 |
108 | [development_potential](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=development_potential) – Потенциал развития
109 |
110 | [efficiency_estimation](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=efficiency_estimation) – Оценка эффективности
111 |
112 | [risk_perspective](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=risk_perspective) – Уровень риска
113 |
114 | [risk_level](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=risk_level) – Фактор риска
115 |
116 | [successor](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=successor) – Преемник
117 |
118 | [readiness_level](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=readiness_level) – Уровень готовности
119 |
120 | [key_position](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=key_position) – Ключевая должность
121 |
122 | [key_position_threat](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=key_position_threat) – Угроза ключевой должности
123 |
124 | [section_instruction](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=section_instruction) – Раздел инструкции
125 |
126 | [tutor](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=tutor) – Наставник
127 |
128 | [course](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=course) – Электронный курс
129 |
130 | [course_module](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=course_module) – Учебный модуль
131 |
132 | [active_learning](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=active_learning) – Незаконченный (незавершенный) электронный курс
133 |
134 | [learning](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=learning) – Законченный (завершенный) электронный курс
135 |
136 | [learning_part](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=learning_part) – Раздел курс
137 |
138 | [item](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=item) – Вопрос
139 |
140 | [assessment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment) – Тест
141 |
142 | [test_project](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=test_project) – Проект теста
143 |
144 | [role](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=role) – Категория
145 |
146 | [active_test_learning](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=active_test_learning) – Незаконченный (незавершенный) тест
147 |
148 | [test_learning](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=test_learning) – Законченный (завершенный) тест
149 |
150 | [testing_system](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=testing_system) – Система тестирования
151 |
152 | [document](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=document) – Раздел портала
153 |
154 | [document_comment_entry](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=document_comment_entry) – Комментарии к документу портала
155 |
156 | [poll](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=poll) – Опрос
157 |
158 | [poll_result](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=poll_result) – Результат опроса
159 |
160 | [poll_procedure](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=poll_procedure) – Процедура опроса
161 |
162 | [forum](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=forum) – Форум
163 |
164 | [forum_entry](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=forum_entry) – Статья форума
165 |
166 | [forum_theme_read_by_collaborator](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=forum_theme_read_by_collaborator) – Прочтение темы сотрудником
167 |
168 | [blog](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=blog) – Блог
169 |
170 | [blog_entry](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=blog_entry) – Сообщение блога
171 |
172 | [blog_entry_comment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=blog_entry_comment) – Комментарий сообщения блога
173 |
174 | [chat](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=chat) – Чат
175 |
176 | [banner](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=banner) – Баннер
177 |
178 | [subscription](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=subscription) – Подписка
179 |
180 | [host](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=host) – Узел
181 |
182 | [site](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=site) – Сайт
183 |
184 | [web_design](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=web_design) – Дизайн портала
185 |
186 | [active_web_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=active_web_template) – Текущая сессия портала
187 |
188 | [like](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=like) – Like
189 |
190 | [change](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=change) – Изменение
191 |
192 | [transaction](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=transaction) – Транзакция
193 |
194 | [invoice](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=invoice) – Оплата
195 |
196 | [account](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=account) – Билинговый счет
197 |
198 | [expense_item](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=expense_item) – Статья затрат
199 |
200 | [cost_center](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cost_center) – Центр затрат
201 |
202 | [budget_period](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=budget_period) – Бюджетный период
203 |
204 | [pay_phase](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=pay_phase) – Этап оплаты
205 |
206 | [budget](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=budget) – Бюджет
207 |
208 | [budget_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=budget_type) – Тип бюджета
209 |
210 | [contract](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contract) – Договор
211 |
212 | [level](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=level) – Уровень
213 |
214 | [education_org](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=education_org) – Обучающая организация
215 |
216 | [education_method](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=education_method) – Учебная программа
217 |
218 | [compound_program](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=compound_program) – Модульная программа
219 |
220 | [education_program](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=education_program) – Набор программ
221 |
222 | [event](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event) – Мероприятие
223 |
224 | [event_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event_type) – Тип мероприятия
225 |
226 | [event_result](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event_result) – Результат мероприятия
227 |
228 | [lector](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=lector) – Преподаватель
229 |
230 | [object_resource](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=object_resource) – Оборудование
231 |
232 | [education_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=education_plan) – План обучения
233 |
234 | [training_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=training_plan) – План мероприятий
235 |
236 | [traning_order](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=traning_order) – Приказ на обучение
237 |
238 | [contest](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contest) – Конкурс
239 |
240 | [participant](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=participant) – Участник конкурса
241 |
242 | [place](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=place) – Расположение
243 |
244 | [resource](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=resource) – Ресурс базы
245 |
246 | [resource_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=resource_type) – Тип ресурса базы
247 |
248 | [script_queue_elem](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=script_queue_elem) – Очередь скриптов
249 |
250 | [request](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=request) – Заявка
251 |
252 | [response](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=response) – Отзыв
253 |
254 | [discharge](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=discharge) – Выгрузки из базы
255 |
256 | [tenancy](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=tenancy) – Экземпляр
257 |
258 | [webinar_system](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=webinar_system) – Система вебинаров
259 |
260 | [library_system](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_system) – Система библиотек
261 |
262 | [server_agent](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=server_agent) – Агент сервера
263 |
264 | [notification](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=notification) – Тип уведомления
265 |
266 | [notification_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=notification_template) – Шаблон уведомления
267 |
268 | [workflow](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=workflow) – Тип документооборота
269 |
270 | [exchange_server](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=exchange_server) – Сервер обмена данными
271 |
272 | [file_source](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=file_source) – Источники файлов
273 |
274 | [custom_report](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=custom_report) – Настраиваемый отчет
275 |
276 | [request_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=request_type) – Тип заявки
277 |
278 | [response_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=response_type) – Тип отзыва
279 |
280 | [event_result_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event_result_type) – Тип результата мероприятия
281 |
282 | [notification_system](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=notification_system) – Система уведомлений
283 |
284 | [coding](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=coding) – Нумератор
285 |
286 | [doc_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=doc_type) – Тип документов
287 |
288 | [custom_web_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=custom_web_template) – Настраиваемый Web-шаблон
289 |
290 | [custom_web_template_group](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=custom_web_template_group) – Группа Web-шаблонов
291 |
292 | [digital_signature](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=digital_signature) – Электронно-цифровая подпись
293 |
294 | [project](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=project) – Проект
295 |
296 | [project_participant](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=project_participant) – Участник проекта
297 |
298 | [contact](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contact) – Контакты
299 |
300 | [contact_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contact_type) – Тип контакта
301 |
302 | [contact_result](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contact_result) – Результат контакта
303 |
304 | [kpi](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=kpi) – KPI
305 |
306 | [kpi_profile](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=kpi_profile) – Профиль KPI
307 |
308 | [competence](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=competence) – Компетенция
309 |
310 | [indicator](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=indicator) – Индикатор
311 |
312 | [competence_profile](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=competence_profile) – Профиль компетенций
313 |
314 | [assessment_appraise](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_appraise) – Процедура оценки
315 |
316 | [pa](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=pa) – Анкета
317 |
318 | [supplementary_question](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=supplementary_question) – Дополнительный вопрос
319 |
320 | [assessment_result_recommend](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_result_recommend) – Рекомендации по результатам оценки
321 |
322 | [competence_block](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=competence_block) – Блоки компетенций
323 |
324 | [development_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=development_plan) – План развития
325 |
326 | [bonus_profile](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=bonus_profile) – Профиль премирования
327 |
328 | [bonus_item](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=bonus_item) – Результат премирования
329 |
330 | [development_method](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=development_method) – Способ развития
331 |
332 | [assessment_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_plan) – План оценки
333 |
334 | [print_form](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=print_form) – Печатная форма
335 |
336 | [covenant](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=covenant) – Ученический договор
337 |
338 | [user_assignment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=user_assignment) – Назначения для пользователей
339 |
340 | [assessment_appraise_matrix](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_appraise_matrix) – Матрица ответственности
341 |
342 | [competence_profile_family](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=competence_profile_family) – Семейство профилей
343 |
344 | [rating](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=rating) – Рейтинг
345 |
346 | [exercise](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=exercise) – Упражнение
347 |
348 | [operation](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=operation) – Операция
349 |
350 | [boss_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=boss_type) – Тип руководителя
351 |
352 | [grade](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=grade) – Грейд
353 |
354 | [objective_translate](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=objective_translate) – Трансляция цели
355 |
356 | [position_assessment_form](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position_assessment_form) – Оценка должностей
357 |
358 | [task](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=task) – Задача
359 |
360 | [task_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=task_type) – Тип задачи
361 |
362 | [action_report](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=action_report) – Событие базы
363 |
364 | [active_notification](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=active_notification) – Неотправленное уведомление
365 |
366 | [connection](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=connection) – Сессия обучения
367 |
368 | [order_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=order_type) – Установки для приказов по умолчанию
369 |
370 | [contract_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=contract_type) – Тип договора
371 |
372 | [system_event](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=system_event) – Системные события
373 |
374 | [statistic_rec](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=statistic_rec) – Показатель
375 |
376 | [statistic_data](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=statistic_data) – Значение показателя
377 |
378 | [event_assessment_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event_assessment_plan) – План оценки по мероприятию
379 |
380 | [certificate](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=certificate) – Сертификат
381 |
382 | [certificate_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=certificate_type) – Тип сертификата
383 |
384 | [region](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=region) – Регион
385 |
386 | [vacancy_subscription](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vacancy_subscription) – Подписка на вакансии
387 |
388 | [selected_vacancy](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=selected_vacancy) – Избранная вакансия
389 |
390 | [vacancy_response](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vacancy_response) – Отклик на вакансию
391 |
392 | [vacancy](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vacancy) – Вакансия
393 |
394 | [candidate_status_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=candidate_status_type) – Статус кандидата
395 |
396 | [work_schedule](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=work_schedule) – График работы
397 |
398 | [vacancy_source](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vacancy_source) – Источник вакансии
399 |
400 | [selected_resume](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=selected_resume) – Отобранное резюме
401 |
402 | [vacancy_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vacancy_type) – Тип вакансий
403 |
404 | [recruitment_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=recruitment_plan) – План подбора
405 |
406 | [recruitment_method](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=recruitment_method) – Способ подбора
407 |
408 | [candidate_source](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=candidate_source) – Источник кандидатов
409 |
410 | [recommendation](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=recommendation) – Рекомендация на вакансию
411 |
412 | [estaff_event_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=estaff_event_type) – Тип события E-Staff
413 |
414 | [estaff_event](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=estaff_event) – Обработка события E-Staff
415 |
416 | [submission](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=submission) – Отчетная форма
417 |
418 | [submission_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=submission_type) – Тип отчетной формы
419 |
420 | [override_web_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=override_web_template) – Элемент шаблона
421 |
422 | [bp](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=bp) – Бизнес-процесс
423 |
424 | [bp_role](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=bp_role) – Роль в бизнес-процессе
425 |
426 | [person_object_link](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=person_object_link) – Контент сотрудника
427 |
428 | [person_object_profile](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=person_object_profile) – Профиль редактирования контента
429 |
430 | [custom_admin_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=custom_admin_template) – Шаблон клиенсткой части
431 |
432 | [cl_course](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_course) – Курс CourseLab
433 |
434 | [cl_module](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_module) – Модуль CourseLab
435 |
436 | [cl_slide](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_slide) – Слайд CourseLab
437 |
438 | [cl_object](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_object) – Объект CourseLab
439 |
440 | [cl_shape](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_shape) – Автофигура CourseLab
441 |
442 | [library_material](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material) – Материал библиотеки
443 |
444 | [library_material_item](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_item) – Экземпляр материала библиотеки
445 |
446 | [library_section](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_section) – Раздел библиотеки
447 |
448 | [library_material_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_type) – Вид материала
449 |
450 | [library_material_format](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_format) – Формат материала
451 |
452 | [library_material_comment](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_comment) – Отзыв о материале
453 |
454 | [library_material_viewing](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_viewing) – Просмотр материала библиотеки
455 |
456 | [license](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=license) – Лицензия библиотеки
457 |
458 | [library_material_source_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=library_material_source_type) – Тип входных данных
459 |
460 | [repositorium](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=repositorium) – Репозиторий
461 |
462 | [vendor_state](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=vendor_state) – Статус вендора
463 |
464 | [org_vendor_state](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=org_vendor_state) – Статус организации у вендора
465 |
466 | [remote_action](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=remote_action) – Удаленное действие
467 |
468 | [remote_collection](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=remote_collection) – Выборка
469 |
470 | [download_package](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=download_package) – Скаченный пакет данных
471 |
472 | [upload_package](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=upload_package) – Пакет данных
473 |
474 | [object_version](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=object_version) – Версия объекта
475 |
476 | [user_data](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=user_data) – Пользовательские данные
477 |
478 | [profiling_record](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=profiling_record) – Profiling record
479 |
480 | [dn_auditorium](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_auditorium) – Аудитория
481 |
482 | [dn_discipline](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_discipline) – Дисциплина
483 |
484 | [dn_block_discipline](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_block_discipline) – Блок дисциплин
485 |
486 | [dn_academ_year](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_academ_year) – Учебный год
487 |
488 | [dn_control_form](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_control_form) – Форма контроля
489 |
490 | [dn_educat_event](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_educat_event) – Форма проведения учебного мероприятия
491 |
492 | [dn_educat_form](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_educat_form) – Форма обучения
493 |
494 | [dn_special](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_special) – Специальность
495 |
496 | [dn_specialization](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_specialization) – Специализация
497 |
498 | [dn_program_discipl](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_program_discipl) – Программа дисциплины
499 |
500 | [dn_prog_disc_append](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_prog_disc_append) – Приложение к программе дисциплины
501 |
502 | [dn_edu_condition](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_edu_condition) – Условие обучения
503 |
504 | [dn_train_method_complex](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_train_method_complex) – Учебно-методический комплекс
505 |
506 | [dn_term](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_term) – Семестр
507 |
508 | [dn_student](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_student) – Студент
509 |
510 | [dn_stud_centrtest_result](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_stud_centrtest_result) – Результат ЕГЭ
511 |
512 | [dn_stud_group](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_stud_group) – Учебная группа
513 |
514 | [dn_stream](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_stream) – Поток
515 |
516 | [dn_subject_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_subject_plan) – Тематический план
517 |
518 | [dn_ind_educat_plan](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_ind_educat_plan) – Индивидуальный план обучения
519 |
520 | [dn_work_curriculum](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_work_curriculum) – Учебный план
521 |
522 | [dn_lesson](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_lesson) – Занятие
523 |
524 | [dn_schedule](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_schedule) – Расписание
525 |
526 | [dn_control_event](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_control_event) – Контрольное мероприятие
527 |
528 | [dn_register](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_register) – Ведомость
529 |
530 | [dn_academ_debt](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=dn_academ_debt) – Академическая задолженность
531 |
532 | [plugin](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=plugin) – Плагин
533 |
534 | [web_rule](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=web_rule) – Правило
535 |
536 | [external_system](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=external_system) – Внешняя система
537 |
538 | [walkthrough](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=walkthrough) – Пошаговое прохождение
539 |
540 | [statement](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=statement) – Учебная активность
541 |
542 | [activity](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=activity) – Тип учебной активности
543 |
544 | [activity_state](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=activity_state) – Статус учебной активности
545 |
546 | [learning_storage](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=learning_storage) – Хранилище учебных активностей
547 |
548 | [kpi_value](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=kpi_value) – Значение KPI
549 |
550 | [reprimand](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=reprimand) – Дисциплинарное взыскание
551 |
552 | [reprimand_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=reprimand_type) – Тип взыскания
553 |
554 | [acquaint_assign](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=acquaint_assign) – Назначенное ознакомление
555 |
556 | [chatbot](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=chatbot) – Чат-бот
557 |
558 | [chatbot_chat](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=chatbot_chat) – Чат
559 |
560 | [chatbot_stage](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=chatbot_stage) – Этап чат-бота
561 |
562 | [chatbot_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=chatbot_type) – Тип чат-бота
563 |
564 | [custom_chatbot_template](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=custom_chatbot_template) – Настраиваемый шаблон для чат-ботов
565 |
566 | [component_package](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=component_package) – Полезные компоненты софта
567 |
568 | [mobile_app_config](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=mobile_app_config) – Настройки мобильного приложения
569 |
570 | [device_reg](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=device_reg) – Подключенное устройство
571 |
572 | [cc_course](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cc_course) – Курсы
573 |
574 | [cc_exthd_work_type](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cc_exthd_work_type) – Тип работы
575 |
576 | [cc_exthd_sla](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cc_exthd_sla) – Тип SLA расширенной техподдержки
577 |
578 | [cc_exthd_agreement](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cc_exthd_agreement) – Договор о расширенной техподдержке
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 | ---
588 |
589 | Для выполнения практических занятий нам понадобятся только отдельные каталоги из приведенного выше перечня. Кроме того, обратите внимание, что в вашей системе некоторые объекты могут отсутствовать.
590 |
591 | ***
592 | Возврат к части 3
593 | Возврат к оглавлению
594 |
--------------------------------------------------------------------------------
/collaborator.md:
--------------------------------------------------------------------------------
1 | # Структура каталога collaborator (Сотрудник)
2 |
3 |
4 | ***
5 |
6 | Ознакомьтесь со [структурой каталога collaborator (Сотрудник)](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=collaborator) (версия 3.4.0.54 (2017.11.03)).
7 |
8 | Также мы будем далее называть сотрудников также **пользователями** или **обучающимися**.
9 |
10 | В дальнейшем мы будем работать с объектами данного типа и выполнять с ними некоторые практические занятия.
11 |
12 | ---
13 |
14 | **id** – Тип поля: integer – ID
15 |
16 | **code** – Тип поля: string – Код
17 |
18 | **fullname** – Тип поля: string – ФИО
19 |
20 | **login** – Тип поля: string – Логин
21 |
22 | **short_login** – Тип поля: string – Логин без домена
23 |
24 | **lowercase_login** – Тип поля: string – Логин в нижнем регистре
25 |
26 | **email** – Тип поля: string – Email
27 |
28 | **phone** – Тип поля: string – Телефон
29 |
30 | **mobile_phone** – Тип поля: string – Мобильный телефон
31 |
32 | **birth_date** – Тип поля: date – Дата рождения
33 |
34 | **sex** – Тип поля: string – Пол
35 |
36 | **pict_url** – Тип поля: string – URL к файлу фотографии
37 |
38 | **position_id** – Тип поля: integer – Должность – Ссылка на другой каталог: [positions](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=position)
39 |
40 | **position_name** – Тип поля: string – Название должности
41 |
42 | **position_parent_id** – Тип поля: integer – Подразделение – Ссылка на другой каталог: [subdivisions](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=subdivision)
43 |
44 | **position_parent_name** – Тип поля: string – Название подразделения
45 |
46 | **org_id** – Тип поля: integer – Организация – Ссылка на другой каталог: [orgs](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=org)
47 |
48 | **org_name** – Тип поля: string – Название организации
49 |
50 | **web_banned** – Тип поля: bool – Запрещен доступ на портал
51 |
52 | **is_arm_admin** – Тип поля: bool – Является пользователем интерфейса администратора
53 |
54 | **is_content_admin** – Тип поля: bool – Является редактором контента
55 |
56 | **role_id** – Тип поля: string – Роль – Ссылка на другой каталог: [access_roles](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=access_role)
57 |
58 | **is_candidate** – Тип поля: bool – Является кандидатом
59 |
60 | **candidate_status_type_id** – Тип поля: integer – Статус кандидата – Ссылка на другой каталог: [candidate_status_types](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=candidate_status_type)
61 |
62 | **is_outstaff** – Тип поля: bool – Является временным
63 |
64 | **is_dismiss** – Тип поля: bool – Является уволенным
65 |
66 | **position_date** – Тип поля: date – Дата вступления в должность
67 |
68 | **hire_date** – Тип поля: date – Дата приема
69 |
70 | **dismiss_date** – Тип поля: date – Дата увольнения
71 |
72 | **in_request_black_list** – Тип поля: bool – В "черном списке" на подачу заявок
73 |
74 | **level_id** – Тип поля: integer – Уровень – Ссылка на другой каталог: [levels](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=level)
75 |
76 | **knowledge_parts** – Тип поля: string – Значения карты знаний
77 |
78 | **tags** – Тип поля: string – Тэги
79 |
80 | **experts** – Тип поля: string – Эксперты
81 |
82 | **current_state** – Тип поля: string – Текущее состояние
83 |
84 | **development_potential_id** – Тип поля: integer – Потенциал развития – Ссылка на другой каталог: [development_potentials](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=development_potential)
85 |
86 | **efficiency_estimation_id** – Тип поля: integer – Оценка эффективности – Ссылка на другой каталог: [efficiency_estimations](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=efficiency_estimation)
87 |
88 | **modification_date** – Тип поля: date – Дата модификации
89 |
90 | **app_instance_id** – Тип поля: string – Код сервера
91 |
92 |
93 |
94 |
95 | ***
96 | Возврат к части 3
97 | Возврат к оглавлению
98 |
--------------------------------------------------------------------------------
/collaborator01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator01.png
--------------------------------------------------------------------------------
/collaborator02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator02.png
--------------------------------------------------------------------------------
/collaborator03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator03.png
--------------------------------------------------------------------------------
/collaborator04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator04.png
--------------------------------------------------------------------------------
/collaborator05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator05.png
--------------------------------------------------------------------------------
/collaborator06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/collaborator06.png
--------------------------------------------------------------------------------
/collaborator1.md:
--------------------------------------------------------------------------------
1 | # Разбор объектной модели collaborator (Сотрудник) в режиме просмотра каталога
2 | ***
3 |
4 | Добавляем нового (тестового) сотрудника (пользователя) и заполняем поля карточки сотрудника, как это показано на двух следующих скриншотах:
5 |
6 | 
7 |
8 | 
9 |
10 | **Внимание!** В качестве электронного адреса нужно ввести несуществующий адрес, так как на данный адрес может быть направлены сообщения системы WebTutor.
11 |
12 | ---
13 |
14 | Нажимаем **Ctrl+Shift+F8** и в открывшемся окне просмотра каталога вводим текст запроса.
15 |
16 | **for $elem in collaborators where contains($elem/fullname, 'Test') return $elem**
17 |
18 | ---
19 |
20 | Находим тестового пользователя.
21 |
22 | На следующих скриншотах показаны значения всех полей (атрибутов) объекта **collaborator** для тестового сотрудника (пользователя):
23 |
24 | 
25 |
26 | 
27 |
28 | 
29 |
30 | 
31 |
32 | ---
33 |
34 | Ниже приводятся все атрибуты объекта, отображенные в режиме просмотра каталога для тестового сотрудника (пользователя):
35 |
36 | **id** = 6511610587817075498
37 |
38 | **code** – атрибут неопределен
39 |
40 | **fullname** = 'Test Test Test'
41 |
42 | **login** = 'TestTestTest'
43 |
44 | **short_login** = 'TestTestTest'
45 |
46 | **lowercase_login** = 'testtesttest'
47 |
48 | **email** = 'TestTestTest@TestTestTest.Test.ru'
49 |
50 | **phone** = '123456789'
51 |
52 | **mobile_phone** = '987654321'
53 |
54 | **birth_date** = '01.01.1980'
55 |
56 | **sex** = 'm'
57 |
58 | **pict_url** – атрибут неопределен
59 |
60 | **position_id** – атрибут неопределен
61 |
62 | **position_name** – атрибут неопределен
63 |
64 | **position_parent_id** – атрибут неопределен
65 |
66 | **position_parent_name** – атрибут неопределен
67 |
68 | **org_id** – атрибут неопределен
69 |
70 | **org_name** – атрибут неопределен
71 |
72 | **web_banned** = false
73 |
74 | **is_arm_admin** = false
75 |
76 | **is_content_admin** = false
77 |
78 | **role_id** = 'user'
79 |
80 | **is_candidate** = false
81 |
82 | **candidate_status_type_id** – атрибут неопределен
83 |
84 | **is_outstaff** = false
85 |
86 | **is_dismiss** = false
87 |
88 | **position_date** – атрибут неопределен
89 |
90 | **hire_date** = '16.01.2018'
91 |
92 | **dismiss_date** – атрибут неопределен
93 |
94 | **in_request_black_list** = false
95 |
96 | **level_id** – атрибут неопределен
97 |
98 | **knowledge_parts** – атрибут неопределен
99 |
100 | **tags** – атрибут неопределен
101 |
102 | **experts** – атрибут неопределен
103 |
104 | **current_state** – атрибут неопределен
105 |
106 | **development_potential_id** – атрибут неопределен
107 |
108 | **efficiency_estimation_id** – атрибут неопределен
109 |
110 | **modification_date** = '16.01.2018 14:40:11'
111 |
112 | **app_instance_id** – атрибут неопределен
113 |
114 | **category_id** – атрибут неопределен
115 |
116 | ---
117 |
118 | Измените некоторые значения полей на карточке тестового сотрудника (пользователя), сохраните изменения, выполните запрос в режиме просмотра каталога и проверьте, как изменились значения атрибутов.
119 |
120 | ***
121 | Возврат к части 3
122 | Возврат к оглавлению
123 |
--------------------------------------------------------------------------------
/collaborator2.md:
--------------------------------------------------------------------------------
1 | # Разбор объектной модели collaborator (Сотрудник) программным методом
2 | ***
3 |
4 | Просмотр атрибутов объекта можно также осуществить программно.
5 |
6 | Дело в том, что доступ для просмотра основных атрибутов объектов организован в виде одномерного массива элементов этого объекта.
7 |
8 | Нумерация элементов этого массива, как обычно, начинается с 0.
9 |
10 | Наименование каждого атрибута является, в свою очередь, атрибутом **Name** элемента массива.
11 |
12 | Покажем программный разбор атрибутов объекта на примере объекта **collaborator**:
13 |
14 | _query_str = "for $elem in collaborators where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest') return $elem";
15 | // personArray – массив отобранных объектов (в нашем случае этот массив состоит из одного элемента)
16 | personArray = XQuery(_query_str);
17 | // Отбор первого объекта из массива отобранных объектов
18 | // (хотя у нас массив отобранных объектов состоит из одного элемента,
19 | // нужно выбрать один (в данном случае) первый элемент (объект))
20 | _elem = ArrayOptFirstElem(personArray);
21 | str = "Объект " + _elem.Name + " имеет " + ArrayCount(_elem) + " атрибутов" + "\n";
22 | for (i = 0; i < ArrayCount(_elem); i++)
23 | {
24 | // Выводим номера по порядку, наименования и значения атрибутов объекта
25 | str = str + i + ". " + _elem[i].Name + " = " + _elem[i] + "\n";
26 | }
27 | alert(str);
28 |
29 | ---
30 |
31 | Результат выполнения данного агента приведен на следующем рисунке:
32 |
33 | 
34 |
35 |
36 | ***
37 | Возврат к части 3
38 | Возврат к оглавлению
39 |
--------------------------------------------------------------------------------
/course.md:
--------------------------------------------------------------------------------
1 | # Структура каталога course (Электронный курс)
2 |
3 |
4 | ***
5 |
6 | Ознакомьтесь со [структурой каталога course (Электронный курс)](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=course) (версия 3.4.0.54 (2017.11.03)).
7 |
8 | В дальнейшем мы будем работать с объектами данного типа и выполнять с ними некоторые практические занятия.
9 |
10 | ---
11 |
12 | code – Тип поля: string – Код курса
13 |
14 | name – Тип поля: string – Название курса
15 |
16 | status – Тип поля: string – Статус – common.course_test_states
17 |
18 | price – real – Стоимость курса
19 |
20 | max_score – Тип поля: integer – Максимальный балл
21 |
22 | yourself_start – Тип поля: bool – Может быть назначен самостоятельно
23 |
24 | duration – Тип поля: integer – Продолжительность в днях
25 |
26 | person_id – Тип поля: integer – Эксперт курса – Ссылка на другой каталог: [collaborators](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=collaborator)
27 |
28 | cl_course_id – Тип поля: integer – Электронный курс – Ссылка на другой каталог: [cl_courses](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=cl_course)
29 |
30 | education_org_id – Тип поля: integer – Обучающая организация – Ссылка на другой каталог: [education_orgs](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=education_org)
31 |
32 | base_url – Тип поля: string – Базовый url
33 |
34 | pwt_disp – Тип поля: bool – Отображать в списке Персонального WebTutora
35 |
36 | user_access_role – Тип поля: string – Роль пользователя – Ссылка на другой каталог: [access_roles](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=access_role)
37 |
38 | user_group_id – Тип поля: integer – Группа пользователя – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
39 |
40 | modification_date – Тип поля: date – Дата модификации
41 |
42 | app_instance_id – Тип поля: string – Код сервера
43 |
44 | knowledge_parts – Тип поля: string – Значения карты знаний
45 |
46 | tags – Тип поля: string – Тэги
47 |
48 | experts – Тип поля: string – Эксперты
49 |
50 |
51 |
52 |
53 | ***
54 | Возврат к части 3
55 | Возврат к оглавлению
56 |
--------------------------------------------------------------------------------
/course01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/course01.png
--------------------------------------------------------------------------------
/course02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/course02.png
--------------------------------------------------------------------------------
/course03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/course03.png
--------------------------------------------------------------------------------
/course04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/course04.png
--------------------------------------------------------------------------------
/course1.md:
--------------------------------------------------------------------------------
1 | # Разбор объектной модели course (Электронный курс) в режиме просмотра каталога
2 | ***
3 |
4 | Нажимаем **Ctrl+Shift+F8** и в открывшемся окне просмотра каталога вводим текст запроса - отбор курса по коду:
5 |
6 | **for $elem in courses where $elem/code = 'OTM8' return $elem**
7 |
8 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**).
9 |
10 |
11 | ---
12 |
13 | Находим искомый курс.
14 |
15 | На следующих скриншотах показаны значения всех полей (атрибутов) объекта **course**:
16 |
17 | 
18 |
19 |
20 | 
21 |
22 | ---
23 |
24 | Ниже приводятся все атрибуты объекта, отображенные в режиме просмотра каталога:
25 |
26 | **id** = '6486395195918459516'
27 |
28 | **code** = 'OTM8'
29 |
30 | **name** = 'Охрана труда для руководителей и специалистов'
31 |
32 | **status** = 'publish'
33 |
34 | **price** – атрибут неопределен
35 |
36 | **max_score** = '0'
37 |
38 | **yourself_start** = false
39 |
40 | **duration** – атрибут неопределен
41 |
42 | **person_id** – атрибут неопределен
43 |
44 | **cl_course_id** – атрибут неопределен
45 |
46 | **education_org_id** – атрибут неопределен
47 |
48 | **base_url** = '/webtutor/OTM8/'
49 |
50 | **pwt_disp** = false
51 |
52 | **user_access_role** – атрибут неопределен
53 |
54 | **user_group_id** – атрибут неопределен
55 |
56 | **modification_date** = '27.11.2017 17:57:22'
57 |
58 | **app_instance_id** – атрибут неопределен
59 |
60 | **knowledge_parts** – атрибут неопределен
61 |
62 | **tags** – атрибут неопределен
63 |
64 | **experts** – атрибут неопределен
65 |
66 |
67 |
68 | ***
69 | Возврат к части 3
70 | Возврат к оглавлению
71 |
--------------------------------------------------------------------------------
/dark-green_15x15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/dark-green_15x15.png
--------------------------------------------------------------------------------
/dark-green_15x15a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/dark-green_15x15a.png
--------------------------------------------------------------------------------
/dark-green_20x20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/dark-green_20x20.png
--------------------------------------------------------------------------------
/data_types01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/data_types01.PNG
--------------------------------------------------------------------------------
/err01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err01.png
--------------------------------------------------------------------------------
/err02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err02.png
--------------------------------------------------------------------------------
/err03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err03.png
--------------------------------------------------------------------------------
/err04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err04.png
--------------------------------------------------------------------------------
/err05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err05.png
--------------------------------------------------------------------------------
/err06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err06.png
--------------------------------------------------------------------------------
/err07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err07.png
--------------------------------------------------------------------------------
/err08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err08.png
--------------------------------------------------------------------------------
/err09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err09.png
--------------------------------------------------------------------------------
/err1.md:
--------------------------------------------------------------------------------
1 | # Ошибки на этапе, предшествующем выполнению программы
2 | ***
3 |
4 | **В ходе выполнения кода произошла ошибка: JavaScript error (Синтаксическая ошибка JavaScript)**
5 |
6 |
7 | 
8 |
9 | В случае появления данной ошибки программа не выполняется вообще. При ряде других ошибок программа выполняется до того места, где имеет место ошибка.
10 |
11 | Возможные причины ошибки:
12 | * Отсутствие скобки или наличие лишней скобки в операторе.
13 | * Некорректный формат параметра (например, неправильный ID объекта, включающий в себя буквы).
14 | * Некорректный текст в программе.
15 |
16 |
17 |
18 | ***
19 |
20 | Возврат к разделу "Основные сообщения об ошибках"
21 |
22 | Возврат к оглавлению
23 |
--------------------------------------------------------------------------------
/err10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err10.png
--------------------------------------------------------------------------------
/err11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err11.png
--------------------------------------------------------------------------------
/err12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/err12.png
--------------------------------------------------------------------------------
/err2.md:
--------------------------------------------------------------------------------
1 | # Ошибки на этапе выполнения программы
2 | ***
3 |
4 | Данные ошибки проявляются по мере выполнения операторов программы. Поэтому их можно локализовать на стадии отладки с помощью размещения операторов **alert** в различных местах программы.
5 |
6 | ---
7 |
8 | ## HTTP 500 Internal Server Error: Элемент не найден
9 |
10 |
11 | 
12 |
13 | Возможные причины:
14 | * Некорректный цифровой ID при открытии объекта (XML-документа) по URL
15 |
16 |
17 | ---
18 |
19 | ## Unknown object property (Некорректный параметр (атрибут) объекта)
20 |
21 |
22 | 
23 |
24 | В сообщении указывается, какой именно параметр является некорректным.
25 |
26 | Возможные причины:
27 | * Указанный атрибут у данного объекта не существует.
28 | * Объект, вызывающий атрибут, отсутствует (например, не был отобран запросом).
29 |
30 | Некорректный параметр объекта (на 5 строк ниже предыдущего)
31 |
32 |
33 | ---
34 |
35 | ## … not defined (идентификатор не определен)
36 |
37 |
38 | 
39 |
40 | В сообщении указывается, какой именно идентификатор не определен.
41 |
42 | Возможная причина:
43 | * Использование некорректного оператора, некорректного имени объекта или некорректной функции.
44 |
45 | Примеры:
46 |
47 | allert("Привет!");
48 | prompt(a);
49 |
50 |
51 | ---
52 |
53 | ## HTTP 500 Internal Server Error: Object reference not set to an instance of an object (HTTP 500 (Внутренняя ошибка сервера): ссылка на объект не указывает на экземпляр объекта)
54 |
55 |
56 | 
57 |
58 | Возможная причина ошибки:
59 | * Отсутствие скобки или наличие лишней скобки в тексте запроса.
60 | * Другая ошибка в формировании запроса.
61 |
62 |
63 | ---
64 |
65 | ## Object required before '.' (Объект перед точкой отсутствует)
66 |
67 |
68 | 
69 |
70 | Данная ошибка возникает при попытке обратиться к атрибуту объекта (через точку), хотя объект не был найден.
71 |
72 | Обработка ошибки возвращения пустого результата запроса может быть произведена следующим образом:
73 |
74 | FoundArray = XQuery(_query_str);
75 | _elem = ArrayOptFirstElem(FoundArray);
76 | if (_elem == undefined)
77 | {
78 | alert("Ошибка: объект не найден.");
79 | // Завершение итерации цикла:
80 | continue;
81 | }
82 |
83 | или:
84 |
85 | if (ArrayCount(FoundArray))>0)
86 | {
87 | // Объект найден.
88 | }
89 | else
90 | {
91 | // Объект не найден.
92 | }
93 |
94 | ---
95 |
96 | ## Invalid format (некорректный формат)
97 |
98 |
99 | 
100 |
101 | Возможная причина:
102 | - Используется некорректный формат данных.
103 |
104 | Пример:
105 |
106 | Некорректный формат в функции Data():
107 |
108 | alert (Date('2018.01.11'));
109 |
110 | Корректный формат:
111 |
112 | alert (Date('11.01.2018'));
113 |
114 |
115 |
116 | ---
117 |
118 | ## Invalid array index: …
119 |
120 |
121 | 
122 |
123 | После двоеточия указывается размерность массива.
124 |
125 | В приведенном примере размерность массива равна 2 (отсчет индекса начинается от 0).
126 |
127 | Возможная причина:
128 | * Переменная-счетчик (индекс элемента массива) выходит за пределы размерности массива.
129 |
130 |
131 | ---
132 |
133 | ## 'return' outside a function (использование оператора return вне функции)
134 |
135 |
136 | 
137 |
138 |
139 | ---
140 |
141 | ## 'continue' outside a loop (Использование оператора continue вне цикла)
142 |
143 |
144 | 
145 |
146 |
147 | ---
148 |
149 | ## Empty url schema
150 |
151 |
152 | 
153 |
154 | Возможная причина:
155 | * Ошибка при работе с документом XML (параметр URL, определяющий документ, указан некорректно).
156 |
157 |
158 | ---
159 |
160 | ## Foreign array not defined (внешний (связанный) массив не определен)
161 |
162 |
163 | 
164 |
165 | Ошибка при использовании атрибута ForeignElem.
166 |
167 | Возможная причина:
168 | * Производится обращение к данным каталога, который не связан с атрибутом исходного объекта.
169 |
170 |
171 | ***
172 |
173 | Возврат к разделу "Основные сообщения об ошибках"
174 |
175 | Возврат к оглавлению
176 |
--------------------------------------------------------------------------------
/excel01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/excel01.PNG
--------------------------------------------------------------------------------
/excel02.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/excel02.PNG
--------------------------------------------------------------------------------
/excel03.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/excel03.PNG
--------------------------------------------------------------------------------
/excel_data.md:
--------------------------------------------------------------------------------
1 | # Чтение данных из файла Excel
2 | ***
3 |
4 | Чтение данных из файла Excel - очень полезная процедура, позволяющая быстро ввести исходные данные в систему. В настоящем разделе рассмотрим подробно процесс загрузки данных из файла Excel в систему WebTutor.
5 |
6 | Импортированные данные из Excel представляют собой трехмерный массив (первый индекс - листы, второй индекс - столбцы, третий - строки). В свою очередь, данные каждого листа представляют собой двумерный массив (первый индекс - столбцы, второй индекс - строки). Соотношение книги, листов и ячеек Excel продемонстрировано на следующей схеме:
7 |
8 | 
9 |
10 | Предварительно скачайте [файл Excel](Excel-TestFile01.xlsx) для загрузки.
11 |
12 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
13 |
14 | После запуска программы загрузите скачанный ранее файл **Excel-TestFile01.xlsx**.
15 |
16 | // Нажмите кнопку Выполнить агент на стороне клиента и выберите файл Excel.
17 | // Файл Excel должен быть закрыт.
18 | excelFileUrl = Screen.AskFileOpen( '', 'Выберите файл *.*' );
19 | try
20 | {
21 | sourceList = OpenDoc(excelFileUrl, 'format=excel' );
22 | // Загружаются все данные, имеющиеся в файле Excel.
23 |
24 | workbook = sourceList.TopElem;
25 | // workbook - это одномерный массив данных по листам книги Excel.
26 | // Данные каждого элемента массива workbook (каждого листа), в свою очередь, организованы в двумерный массив.
27 |
28 | // Просмотрим наименования загруженных листов
29 | for (_sheet in workbook)
30 | {
31 | alert(_sheet.name);
32 | }
33 |
34 | // Работаем с данными из первого загруженного листа
35 | lineArray = sourceList.TopElem[0];
36 | // sourceList.TopElem[0] - это то же самое, что и ArrayFirstElem(sourceList.TopElem)
37 | // В память загружается двумерный массив данных lineArray[][].
38 | // Первый параметр массива - номер столбца (от 0: номер 0 - строка 1; номер 1 - строка 2; номер 2 - строка 3 и т.д.).
39 | // Второй параметр массива - номер строки (от 0: номер 0 - столбец A; номер 1 - столбец B; номер 2 - столбец C и т.д.).
40 | }
41 | catch(err)
42 | {
43 | alert("ОШИБКА: невозможно получить доступ к файлу " + excelFileUrl + ".");
44 | alert("Агент завершен аварийно.");
45 | return;
46 | }
47 |
48 | alert("Количество строк на листе " + sourceList.TopElem[0].name + " в файле Excel (ArrayCount(lineArray)) = "
49 | + ArrayCount(lineArray) );
50 |
51 | // Вывод информации из столбцов A, B и С первого листа на экран (6 строк)
52 | for (i = 0; i < ArrayCount(lineArray); i++)
53 | {
54 | alert("lineArray[i][0] = " + lineArray[i][0] + "\n" +
55 | "lineArray[i][1] = " + lineArray[i][1] + "\n" +
56 | "lineArray[i][2] = " + lineArray[i][2] );
57 | }
58 |
59 | ---
60 |
61 | Результат выполнения агента:
62 |
63 | 
64 |
65 | Внесите изменения в загружаемый файл Excel и понаблюдайте, как это повлияет на полученный результат.
66 |
67 | Для закрепления понимания программы загрузите данные не с первого, а со второго листа.
68 |
69 | ---
70 |
71 | ## Чтение данных из листа с именем Sheet2 в файле Excel
72 |
73 | Теперь мы будем загружать данные не с первого листа, а с листа, который имеет наименование **Sheet2**.
74 |
75 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
76 |
77 | // Нажмите кнопку Выполнить агент на стороне клиента и выберите файл Excel.
78 | // Файл Excel должен быть закрыт.
79 |
80 | // Указываем название листа, с которого будут считаны данные (оно будет храниться в текстовой переменной WORKSHEET).
81 | WORKSHEET = 'Sheet2';
82 | excelFileUrl = Screen.AskFileOpen( '', 'Выберите файл *.*' );
83 | try
84 | {
85 | sourceList = OpenDoc(excelFileUrl, 'format=excel' );
86 | // Загружаются все данные из файла Excel.
87 |
88 | workbook = sourceList.TopElem;
89 | // workbook - это одномерный массив данных по листам книги Excel.
90 | // Данные каждого элемента массива workbook (каждого листа), в свою очередь, организованы в двумерный массив.
91 | }
92 | catch(err)
93 | {
94 | alert("ОШИБКА: невозможно получить доступ к файлу " + excelFileUrl + ".");
95 | alert("Агент завершен аварийно.");
96 | return;
97 | }
98 |
99 | worksheet = undefined;
100 | // Производится просмотр наименований загруженных листов и поиск нужного листа
101 | for (_sheet in workbook)
102 | {
103 | alert(_sheet.name);
104 | if (_sheet.name == WORKSHEET)
105 | {
106 | alert("Лист " + WORKSHEET + " найден");
107 | worksheet = _sheet;
108 | // Выход из цикла поиска нужного листа
109 | break;
110 | }
111 | }
112 |
113 | // Если лист не найден...
114 | if (worksheet == undefined)
115 | {
116 | alert("ОШИБКА: Рабочий лист [" + WORKSHEET + "] не найден");
117 | // Выход из агента
118 | return;
119 | }
120 |
121 |
122 | // Теперь worksheet - это искомый двумерный массив данных на листе Sheet2
123 | alert("Количество строк на листе " + worksheet.name + " в файле Excel (ArrayCount(worksheet)) = "
124 | + ArrayCount(worksheet));
125 |
126 | // Вывод информации из столбцов A, B и С указанного листа на экран (4 строк)
127 | for (i = 0; i < ArrayCount(worksheet); i++)
128 | {
129 | alert("worksheet[i][0] = " + worksheet[i][0] + "\n" +
130 | "worksheet[i][1] = " + worksheet[i][1] + "\n" +
131 | "worksheet[i][2] = " + worksheet[i][2] );
132 | }
133 |
134 |
135 | ---
136 |
137 | Результат выполнения агента:
138 |
139 | 
140 |
141 | Внесите изменения в программу и в загружаемый файл Excel и понаблюдайте, как это повлияет на полученный результат.
142 |
143 | ***
144 |
145 | Возврат к части 6
146 |
147 | Возврат к оглавлению
148 |
--------------------------------------------------------------------------------
/find_assessment.md:
--------------------------------------------------------------------------------
1 | # Поиск теста
2 | ***
3 |
4 | Для программной реализации поиска теста по коду выполните следующие действия:
5 |
6 | 1. Сформируйте текст запроса:
7 |
8 | **for $elem in assessments where $elem/code='0000017' return $elem**
9 |
10 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**).
11 |
12 | 2. Проверьте корректность запроса, как это описано в разделе [Тестирование запроса в режиме просмотра каталога](XQuery_control.md).
13 |
14 | 3. Если запрос сформирован корректно и был найден один нужный сотрудник, скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
15 |
16 | На карточку агента вводится следующий код:
17 |
18 | _query_str = "for $elem in assessments where $elem/code='00000017' return $elem";
19 |
20 | FoundArray = XQuery(_query_str);
21 | // Запросом отобран только один объект, но FoundArray является массивом объектов.
22 | // Поэтому мы выбираем первый объект из массива FoundArray.
23 | _elem = ArrayOptFirstElem(FoundArray);
24 |
25 | // Получить ID объекта и наименование теста
26 | obj_id = _elem.id;
27 | obj_title = _elem.title;
28 | alert(obj_id + "\n" + obj_title);
29 |
30 | ---
31 |
32 | Результат выполнения агента:
33 |
34 | 
35 |
36 | ---
37 |
38 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
39 |
40 |
41 | ***
42 |
43 | Возврат к части 6
44 |
45 | Возврат к оглавлению
46 |
--------------------------------------------------------------------------------
/find_collaborator.md:
--------------------------------------------------------------------------------
1 | # Поиск сотрудника
2 | ***
3 |
4 | Для программной реализации поиска сотрудника по фамилии и логину выполните следующие действия:
5 |
6 | 1. Сформируйте текст запроса:
7 |
8 | **for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem**
9 |
10 | 2. Проверьте корректность запроса, как это описано в разделе [Тестирование запроса в режиме просмотра каталога](XQuery_control.md).
11 |
12 | 3. Если запрос сформирован корректно и был найден один нужный сотрудник, скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
13 |
14 | На карточку агента вводится следующий код:
15 |
16 | _query_str = "for $elem in collaborators where contains($elem/fullname, 'Test') and $elem/login='TestTestTest' return $elem";
17 | personArray = XQuery(_query_str);
18 | // Запросом отобран только один объект, но personArray является массивом объектов.
19 | // Поэтому мы выбираем первый элемент из массива personArray.
20 | _elem = ArrayOptFirstElem(personArray);
21 |
22 | // Получить ID объекта и ФИО сотрудника
23 | obj_id = _elem.id;
24 | obj_fullname = _elem.fullname;
25 | alert(obj_id + "\n" + obj_fullname);
26 |
27 | ---
28 |
29 | Результат выполнения агента:
30 |
31 | 
32 |
33 | ---
34 |
35 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
36 |
37 |
38 | ***
39 |
40 | Возврат к части 6
41 |
42 | Возврат к оглавлению
43 |
--------------------------------------------------------------------------------
/find_course.md:
--------------------------------------------------------------------------------
1 | # Поиск курса
2 | ***
3 |
4 | Для программной реализации поиска курса по коду выполните следующие действия:
5 |
6 | 1. Сформируйте текст запроса:
7 |
8 | **for $elem in courses where $elem/code='OTM8' return $elem**
9 |
10 |  **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**).
11 |
12 |
13 | 2. Проверьте корректность запроса, как это описано в разделе [Тестирование запроса в режиме просмотра каталога](XQuery_control.md).
14 |
15 | 3. Если запрос сформирован корректно и был найден один нужный сотрудник, скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
16 |
17 | На карточку агента вводится следующий код:
18 |
19 | _query_str = "for $elem in courses where $elem/code='OTM8' return $elem";
20 |
21 | FoundArray = XQuery(_query_str);
22 | // Запросом отобран только один объект, но FoundArray является массивом объектов.
23 | // Поэтому мы выбираем первый объект из массива FoundArray.
24 | _elem = ArrayOptFirstElem(FoundArray);
25 |
26 | // Получить ID объекта и наименование курса
27 | obj_id = _elem.id;
28 | obj_name = _elem.name;
29 | alert(obj_id + "\n" + obj_name);
30 |
31 | ---
32 |
33 | Результат выполнения агента:
34 |
35 | 
36 |
37 | ---
38 |
39 | Для лучшего усвоения материала измените код и понаблюдайте, как это повлияло на полученный результат.
40 |
41 |
42 | ***
43 |
44 | Возврат к части 6
45 |
46 | Возврат к оглавлению
47 |
--------------------------------------------------------------------------------
/first_agent__if.md:
--------------------------------------------------------------------------------
1 | # Создаем первый агент с условным оператором if
2 | ***
3 |
4 | Условный оператор **if** имеет следующую структуру:
5 |
6 | if (условие)
7 | {
8 | // Операторы, выполняемые при выполнении условия
9 | }
10 | else
11 | {
12 | // Операторы, выполняемые при невыполнении условия
13 | }
14 |
15 | ---
16 |
17 | Пример использования оператора **if**:
18 |
19 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
20 |
21 | a = 0;
22 | if (a == 1)
23 | {
24 | alert("Переменная a равна 1");
25 | }
26 | else
27 | {
28 | alert("Переменная a не равна 1");
29 | }
30 |
31 | ---
32 |
33 | _Операторы сравнения и логические операторы, используемые при формировании условий_:
34 |
35 | * Равно - ==
36 | * Не равно - !==
37 | * Больше - >
38 | * Больше или равно - >=
39 | * Меньше - <
40 | * Меньше или равно - <=
41 | * И - &&
42 | * Или - ||
43 |
44 |
45 | ---
46 |
47 |
48 | Результат выполнения агента:
49 |
50 | 
51 |
52 | Изменяйте значение переменной **a** и понаблюдайте, как это влияет на полученный результат.
53 |
54 | ---
55 |
56 |
57 | ## Использование вложенного оператора if
58 |
59 |
60 | Пример использования вложенного оператора **if** - определение максимума значений трех переменных:
61 |
62 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
63 |
64 |
65 | a = 10;
66 | b = 15;
67 | c = 8;
68 | if ((a > b) and (a > c))
69 | {
70 | alert("Максимум равен a");
71 | }
72 | else
73 | {
74 | if ((b > a) and (b > c))
75 | {
76 | alert("Максимум равен b");
77 | }
78 | else
79 | {
80 | alert("Максимум равен c");
81 | }
82 | }
83 |
84 | ---
85 |
86 |
87 | Результат выполнения агента:
88 |
89 | 
90 |
91 | Изменяйте значения переменных **a**, **b** и **c** и понаблюдайте, как это влияет на полученный результат.
92 |
93 |
94 |
95 |
96 | ***
97 |
98 |
99 | Возврат к части 1
100 | Возврат к оглавлению
101 |
--------------------------------------------------------------------------------
/for.md:
--------------------------------------------------------------------------------
1 | # Цикл for
2 |
3 | Оператор цикла **for** имеет следующую структуру:
4 |
5 | for (counter = start; counter < end; counter++)
6 | {
7 | // операторы
8 | }
9 |
10 | где:
11 |
12 | _counter_ - любая численная переменная;
13 |
14 | _start_ - любое численное выражение, определяет начальное значение для переменной _counter_;
15 |
16 | _end_ - численное выражение, определяет конечное значение для переменной _counter_.
17 |
18 |
19 | ---
20 |
21 | Пример использования оператора **for**:
22 |
23 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
24 |
25 | a = 0;
26 | b = 10;
27 | for (i = 1; i < b; i++)
28 | {
29 | a++;
30 | }
31 | alert("Переменная a равна " + a);
32 |
33 | ---
34 |
35 | Результат выполнения агента:
36 |
37 | 
38 |
39 | Изменяйте значения переменных **a** и **b** и понаблюдайте, как это влияет на полученный результат.
40 |
41 |
42 |
43 | ***
44 |
45 |
46 | Возврат к части 1
47 | Возврат к оглавлению
48 |
--------------------------------------------------------------------------------
/for01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/for01.PNG
--------------------------------------------------------------------------------
/for_in.md:
--------------------------------------------------------------------------------
1 | # Цикл for... in
2 | ***
3 |
4 | Оператор цикла **for... in** имеет следующую структуру:
5 |
6 | for (элемент in коллекция_элементов)
7 | {
8 | // операторы
9 | }
10 |
11 | Данный цикл предназначен для выполнения действий для всех элементов коллекции (набора).
12 |
13 | ---
14 |
15 | Примеры использования данного типа цикла будут приведены далее.
16 |
17 |
18 | ***
19 |
20 | Возврат к части 1
21 | Возврат к оглавлению
22 |
--------------------------------------------------------------------------------
/function01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/function01.PNG
--------------------------------------------------------------------------------
/functions.md:
--------------------------------------------------------------------------------
1 | # Пользовательские функции
2 | ***
3 |
4 | Пользовательская функция **function** имеет следующую структуру:
5 |
6 | function НаименованиеФункции(параметр1, параметр2)
7 | {
8 | // операторы
9 |
10 | // возвращаемое значение
11 | return результат;
12 | }
13 |
14 | Ссылка на функцию в программе:
15 |
16 | c = НаименованиеФункции(значение_параметра1, значение_параметра2);
17 |
18 | ---
19 |
20 | Пример использования функции **function**:
21 |
22 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
23 |
24 | function Sum01(a, b)
25 | {
26 | res = a + b;
27 | return res;
28 | }
29 |
30 | // Основная программа
31 | c = Sum01(2, 3);
32 | d = Sum01(5, 2);
33 | alert(c + "\n" + d);
34 |
35 | ---
36 |
37 | Результат выполнения агента:
38 |
39 | 
40 |
41 | Изменяйте значения переменных **a** и **b** и понаблюдайте, как это влияет на полученный результат.
42 |
43 |
44 |
45 | ***
46 | Возврат к части 1
47 | Возврат к оглавлению
48 |
--------------------------------------------------------------------------------
/green_15x15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/green_15x15.png
--------------------------------------------------------------------------------
/green_20x20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/green_20x20.png
--------------------------------------------------------------------------------
/if01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/if01.PNG
--------------------------------------------------------------------------------
/if02.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/if02.PNG
--------------------------------------------------------------------------------
/other_catalogs1.md:
--------------------------------------------------------------------------------
1 | # Структуры каталогов active_test_learning (Незаконченный (незавершенный) тест) и test_learning (Законченный (завершенный) тест)
2 |
3 |
4 | ***
5 |
6 | Ознакомьтесь со структурами каталогов [active_test_learning (Незаконченный (незавершенный) тест)](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=active_test_learning) и [test_learning (Законченный (завершенный) тест)](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=test_learning).
7 |
8 | В дальнейшем мы будем работать с объектами данного типа и выполнять с ними некоторые практические занятия.
9 |
10 | ---
11 |
12 | ## Данные каталога active_test_learning (Незаконченный (незавершенный) тест) (версия 3.4.0.54 (2017.11.03))
13 |
14 | code – Тип поля: string – Код
15 |
16 | assessment_id – Тип поля: integer – Тест – Ссылка на другой каталог: [assessments](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment)
17 |
18 | assessment_name – Тип поля: string – Название теста
19 |
20 | person_id – Тип поля: integer – Сотрудник – Ссылка на другой каталог: [collaborators](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=collaborator)
21 |
22 | person_fullname – Тип поля: string – ФИО сотрудника
23 |
24 | person_position_name – Тип поля: string – Должность
25 |
26 | person_org_name – Тип поля: string – Организация
27 |
28 | person_subdivision_name – Тип поля: string – Подразделение
29 |
30 | person_instance_id – Тип поля: string – Код сервера сотрудника
31 |
32 | person_current_state – Тип поля: string – Текущее состояние сотрудника
33 |
34 | event_id – Тип поля: integer – Мероприятие – Ссылка на другой каталог: [events](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event)
35 |
36 | group_id – Тип поля: integer – Группа – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
37 |
38 | start_usage_date – Тип поля: date – Дата активации
39 |
40 | start_learning_date – Тип поля: date – Дата начала обучения
41 |
42 | last_usage_date – Тип поля: date – Дата последнего посещения
43 |
44 | max_end_date – Тип поля: date – Дата планируемого завершения
45 |
46 | score – real – Баллы
47 |
48 | state_id – Тип поля: integer – Состояние – common.learning_states
49 |
50 | time – Тип поля: integer – Время модуля
51 |
52 | max_score – real – Максимальный балл
53 |
54 | assessment_appraise_id – Тип поля: integer – Процедура оценки – Ссылка на другой каталог: [assessment_appraises](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_appraise)
55 |
56 | question_num – Тип поля: integer
57 |
58 | question_answered_num – Тип поля: integer
59 |
60 | question_passed_num – Тип поля: integer
61 |
62 | user_access_role – Тип поля: string – Роль пользователя – Ссылка на другой каталог: [access_roles](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=access_role)
63 |
64 | user_group_id – Тип поля: integer – Группа пользователя – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
65 |
66 | creation_date – Тип поля: date – Дата создания
67 |
68 | creation_user_id – Тип поля: integer – Пользователь
69 |
70 | modification_date – Тип поля: date – Дата модификации
71 |
72 | modification_user_id – Тип поля: integer – Пользователь
73 |
74 | app_instance_id – Тип поля: string – Код сервера
75 |
76 | ***
77 |
78 | ## Данные каталога test_learning (Законченный (завершенный) тест) (версия 3.4.0.54 (2017.11.03))
79 |
80 | assessment_id – Тип поля: integer – Тест – Ссылка на другой каталог: [assessments](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment)
81 |
82 | assessment_name – Тип поля: string – Название теста
83 |
84 | person_id – Тип поля: integer – Сотрудник – Ссылка на другой каталог: [collaborators](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=collaborator)
85 |
86 | person_fullname – Тип поля: string – ФИО сотрудника
87 |
88 | person_position_name – Тип поля: string – Должность
89 |
90 | person_org_name – Тип поля: string – Организация
91 |
92 | person_subdivision_name – Тип поля: string – Подразделение
93 |
94 | person_instance_id – Тип поля: string – Код сервера сотрудника
95 |
96 | person_current_state – Тип поля: string – Текущее состояние сотрудника
97 |
98 | event_id – Тип поля: integer – Мероприятие – Ссылка на другой каталог: [events](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=event)
99 |
100 | group_id – Тип поля: integer – Группа – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
101 |
102 | start_usage_date – Тип поля: date – Дата активации
103 |
104 | start_learning_date – Тип поля: date –
105 |
106 | last_usage_date – Тип поля: date – Дата последнего посещения
107 |
108 | max_end_date – Тип поля: date – Дата планируемого завершения
109 |
110 | score – real – Баллы
111 |
112 | text_result – Тип поля: string – Описание итога
113 |
114 | state_id – Тип поля: integer – Состояние – Ссылка на другой каталог: common.learning_states
115 |
116 | time – Тип поля: integer – Время модуля
117 |
118 | max_score – real – Максимальный балл
119 |
120 | assessment_appraise_id – Тип поля: integer – Активный тест – Ссылка на другой каталог: [assessment_appraises](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=assessment_appraise)
121 |
122 | active_test_learning_id – Тип поля: integer – Незаконченный тест
123 |
124 | question_num – Тип поля: integer
125 |
126 | question_answered_num – Тип поля: integer
127 |
128 | question_passed_num – Тип поля: integer
129 |
130 | user_access_role – Тип поля: string – Роль пользователя – Ссылка на другой каталог: [access_roles](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=access_role)
131 |
132 | user_group_id – Тип поля: integer – Группа пользователя – Ссылка на другой каталог: [groups](http://news.websoft.ru/view_doc.html?mode=catalogs&catalog=group)
133 |
134 | creation_date – Тип поля: date – Дата создания
135 |
136 | creation_user_id – Тип поля: integer – Пользователь
137 |
138 | modification_date – Тип поля: date – Дата модификации
139 |
140 | modification_user_id – Тип поля: integer – Пользователь
141 |
142 | app_instance_id – Тип поля: string – Код сервера
143 |
144 |
145 |
146 |
147 | ***
148 | Возврат к части 3
149 | Возврат к оглавлению
150 |
--------------------------------------------------------------------------------
/pril_1_1.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/pril_1_1.PNG
--------------------------------------------------------------------------------
/pril_3_1.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/pril_3_1.PNG
--------------------------------------------------------------------------------
/pril_errors.md:
--------------------------------------------------------------------------------
1 | # Приложение. Основные сообщения об ошибках
2 | ***
3 |
4 | Ошибки на этапе, предшествующем выполнению программы
5 | Ошибки на этапе выполнения программы
6 |
7 | ***
8 |
9 | Возврат к оглавлению
10 |
--------------------------------------------------------------------------------
/pril_test_collaborator.md:
--------------------------------------------------------------------------------
1 | # Приложение. Почему я не могу найти тестового сотрудника?
2 | ***
3 |
4 | Учетная запись тестового сотрудника создавалась в данном практикуме в разделе [Разбор объектной модели collaborator](collaborator1.md).
5 |
6 | Если Вы не находите тестового сотрудника, то, скорее всего, Вы пропустили создание этой учетной записи.
7 |
8 | В таком случае необходимо добавить тестового сотрудника.
9 | Заполните поля карточки тестового сотрудника, как это показано на двух следующих скриншотах:
10 |
11 | 
12 |
13 | 
14 |
15 | **Внимание!** В качестве электронного адреса нужно ввести несуществующий адрес, так как на данный адрес может быть направлены сообщения системы WebTutor.
16 |
17 |
18 |
19 | ***
20 | Возврат к оглавлению
21 |
--------------------------------------------------------------------------------
/quantity01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/quantity01.PNG
--------------------------------------------------------------------------------
/red_15x15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/red_15x15.png
--------------------------------------------------------------------------------
/red_20x20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/red_20x20.png
--------------------------------------------------------------------------------
/run_agent.md:
--------------------------------------------------------------------------------
1 | # Как запустить агент?
2 | ***
3 |
4 | Мы будем запускать агент следующим образом:
5 |
6 | - Открываем карточку агента (напоминаю, что все агенты в системе размещаются в WebTutor Administrator в разделе **Дизайнер - Агенты сервера**).
7 |
8 | - На вкладку **"Выполняемый код"** записываем или копируем из настоящего пособия выполняемый код.
9 |
10 | - Нажимаем кнопку **Выполнить агент на стороне клиента**.
11 |
12 |
13 | 
14 |
15 | ---
16 |
17 |
18 | **Примечание** - В принципе агент можно запускать с сервера (кнопка **Запустить агент**) и с клиента (кнопка **Выполнить агент на стороне клиента**). Мы, чаще всего, будем запускать агент на стороне клиента. В этом режиме действует команда **alert**, выводдящая на экран окно с информацией, чем мы будем активно пользоваться во многих упражнениях.
19 |
20 |
21 |
22 | ***
23 |
24 |
25 | Возврат к оглавлению
26 |
--------------------------------------------------------------------------------
/run_agent01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/run_agent01.png
--------------------------------------------------------------------------------
/switch.md:
--------------------------------------------------------------------------------
1 | # Оператор выбора switch
2 | ***
3 |
4 | Оператор выбора **switch** имеет следующую структуру:
5 |
6 |
7 | switch(переменная)
8 | {
9 | case 'значение 1':
10 | // операторы
11 | break;
12 | case 'значение 2':
13 | // операторы
14 | break;
15 | case 'значение 3':
16 | // операторы
17 | break;
18 | ...
19 | default:
20 | // операторы
21 | break;
22 | }
23 |
24 |
25 |
26 | ---
27 |
28 | Пример использования оператора **switch**:
29 |
30 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
31 |
32 | a = 0;
33 | switch (a)
34 | {
35 | case 0:
36 | alert("a равно 0");
37 | break;
38 | case 1:
39 | alert("a равно 1");
40 | break;
41 | case 2:
42 | alert("a равно 2");
43 | break;
44 | case 5:
45 | alert("a равно 5");
46 | break;
47 | }
48 |
49 |
50 | ---
51 |
52 |
53 | Результат выполнения агента:
54 |
55 | 
56 |
57 |
58 |
59 | Изменяйте значение переменной **a** и понаблюдайте, как это влияет на полученный результат.
60 |
61 |
62 |
63 |
64 |
65 | ***
66 |
67 |
68 | Возврат к части 1
69 | Возврат к оглавлению
70 |
--------------------------------------------------------------------------------
/switch01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/switch01.PNG
--------------------------------------------------------------------------------
/test_agent.md:
--------------------------------------------------------------------------------
1 | # Создание тестового агента для выполнения практических занятий
2 | ***
3 |
4 | Откройте в WebTutor Administrator раздел **Агенты сервера**, как это было описано на странице ["Что такое агент?"](agent.md).
5 |
6 | Далее нажмите на кнопку **Новая запись**. Откроется пустая карточка нового агента.
7 |
8 | Введите на вкладке **"Общие сведения"** код агента **test_agent_001** и название **Тестовый агент**. Другие данные пока вводить не нужно.
9 |
10 | 
11 |
12 | Сохраните изменения .
13 |
14 | Для того, чтобы увидеть на вкладке **Агенты сервера** добавленный в систему тестовый агент, откройте эту вкладку и нажмите на кнопку **F5** для обновления представления перечня агентов.
15 |
16 | **Внимание!** Обратите внимание на то, чтобы код этого агента был уникальным. Если в системе уже имеется агент с данным кодом, то укажите для него другой (уникальный) код.
17 |
18 | В дальнейшем мы будем в основном выполнять упражнения в этом агенте.
19 |
20 | Вкладку **"Выполняемый код"** мы пока не заполняем.
21 |
22 |
23 | ***
24 |
25 | Возврат к оглавлению
26 |
--------------------------------------------------------------------------------
/test_agent01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/test_agent01.png
--------------------------------------------------------------------------------
/try.md:
--------------------------------------------------------------------------------
1 | # Обработка ошибок: операторы try… catch (err)
2 | ***
3 |
4 | Операторы обработки ошибок **try… catch** имеет следующую структуру:
5 |
6 | try
7 | {
8 | // операторы
9 | }
10 | catch (err)
11 | {
12 | alert(err);
13 | }
14 |
15 |
16 |
17 |
18 | ---
19 |
20 | Пример использования оператора **try… catch**:
21 |
22 | Скопируйте приведенный код в созданный нами агент **Тестовый агент** на вкладку **"Выполняемый код"** (предыдущий код, введенный ранее на эту вкладку, можно удалить) и запустите агент, нажав на кнопку **Выполнить агент на стороне клиента**.
23 |
24 | try
25 | {
26 | _width = 120;
27 | a = _width/0;
28 | }
29 | catch(_err)
30 | {
31 | alert(_err);
32 | // = Zero divide…
33 | }
34 |
35 |
36 |
37 | ---
38 |
39 | Результат выполнения агента:
40 |
41 | 
42 |
43 |
44 |
45 |
46 | ***
47 | Возврат к части 1
48 | Возврат к оглавлению
49 |
50 |
--------------------------------------------------------------------------------
/try01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/try01.png
--------------------------------------------------------------------------------
/ttt1.xls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/ttt1.xls
--------------------------------------------------------------------------------
/underconstruction.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/underconstruction.png
--------------------------------------------------------------------------------
/variables.md:
--------------------------------------------------------------------------------
1 | # Переменные
2 | ***
3 |
4 | Как это принято в языке JavaScript, переменные в среде WebTutor не требуют объявления.
5 |
6 | Примеры использования переменных:
7 |
8 | a = 1;
9 | b = 2;
10 | c = a + b;
11 | d = "Привет, мир! (используются двойные кавычки)";
12 | e = 'Привет, мир! (используются одинарные кавычки)';
13 | f = '13.01.2018';
14 | alert(a + "\n" + b + "\n" + c + "\n" + d + "\n" + e + "\n" + f);
15 |
16 | ---
17 |
18 | Скопируйте приведенный код в тестовый агент на вкладку **"Выполняемый код"** и запустите агент, как это описано в разделе [Как запустить агент?](run_agent.md)
19 |
20 | Результат выполнения агента:
21 |
22 | 
23 |
24 | ---
25 |
26 | **Примечание** - Тип переменной определяется по умолчанию в соответствии с типом присваиваемого значения.
27 |
28 | Об использовании метода alert для вывода информации на экран – см. далее раздел [Вывод на экран информационного окна: метод alert](alert.md).
29 |
30 |
31 | ***
32 | Возврат к части 1
33 | Возврат к оглавлению
34 |
--------------------------------------------------------------------------------
/variables01.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/variables01.PNG
--------------------------------------------------------------------------------
/violet_15x15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/violet_15x15.png
--------------------------------------------------------------------------------
/violet_20x20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Alexander-Lv/WebTutor/f565d61906e111bb5d140d4f0372e2163512c9c4/violet_20x20.png
--------------------------------------------------------------------------------
/vved.md:
--------------------------------------------------------------------------------
1 | # Введение
2 |
3 | ***
4 |
5 | Данный курс состоит из серии несложных практических упражнений по программированию в среде WebTutor.
6 |
7 | Предлагаемые в данном курсе несложные упражнения позволят освоить основные приемы программирования в системе WebTutor, и с помощью этих приемов, как из кирпичиков, можно будет составлять более сложные программы.
8 |
9 | ---
10 |
11 | Что понадобится для выполнения этих упражнений?
12 |
13 | * Учебная система WebTutor в минимальной комплектации (в частности, должны присутствовать модули "Персонал и организационная структура", "Дистанционное обучение", "Тестирование", "Системное администрирование", "Дизайнер".
14 |
15 | * Доступ к WebTutor Administrator (на январь 2018 г. - версия WebTutor Administrator 3.4).
16 |
17 | * Административные права в WebTutor Administrator.
18 |
19 | * Доступ к корпоративному сайту [news.websoft.ru](http://news.websoft.ru) компании WebSoft, где размещены, в том числе, различные материалы по программированию в среде WebTutor (такой доступ имеют практически все пользователи WebTutor Administrator).
20 |
21 | ---
22 |
23 | Большинство упражнений предполагает их выполнение без изменения предлагаемого кода. Однако в отдельных случаях нужно будет внести в код некоторые изменения, связанные с особенностями используемой системы WebTutor. Сообщение о необходимости внесения изменений в код будет начинаться так:
24 |
25 |  **Внести изменения!**
26 |
27 | Также для совершенствования в познании языка программирования и объектной модели системы рекомендуем изменять отдельные значения и параметры и наблюдать, как данные изменения повлияли на конечный результат.
28 |
29 | ---
30 |
31 | Дополнительные материалы, с которыми мы рекомендуем ознакомиться:
32 |
33 | * Очень интересная книга Максима Юркова ["Progressive WebTutor"](https://maksimyurkov.gitbooks.io/progressive-webtutor/content/) (на русском языке). Данная книга по состоянию на январь 2018 г. находится в разаработке и постоянно пополняется.
34 |
35 | * [Рекомендации по программированию в WebTutor](http://news.websoft.ru/view_doc.html?mode=doc_type&custom_web_template_id=6338676538438660354&doc_id=6335654646356313384)
36 |
37 | * [Полезные компоненты софта](http://news_old.websoft.ru/db/kb/97C9435BB2FECDADC32574000045B2F7/components.html). Здесь опубликованы пакеты агентов, отчетов и других компонентов, разработанные пользователями WebTutor и программистами компании WebSoft. Некоторые компоненты предназначены для более ранних версий WebTutor и могут несколько устареть (в основном, в связи с изменением объектной модели).
38 |
39 | * [Полезные компоненты софта для актуальной версии](http://news.websoft.ru/view_doc.html?mode=component&cid=14FA771ADEE4C7D3C32574E30024D2DA).
40 |
41 | * [Примеры кода](http://news.websoft.ru/view_doc.html?mode=doc&doc_id=5900009198344233397)
42 |
43 | * [Синтаксис XQuery запросов](http://news.websoft.ru/view_doc.html?mode=doc&doc_id=5900009198344233408)
44 |
45 | * [Форумы сообщества пользователей WebTutor](http://news.websoft.ru/view_doc.html?mode=doc&doc_id=5900009198344233445)
46 |
47 |
48 | ***
49 |
50 | Возврат к оглавлению
51 |
--------------------------------------------------------------------------------