Вот так:Здравствуйте. Подскажите пожалуйста, как это сделать без bat файла?
ZennoPoster.AddTries(name,1); - не совсем подходит, так как изначально все шаблоны находится в остановленном состоянии. Этот метод просто добавляет попытки, но не запускает сам шаблон
string name = "";
ZennoPoster.StartTask(name);
ZennoPoster.StopTask(name);
using System.Xml;
using ZennoLab.InterfacesLibrary.Enums.Log;
//string name = "ZennoLabAlerts";
string name = project.Variables["nameProject"].Value; // из переменной ZM
// *ПРИМЕР* Запустить шаблон с именем *Раскомментировать кусок если нужен запуск*
//foreach (KeyValuePair<Guid, string> pair in GetDictionaryTasksForZennoPoster(ZennoPoster.TasksList).Where(keyValuePair => name == keyValuePair.Value))
//{
// project.SendToLog($"Задача найдена: {pair.Key}:::{pair.Value}", LogType.Info, true, LogColor.Green);
// Guid id = pair.Key;
// ZennoPoster.StartTask(id); // запуск задачи
//}
// *ПРИМЕР* Остановить шаблон с именем *Раскомментировать кусок если нужен остановка*
//foreach (KeyValuePair<Guid, string> pair in GetDictionaryTasksForZennoPoster(ZennoPoster.TasksList).Where(keyValuePair => name == keyValuePair.Value))
//{
// project.SendToLog($"Задача найдена: {pair.Key}:::{pair.Value}", LogType.Info, true, LogColor.Green);
// ZennoPoster.StopTask(pair.Key); // остановить задачу
//}
// получить словарь с guid и именами шаблонов
Dictionary<Guid, string> GetDictionaryTasksForZennoPoster(IEnumerable<string> zennoTasksList)
{
Dictionary<Guid, string> tasksDictionary = new Dictionary<Guid, string>();
List<string> tasksList = new List<string>(zennoTasksList);
if (tasksList.Count == 0)
throw new Exception("Нет задач в ZennoPoster");
foreach (string zennoTask in tasksList)
{
string xpathGetId = "Task/Id";
string xpathGetNameTask = "Task/Name";
XmlDocument doc = new XmlDocument();
doc.LoadXml($"<Task>{zennoTask}</Task>");
string idTask;
string nameTask;
// Получить id задачи
XmlNode nodeIdTask = doc.SelectSingleNode(xpathGetId);
if (nodeIdTask != null)
idTask = nodeIdTask.InnerXml;
else
throw new InvalidDataException($"{xpathGetId} не найден");
// Получить name задачи
XmlNode nodeNameTask = doc.SelectSingleNode(xpathGetNameTask);
if (nodeNameTask != null)
nameTask = nodeNameTask.InnerXml;
else
throw new InvalidDataException($"{xpathGetNameTask} не найден");
// Записать в словарь
if (Guid.TryParse(idTask, out Guid id))
{
project.SendInfoToLog($"✅ {idTask}:::{nameTask}", false);
tasksDictionary.Add(id, nameTask);
}
else
throw new FormatException($"Не удалось получить guid {idTask}\nИмя шаблона: {nameTask}");
}
return tasksDictionary;
}
Конечно, если было все так просто.)) Самый первый мой ответ ТС'у, тому подтверждение.нифига не понял для чего искать по имени... если можно запустить по имени
во всех проектах работает уже года 2 как и ни разу не было сбоя при управлении проектом.
Посмотреть вложение 97797
BuildID: 11790.19.09.2022
). Так как у меня по имени не отрабатывало. Пишет "ок", но на этом все. Шаблон в ZP как работал, так и работает.StopTask
) берет первое совпадение name, но оно не влияет на работу ZP задачи.Большое спасибо!Вот так:
Либо можно с помощью id:Запустить задачу и Остановить задачу:string name = ""; ZennoPoster.StartTask(name); ZennoPoster.StopTask(name);
Посмотреть вложение 97790
upd: Но почему-то может не работать с name. Вот ссылка на метод.
upd1: Точно работает в Guid.
а можно как то это все в OwnCode запихать?Сделал решение, чтобы можно использовать имя шаблона и не искать его guid.
Заметил интересную особенность: бывают два разных guid на одно имя шаблона. Поэтому запускаю сразу два или останавливаю сразу два.
Буду благодарен, если комьюнити поддержит кнопкой "спасибо".
Так же будут признателен, если будите делиться ссылочкой на это сообщение при будущих вопросах/ответах.
Для начала нужно добавить в using'и две строчки:
gif ↓ кликабельна
Посмотреть вложение 97794
иUsing:using System.Xml; using ZennoLab.InterfacesLibrary.Enums.Log;
Добавить в GAC:
Посмотреть вложение 97799
1. Вводим для поиска "xml"
2. Выбираем System.Xml.dll
3. Жмем "OK"
Кубик C#:
upd: мелкие правки.Пример как Запустить или Остановить задачу на основе имени шаблона://string name = "ZennoLabAlerts"; string name = project.Variables["nameProject"].Value; // из переменной ZM // *ПРИМЕР* Запустить шаблон с именем *Раскомментировать кусок если нужен запуск* //foreach (KeyValuePair<Guid, string> pair in GetDictionaryTasksForZennoPoster(ZennoPoster.TasksList).Where(keyValuePair => name == keyValuePair.Value)) //{ // project.SendToLog($"Задача найдена: {pair.Key}:::{pair.Value}", LogType.Info, true, LogColor.Green); // Guid id = pair.Key; // ZennoPoster.StartTask(id); // запуск задачи //} // *ПРИМЕР* Остановить шаблон с именем *Раскомментировать кусок если нужен остановка* //foreach (KeyValuePair<Guid, string> pair in GetDictionaryTasksForZennoPoster(ZennoPoster.TasksList).Where(keyValuePair => name == keyValuePair.Value)) //{ // project.SendToLog($"Задача найдена: {pair.Key}:::{pair.Value}", LogType.Info, true, LogColor.Green); // ZennoPoster.StopTask(pair.Key); // остановить задачу //} // получить словарь с guid и именами шаблонов Dictionary<Guid, string> GetDictionaryTasksForZennoPoster(IEnumerable<string> zennoTasksList) { Dictionary<Guid, string> tasksDictionary = new Dictionary<Guid, string>(); List<string> tasksList = new List<string>(zennoTasksList); if (tasksList.Count == 0) throw new Exception("Нет задач в ZennoPoster"); foreach (string zennoTask in tasksList) { string xpathGetId = "Task/Id"; string xpathGetNameTask = "Task/Name"; XmlDocument doc = new XmlDocument(); doc.LoadXml($"<Task>{zennoTask}</Task>"); string idTask; string nameTask; // Получить id задачи XmlNode nodeIdTask = doc.SelectSingleNode(xpathGetId); if (nodeIdTask != null) idTask = nodeIdTask.InnerXml; else throw new InvalidDataException($"{xpathGetId} не найден"); // Получить name задачи XmlNode nodeNameTask = doc.SelectSingleNode(xpathGetNameTask); if (nodeNameTask != null) nameTask = nodeNameTask.InnerXml; else throw new InvalidDataException($"{xpathGetNameTask} не найден"); // Записать в словарь if (Guid.TryParse(idTask, out Guid id)) { project.SendInfoToLog($"✅ {idTask}:::{nameTask}", false); tasksDictionary.Add(id, nameTask); } else throw new FormatException($"Не удалось получить guid {idTask}\nИмя шаблона: {nameTask}"); } return tasksDictionary; }
Если будут вопросы, пишите, вся информация есть в подписи.
Ниже приложил шаблон для примера ↓
OwnCode.StartTask("ИМЯ_ТАСКИ");