Управление учебным процессом ВУЗа (18.04.2024) | |
Разработка сценариев расчета | |
Система поддерживает хранение и исполнений сценариев расчета для каждого элемента регламента, которые должны быть написаны на скриптовом языке JScript. Результатом выполнения сценария является одно из значений Истина, что означает, что регламент исполнен или Ложь, что означает, что регламент не исполнен. Также в ходе исполнения сценария расчета формируется протокол проверки контрольного соотношения. Результаты последней проверки сохраняются в системе и могут быть пересчитаны по команде пользователя. Для решения специфических задач контроля исполнения регламентов система позволяет при разработке текста скрипта использовать следующие расширения пространства имен JScript:
Пример скрипта сценария расчета контрольного соотношения: 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(); |