![]() | Серверный сценарий |
Серверный сценарий выполняется в контексте службы управления и позволяет получить любые данные со стороны сервера или же отправить на него управляющие воздействия.
Серверный сценарий пишется на языке C# и имеет в своем окружении доступ к переменной args, содержащей входные аргументы для выполнения. Сценарий должен возвращать динамический объект new {} с полями для анализа на клиенте или null
Пример серверного сценария с наименованием getData.
// Получение ячейки ПС и ее коммутационного аппарата var cubicle = Cubicle.Find((int)args["cubicle"]); var cubicleSwitchBoard = cubicle?.AttributeElectricSwitchboard; // Определение состояния КА var state = cubicleSwitchBoard?.GetSwitchboardState(); // Формирование текста подсказки для отображения на клиенте var hintValue = "Нет данных о состоянии"; bool? stateValue = null; if (state?.State != null) { stateValue = state.State.Value; var valueHintList = new List<string>(); valueHintList.Add(state.State.Value ? "Включено" : "Выключено"); var valueDt = state.LastSwitchDate; if (valueDt.HasValue) valueHintList.Add(string.Format("Переключение {0:dd.MM.yy HH:mm:ss}", valueDt.Value)); hintValue = string.Join("\n", valueHintList); } // Возвращаемое значение для анализа на клиенте return new { value = stateValue, hint = hintValue, assigned = cubicle != null };
Особенностью работы с серверным сценарием является асинхронная парадигма его исполнения. Пример вызова приведенного выше серверного сценария в общем клиентском сценарии.
... this.getData( { cubicle: this.cubicle ? this.cubicle.id : 0, }, rs => { if (rs.value != null){ colorToFill = rs.value ? this.colorOn : this.colorOff; }; rectNode.style.fill = colorToFill; rectNode.style.fillOpacity = colorToFill ? 1 : 0; let hintNode = this._node.querySelector('title'); hintNode.textContent = rs.hint; }, err => { console.error(err); } );