├── 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 | ![](pril_1_1.PNG) 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 | ![](data_types01.PNG) 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 | ![](Making_Package1.png) 17 | 18 | * Нажмите кнопку **"Сохранить полный пакет"**. 19 | 20 | В некоторых случаях при формировании пакета с агентом возникает ошибка: 21 | 22 | ![](Making_Package_Error.png) 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 | ![](pril_3_1.PNG) 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 | ![](Window_XQuery01.png) 9 | 10 | --- 11 | 12 | Для проверки корректности запросов в формате XQuery установите флажок слева от поля **XQuery**, скопируйте текст запроса в поле **XQuery** и нажмите на кнопку **Запрос**: 13 | 14 | ![](Window_XQuery02.png) 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 | ![screenshot of sample](http://webdesign.ru.net/images/Heydon_min.jpg) 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 | ![](TopElem01.PNG) 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 | ![](XQuery01.jpg) 11 | 12 | 1. ![](blue_15x15.png) Объект в котором хранятся запрашиваемые записи 13 | 2. ![](green_15x15.png) Название таблицы из которой берутся записи. Все записи созданы по одному шаблону, и могут содержать только те поля, которые содержатся в шаблоне. 14 | 3. ![](red_15x15.png) Логическое условие 15 | 4. ![](violet_15x15.png) Сортировка записей 16 | 5. ![](dark-green_15x15.png) Результат запроса, объект с отфильтрованными записями 17 | 18 | --- 19 | 20 | **Отбор сотрудников по одному критерию:** 21 | 22 | for $elem in collaborators where contains($elem/fullname, 'Test') return $elem 23 | 24 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Test') ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where (contains($elem/fullname, 'Test') and $elem/login = 'TestTestTest') ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in assessments ![](red_15x15.png) where $elem/code = '00000017' ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in courses ![](red_15x15.png) where $elem/code = 'OTM8' ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where $elem/id = 6511610587817075498 ![](dark-green_15x15.png) return $elem 97 | 98 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in assessments ![](red_15x15.png) where $elem/id = 6424083603832075130 ![](dark-green_15x15.png) return $elem 99 | 100 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in courses ![](red_15x15.png) where $elem/id = 6486395195918459516 ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Иванов') ![](violet_15x15.png) order by $elem/id ![](dark-green_15x15.png) return $elem 118 | 119 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Иванов') ![](violet_15x15.png) order by $elem/id ascending ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Иванов') ![](violet_15x15.png) order by $elem/id descending ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $emp ![](green_15x15.png) in test_learnings ![](red_15x15.png) where contains($emp/person_fullname, 'Иванов Иван Иванович') ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $emp ![](green_15x15.png) in active_test_learnings ![](red_15x15.png) where contains($emp/person_fullname, 'Иванов Иван Иванович') ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Иванов') and $elem/state_id=4 ![](dark-green_15x15.png) 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 | ![](blue_15x15.png) for $elem ![](green_15x15.png) in collaborators ![](red_15x15.png) where contains($elem/fullname, 'Иванов') and $elem/state_id=4 ![](dark-green_15x15.png) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в Вашей системе будут иные коды курсов и тестов, иные идентификационные номера 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 | ![](Window_XQuery02.png) 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 | ![](quantity01.PNG) 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 | ![](XmlDoc01.png) 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 | ![](XmlDoc02.PNG) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**). 44 | 45 | --- 46 | 47 | Результат выполнения агента: 48 | 49 | ![](assessment04.png) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**). 44 | 45 | 46 | --- 47 | 48 | Результат выполнения агента: 49 | 50 | ![](course04.png) 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 | ![](agent01.png) 9 | 10 | --- 11 | 12 | Откройте в WebTutor Administrator раздел **Агенты сервера**. 13 | 14 | В этом разделе обычно уже имеются некоторые агенты, предоставленные компанией WebSoft. 15 | 16 | 17 | 18 | Откройте карточку какого-нибудь агента и посмотите, как устроена карточка. 19 | 20 | ![](agent02.png) 21 | 22 | На карточке размещены 2 вкладки - **"Общие сведения"** и **"Выполняемый код"**. 23 | 24 | На вкладке **"Общие сведения"** можно увидеть **Код** агента и его **Название**. Может быть также установлена ссылка на файл выполняемого кода, расписание запуска агента, переменные, используемые в процессе работы агента, и др. 25 | 26 | На вкладке **"Выполняемый код"** размещается код, выполняемый агентом. Если была указана ссылка на файл выполняемого кода, то вкладка **"Выполняемый код"** может оставаться пустой. 27 | 28 | ![](agent03.png) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Измените файл, указав в нем коды курсов и тестов из своей информационной базы. Обратите внимание, что в данный файл нужно вставить коды реальных курсов и тестов из Вашей базы (коды курсов и тестов можно найти на карточках курсов и тестов, на вкладке **Общие сведения** в поле **Код**). 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 | ![](agent_code01.PNG) 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 | ![](array01.PNG) 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 | ![](array02.PNG) 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 | ![](array03.PNG) 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 | ![](array04.PNG) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**). 9 | 10 | --- 11 | 12 | Находим искомый тест. 13 | 14 | На следующих скриншотах показаны значения всех полей (атрибутов) объекта **assessment**: 15 | 16 | 17 | ![](assessment01.png) 18 | 19 | 20 | ![](assessment02.png) 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 | ![](Collab_test1.png) 7 | 8 | ![](Collab_test2.png) 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 | ![](collaborator01.png) 25 | 26 | ![](collaborator02.png) 27 | 28 | ![](collaborator03.png) 29 | 30 | ![](collaborator04.png) 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 | ![](collaborator05.png) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**). 9 | 10 | 11 | --- 12 | 13 | Находим искомый курс. 14 | 15 | На следующих скриншотах показаны значения всех полей (атрибутов) объекта **course**: 16 | 17 | ![](course01.png) 18 | 19 | 20 | ![](course02.png) 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 | ![](err01.png) 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 | ![](err02.png) 12 | 13 | Возможные причины: 14 | * Некорректный цифровой ID при открытии объекта (XML-документа) по URL 15 | 16 | 17 | --- 18 | 19 | ## Unknown object property (Некорректный параметр (атрибут) объекта) 20 | 21 | 22 | ![](err03.png) 23 | 24 | В сообщении указывается, какой именно параметр является некорректным. 25 | 26 | Возможные причины: 27 | * Указанный атрибут у данного объекта не существует. 28 | * Объект, вызывающий атрибут, отсутствует (например, не был отобран запросом). 29 | 30 | Некорректный параметр объекта (на 5 строк ниже предыдущего) 31 | 32 | 33 | --- 34 | 35 | ## … not defined (идентификатор не определен) 36 | 37 | 38 | ![](err04.png) 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 | ![](err05.png) 57 | 58 | Возможная причина ошибки: 59 | * Отсутствие скобки или наличие лишней скобки в тексте запроса. 60 | * Другая ошибка в формировании запроса. 61 | 62 | 63 | --- 64 | 65 | ## Object required before '.' (Объект перед точкой отсутствует) 66 | 67 | 68 | ![](err06.png) 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 | ![](err07.png) 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 | ![](err08.png) 122 | 123 | После двоеточия указывается размерность массива. 124 | 125 | В приведенном примере размерность массива равна 2 (отсчет индекса начинается от 0). 126 | 127 | Возможная причина: 128 | * Переменная-счетчик (индекс элемента массива) выходит за пределы размерности массива. 129 | 130 | 131 | --- 132 | 133 | ## 'return' outside a function (использование оператора return вне функции) 134 | 135 | 136 | ![](err09.png) 137 | 138 | 139 | --- 140 | 141 | ## 'continue' outside a loop (Использование оператора continue вне цикла) 142 | 143 | 144 | ![](err10.png) 145 | 146 | 147 | --- 148 | 149 | ## Empty url schema 150 | 151 | 152 | ![](err11.png) 153 | 154 | Возможная причина: 155 | * Ошибка при работе с документом XML (параметр URL, определяющий документ, указан некорректно). 156 | 157 | 158 | --- 159 | 160 | ## Foreign array not defined (внешний (связанный) массив не определен) 161 | 162 | 163 | ![](err12.png) 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 | ![](excel03.PNG) 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 | ![](excel01.PNG) 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 | ![](excel02.PNG) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального теста из Вашей базы (код теста можно найти на карточке теста, на вкладке **Общие сведения** в поле **Код**). 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 | ![](assessment03.png) 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 | ![](collaborator06.png) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** Обратите внимание, что в данный запрос нужно вставить код реального курса из Вашей базы (код курса можно найти на карточке курса, на вкладке **Общие сведения** в поле **Код**). 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 | ![](course03.png) 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 | ![](if01.PNG) 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 | ![](if02.PNG) 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 | ![](for01.PNG) 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 | ![](function01.PNG) 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 | ![](Collab_test1.png) 12 | 13 | ![](Collab_test2.png) 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 | ![](run_agent01.png) 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 | ![](switch01.PNG) 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 | ![](test_agent01.png) 11 | 12 | Сохраните изменения ![](Save_Icon.PNG). 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 | ![](try01.png) 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 | ![](variables01.PNG) 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 | ![Внести изменения!](Attention03a.jpg) **Внести изменения!** 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 | --------------------------------------------------------------------------------