Запуск задания после выполнения.

kaskader

Client
Регистрация
06.04.2016
Сообщения
10
Благодарностей
2
Баллы
3
Добрый день.
Есть купленный закрытый шаблон.
Есть подключенный модем.
Задача. Перезагружать модем. Запускать закрытый шаблон. и так по кругу.
Пока сделал так: Сделал шаблон с перезагрузкой модема и разными нужными проверками. Создал бат-файл для запуска купленного шаблона.
Запускаю шаблон. Он перезагружает модем. После этого бат-файлом запускает закрытый шаблон.
Вопрос. Как сделать так, чтобы после выполнения опять запустить шаблон с перезагрузкой модема. То-есть зациклить все это действо.

PS: В С# не разбираюсь. Делаю все на кубиках.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Использовать экшн "Проект в проекте"

В конце шаблона, который перезагружает модем, добавляем через "Проект в проекте" закрытый шаблон.
В настройках шаблона (в ЗП) ставим необходимое нам кол-во выполнений.
 

kaskader

Client
Регистрация
06.04.2016
Сообщения
10
Благодарностей
2
Баллы
3
Спасибо.
Я пробовал это.
Вылазит ошибка: "Ошибка при получении настроек: Входная строка имела неверный формат."
Поэтому и сделал запуск через bat.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Возможно закрытый шаблон имеет входящие настройки?
Можно попробовать передавать их в настройках экшена "Проект в проекте".
 
  • Спасибо
Реакции: kaskader

kaskader

Client
Регистрация
06.04.2016
Сообщения
10
Благодарностей
2
Баллы
3
А может есть какая-то возможность делать проверку, работает ли на данный момент другой шаблон?
И когда перестает работать запускать нужный.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
А может есть какая-то возможность делать проверку, работает ли на данный момент другой шаблон?
Написал сниппет. У себя тестил, всё работает.
Возможно есть более изящные варианты решения данной задачи; в этом сниппете я слепил то, что когда-то встречал на форуме.

В Project Maker он работать отказывается, проверять в ZP. Перед запуском надо добавить в Ссылки из GAC библиотеку System.Xml (4.0.0).
Также до запуска сниппета в проекте должна существовать переменная с именем project_name, в ней должно хранится имя шаблона, который будем проверять. Если в списке шаблонов не будет найден шаб с указанным именем, то будет выброшено исключение, т.е. экшн уйдёт по красной ветке.
Ещё надо создать переменную timeout, в ней целочисленное значение - кол-во секунд, сколько будем ждать выполнения проверяемого шаблона. Если шаблон будет выполнятся дольше, чем указано в timeout, будет выброшено исключение.

Возможно после того, как запускается шаблон через батник, стоит сделать небольшую задержку, т.к. он стартует не моментально и сниппет "успешно" завершиться т.к. у шаблона будет статус "Выполнен".

В случае успеха сниппет просто выйдет по зелёной ветке.

Лучше сначала аккуратно протестировать сниппет (сам я его тестил, но возможно чего-то не учёл), перед тем как кидать в бой:-)

C#:
// Не забудь подключить System.Xml (4.0.0) в GAC

int timeout = Convert.ToInt32(project.Variables["timeout"].Value);
string project_name = project.Variables["project_name"].Value;


var checker = (Func<string, string>)((p_name) => {
    System.Xml.XmlDocument target = null;

    // Проверяем все проекты, которые добавлены в ЗП.
    // Выходим как только находим первое полное совпадение имени.
    foreach (var task in ZennoPoster.TasksList)
    {
        System.Xml.XmlDocument xml_doc = new System.Xml.XmlDocument();
        xml_doc.LoadXml("<Task>" + task + "</Task>");
        System.Xml.XmlNode xml_p_name = xml_doc.SelectSingleNode("Task/Name");

        if (xml_p_name.InnerText == p_name)
        {
            target = xml_doc;
            break;
        }
    }
    if (target == null)
        throw new Exception("Не удалось найти проект с именем `" + p_name + "`");
    // string name = target.SelectSingleNode("Task/Name").InnerText;
    string status = target.SelectSingleNode("Task/ExecutionSettings/Status").InnerText;

    // project.SendInfoToLog(name, status, true);
    return status;
});

bool is_project_active = true;
for (int i=0; i<timeout; i++)
{
    string project_status = checker(project_name);
    // Во время компиляции у проекта статус - WaitPerform
    // Во время работы - Perform
    if (!project_status.Contains("Perform"))
    {
        project.SendInfoToLog(String.Format("Шаблон {0} закончил работу", project_name), true);
        is_project_active = false;
        break;
    }
    Thread.Sleep(1000);
}

if (is_project_active)
    throw new Exception(String.Format("[TimeoutError] Шаблон {0} не завершился после {1} секунд работы", project_name, timeout));
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)