- Регистрация
- 14.12.2016
- Сообщения
- 860
- Благодарностей
- 824
- Баллы
- 93
Часто задают вопросы, как запустить шаба из шаба, как управлять, добавить потоки итд.
Люди начинают создавать некошерные батники и прочими образами извращаться, хотя зенка предоставляет не очень приличный, но достаточный api для решения этих вопросов более адекватным путем.
Выкладываю небольшой статический класс упрощающий работу с запуском вторичных шабов.
Класс вставляем в общий код после
Примеры использования
Поиск айди шаблона по имени:
Добавление нужного числа исполнений и ожидание завершения:
GetStatus - получить статус шаблона
GetNumberOfTries - получить кол-во заданых исполнений
Люди начинают создавать некошерные батники и прочими образами извращаться, хотя зенка предоставляет не очень приличный, но достаточный api для решения этих вопросов более адекватным путем.
Выкладываю небольшой статический класс упрощающий работу с запуском вторичных шабов.
Класс вставляем в общий код после
Код:
namespace ZennoLab.OwnCode
{
Код:
public static class TaskHelper
{
public static string GetTaskId(string TaskName)
{
var tasksList = ZennoPoster.TasksList;
foreach (var task in tasksList){
string tname = Regex.Match(task,@"(?<=<Name>).*?(?=</Name>)").Value;
string tid = Regex.Match(task,@"(?<=<Id>).*?(?=</Id><Name>)").Value;
if (tname == TaskName){
return tid;
}
}
return "";
}
public static int GetNumberOfTries(string TaskName)
{
string sid = TaskHelper.GetTaskId(TaskName);
var id = Guid.Parse(sid);
var taskInfo = ZennoPoster.GetTaskInfo(id);
string execsettings = Regex.Match(taskInfo,@"(?<=<ExecutionSettings>).*?(?=</ExecutionSettings>)").Value;
string ntries = Regex.Match(execsettings,@"(?<=<NumberOfTries>).*?(?=</NumberOfTries>)").Value;
int res=0;
Int32.TryParse(ntries,out res);
return res;
}
public static string GetStatus(string TaskName)
{
string sid = TaskHelper.GetTaskId(TaskName);
var id = Guid.Parse(sid);
var taskInfo = ZennoPoster.GetTaskInfo(id);
string status = Regex.Match(taskInfo,@"(?<=<Status>).*?(?=</Status>)").Value;
return status;
//Perform - работает
//Complite - завершен
//Stop - остановлен
//Schedule - запланирован
//WaitPerform - компилится
}
public static void WaitRun(IZennoPosterProjectModel project,string TaskName)
{
int nt = GetNumberOfTries(TaskName);
string status = GetStatus(TaskName);
while( nt >0 )
{
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return; // Прерывание в PM
Thread.Sleep(3000);
nt = TaskHelper.GetNumberOfTries(TaskName);
status = GetStatus(TaskName);
switch (status)
{
case "Perform":
break;
case "Complite": nt = 0;
break;
case "Stop": nt = 0;
break;
case "Schedule":
break;
case "WaitPerform":
break;
}
project.SendInfoToLog("Ожидаем завершения "+TaskName,true);
}
}
}
Поиск айди шаблона по имени:
Код:
string tempname = "имя шаба";
if (TaskHelper.GetTaskId(tempname)==""){
project.SendErrorToLog("Не смогли найти проект "+tempname, true);
throw new Exception("Не найден проект");
}
Код:
string tempname = "имя шаба";
int tries = 50; // будет добавлено 50 исполнений
if (tries>0){
ZennoPoster.AddTries(tempname , tries);
TaskHelper.WaitRun(project,tempname ); //ожидаем завершения всех исполнений
}
Код:
//Perform - работает
//Complite - завершен
//Stop - остановлен
//Schedule - запланирован
//WaitPerform - компилится
Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.