Управление учебным процессом ВУЗа  (18.04.2024)
Разработка сценариев расчета

Система поддерживает хранение и исполнений сценариев расчета для каждого элемента регламента, которые должны быть написаны на скриптовом языке JScript. Результатом выполнения сценария является одно из значений Истина, что означает, что регламент исполнен или Ложь, что означает, что регламент не исполнен. Также в ходе исполнения сценария расчета формируется протокол проверки контрольного соотношения. Результаты последней проверки сохраняются в системе и могут быть пересчитаны по команде пользователя.

Для решения специфических задач контроля исполнения регламентов система позволяет при разработке текста скрипта использовать следующие расширения пространства имен JScript:

  • CheckResult - результат проверки. При выходе из скрипта true свидетельствует об успешном прохождении проверки (результатом проверки будет значение "Регламент исполнен"), false - о неуспешной (результатом будет значение "Регламент не исполнен").
  • LogInfo - функция, принимающая один строковый аргумент. Переданная строка будет помещена в протокол проверки. При каждом вызове этой функции в сценарии расчета в протокол будет дописана одна строка. В строке можно использовать стандартные теги HTML, позволяющие оформлять выводимый текст.
  • CheckTime - функция возвращает 0, если контрольная дата элемента регламента уже прошла, 1 - если еще нет. Решение о продолжении проверки остается на усмотрение разработчика скрипта.
  • ReglamentItem - идентификатор элемента регламента, для которого производится проверка.
  • LearnPeriod - идентификатор учебного периода, для которого производится проверка (задается пользователем при открытии формы просмотра).
  • Faculty - идентификатор факультета, для которого производится проверка.
  • ContextObject контекстный объект, реализующий интерфейс IContext. Позволяет формировать и выполнять запросы в базе данных, получать значения свойств объектов системы. Подробно возможности данного интерфейса описаны в руководстве разработчика прикладных систем на платформе "Мельница данных" в разделе Интерфейсы взаимодействия с внешними подсистемами.

Пример скрипта сценария расчета контрольного соотношения:

01var LFacultyDesc = ContextObject.getDescription(Faculty);
02var LPeriodDesc = ContextObject.getDescription(LearnPeriod);
03
04function EnumChildren(ID)
05{
06  var LDataSet = ContextObject.createDataSet("TObject");
07  LDataSet.addQueryItem(0, "ID");
08  LDataSet.addQueryItem(1, "Parent", ID);
09  var LRes = ID;
10  while (!LDataSet.eof())
11  {
12     LRes = LRes + ";" + EnumChildren(LDataSet.Field("ID"));
13     LDataSet.next();
14  }
15  return(LRes);
16}
17
18CheckResult = true;
19
20var LPeriods = EnumChildren(LearnPeriod);
21
22LDataSet = ContextObject.createDataSet("TStudLearnPeriod");
23LDataSet.addQueryItem(0, "ID", "", 8);
24LDataSet.addQueryItem(1, "LearnPeriod", LPeriods);
25LDataSet.addQueryItem(1, "Faculty", Faculty);
26LDataSet.addQueryItem(1, "CurRatingPlace", "!*");
27LCount = LDataSet.Field("ID");
28
29LDataSet = ContextObject.createDataSet("TStudLearnPeriod");
30LDataSet.addQueryItem(0, "ID");
31LDataSet.addQueryItem(0, "Student");
32LDataSet.addQueryItem(0, "LastName");
33LDataSet.addQueryItem(0, "FirstName");
34LDataSet.addQueryItem(0, "MiddleName");
35LDataSet.addQueryItem(0, "Course$D");
36LDataSet.addQueryItem(1, "LearnPeriod", LPeriods);
37LDataSet.addQueryItem(1, "Faculty", Faculty);
38LDataSet.addQueryItem(1, "CurRatingPlace", "!*");
39
40ContextObject.processStart("Поиск студентов, не имеющих результатов текущего рейтинга в периоде " +
41  LPeriodDesc + ". " + LFacultyDesc + ".", LCount);
42while (!LDataSet.eof())
43{
44  CheckResult = false;
45
46  LogInfo("Студент " +
47    "<b>" + LDataSet.Field("LastName") + " " +
48    LDataSet.Field("FirstName") + " " +
49    LDataSet.Field("MiddleName") + "</b>" +
50    LDataSet.Field("Course$D") +
51    " не имеет места в текущем рейтинге.");
52  ContextObject.processStep();
53  LDataSet.next();
54}
55ContextObject.processStop();