0
Under review

Подтверждение для действий

Евгений Лешкив 6 years ago in iRidium Script updated by Ekaterina (head of support) 6 years ago 7
Задача в следующем: комп на посту охраны большого частного дома. На него выведены статусы и простейшее управление всем, что есть в доме.
Необходимо, чтобы на каждое действие оператора выскакивало окно с вопросом "Действительно выполнить? - Да - Нет".
при выборе "да" выполнить действие назначенное кнопке, если "нет", то не выполнять указанные действия.
Хочется выполнить это в виде небольшого скрипта, который бы "считывал" и запоминал или блокировал действия кнопки, а затем давал им добро или не давал. Чтобы было всего одно окно с кнопками "да" и "нет" на весь проект и оно использовалось для любых действий.
Посоветуйте, как это реализовать
Добрый день.

Если у вас есть небольшой опыт работы со скриптами, то это довольно просто реализовать.

1. Создаем переменную, которая будет определять необходимое действие.
var okRequest = 0;
2. Создаем слушатели на кнопки, действие которых необходимо подтверждать и присваиваем идентификатор переменной, по которой будем отслеживать что нам делать.

IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetItem("Page 1").GetItem("Item 1"), function(){
okRequest = 1;
IR.ShowPopup('Popup_OK');
});
IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetItem("Page 1").GetItem("Item 2"), function(){
okRequest = 2;
IR.ShowPopup('Popup_OK');
});


3. Создаем слушателя для кнопки ОК и функцию, которая будет реализовывать необходимый функционал при нажатии

IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetItem("Popup_OK").GetItem("btnOK"), function(){
switch(okRequest) {
case 1: {
// делаем то, что необходимо после нажатия на ОК для первого действия
break;
}
case 2: {
// делаем то, что необходимо после нажатия на ОК для второго действия
break;
}
}
});


Как-то так, первое что пришло в голову

Это самый простой и самый затратный по времени способ, т.к. кнопок, которые нужно отслеживать будет порядка 500. Я же хочу иметь скрипт, который будет останавливать все действия выполняемые после него. Этот скрипт я буду вызывать в макросе перед действием, которое необходимо выполнить кнопке. Полагаю, что это должно работать по аналогии с паролем на кнопке.
Как-то так мне это видится.
Сложно что-то предложить не зная четкого ТЗ. Одно из предположений останавливать все драйвера, чтоб они не могли управлять оборудованием.
ТЗ простое - подтверждать каждое действие пользователя, чтобы делали все осмысленно.
Я думаю нужно просить Иридий чтоб они сделали такой функционал внутри клиента. Что-то на подобиии галочки в свойствах элемента (не выполнять, пока нет подтверждения). Либо, делать все клавиши с удержанием. Например 1 сек и на Hold выполнять макрос.
Under review
Евгений, скрипт не может остановить экшены на кнопках, он работает без пересечения с системой экшенов.
Так что в сущействующей системе останавливать экшн скриптом - нельзя.

Как сказал Дмитрий, вариант один - слушать нажатия на кнопки и выполнять заранее заданный в скрипте набор действий, который соответствует этим кнопкам.
Вручную создавать все слушатели не нужно, есть методы PopupCount и ItemCount, которые могут пробежаться по проекту и вернуть имена страниц и итемов на страницах.
Более того, можно делать так: page.GetPopup(i).Name т.е. возвращать только те попапы, которые сейчас открыты на странице. Таким образом, число слушателей резко уменьшается.
Конечно, это не отменяет того, что сами команды переедут из экшенов в скриптовую систему, но этого уже никак не избежать.