Запуск проекта из проекта

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Всем привет!

Суть вопроса:
Если следующее время запуска проекта - величина переменная, как заставить проект, после окончания всех основных действий, запланировать следующий запуск самого себя?
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Так, ответ вроде бы нашел:

var settings = @"<Id>11934be8-745d-4e0c-ac78-edad0055a47d</Id>
<StartDate>12/16/2015 11:16:00</StartDate>
<ShedulerOnDate>01/01/0001 00:00:00</ShedulerOnDate>
<EndDate>12/16/2016 11:16:00</EndDate>
<RepetitionCount>4</RepetitionCount>
<ScheduleType>EveryMinutes</ScheduleType>
<RepeatType>FinishAfter</RepeatType>
<ActivateTime>01/01/0001 00:00:00</ActivateTime>
<ActivateWorkTime>01/01/0001 00:00:00</ActivateWorkTime>
<IsActive>True</IsActive>
<NumberOfTries>1</NumberOfTries>
<Minutes>1</Minutes>
<Days>1</Days>
<LastScheduleDate>12/16/2015 11:18:00</LastScheduleDate>
<NextScheduleDate>null</NextScheduleDate>
<IsClearSucces>False</IsClearSucces>";

ZennoPoster.SetSchedulerSettings("ProjectInProject", settings);

В коде используется ID. Можно ли использовать имя?

Вопросы далее:

1. Возможно ли добавить в ZP проект используя подобный код? Файл проекта есть, его расположение и имя известно. Можно ли проверить перед добавлением, есть ли он уже в ZP и перезаписать (если вдруг вносились изменения)?
2. Можно ли удалить проект из ZP подобным же образом?
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Сам задаю вопросы, сам себе и отвечаю...

Нашел метод AddTask

// Create a task in xml format
var task =
@"<Id>{guid}</Id>
<Name>{name}</Name>
<CreateTime>{date DD.MM.YYYY hh:mm:ss}</CreateTime>
<ExecutionSettings>
<LimitOfThreads>1</LimitOfThreads>
<MaxAllowOfThreads>0</MaxAllowOfThreads>
<DoneSuccesfully>0</DoneSuccesfully>
<DoneAll>0</DoneAll>
<NumberOfTries>0</NumberOfTries>
<LastNumberOfTries>0</LastNumberOfTries>
<Priority>50</Priority>
<Proxy>{DoNotUseProxy, IfPossible, UseProxyWithoutRemove, UseProxy}</Proxy>
<Status>Newbie</Status>
<ProxyLabels></ProxyLabels>
<ShouldBeExecutedRandomly>{True, False}</ShouldBeExecutedRandomly>
<GroupLabels>Без метки</GroupLabels>
<GroupStates>Выполнены</GroupStates>
<MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>
<MaxNumOfFailStop>-1</MaxNumOfFailStop>
<NumOfFailStop>0</NumOfFailStop>
</ExecutionSettings>
<SchedulerSettings>
<StartDate>{date DD.MM.YYYY hh:mm:ss}</StartDate>
<EndDate>{date DD.MM.YYYY hh:mm:ss}</EndDate>
<RepetitionCount>1</RepetitionCount>
<ScheduleType>{EveryMinutes, EveryDays, EveryWorkDays}</ScheduleType>
<RepeatType>{WithoutEnd, FinishAfter, FinishByDate}</RepeatType>
<ActivateTime>{date DD.MM.YYYY hh:mm:ss}</ActivateTime>
<ActivateWorkTime>{date DD.MM.YYYY hh:mm:ss}</ActivateWorkTime>
<IsActive>{True, False}</IsActive>
<NumberOfTries>0</NumberOfTries>
<Minutes>1</Minutes>
<Days>1</Days>
<LastScheduleDate>{date DD.MM.YYYY hh:mm:ss}</LastScheduleDate>
<IsClearSucces>{True, False}</IsClearSucces>
</SchedulerSettings>
<Project>
<ProjectFileLocation>{path}</ProjectFileLocation>
<ProjectType>Assembly</ProjectType>
</Project>";
// Add the task
ZennoPoster.AddTask(task);

Пытаюсь использовать его для запуска нового задания.
Тут <ProjectFileLocation>{path}</ProjectFileLocation> прописываю полный путь в виде C:\newproject.xmlz
Если я все правильно понял, остальные параметры не важны и будут заполнены значениями по умолчанию? Код отрабатывает, результат ОК, однако в ZP новое задание не появляется...
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
все что в таких скобках { } нужно заменять значениями ))
новый guid можно сгенерировать так Guid.NewGuid()
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Убился с этим кодом - не работает. И, что интересно, при наличии экшена с кодом в проекте - проект сразу при старте падает в ошибку, даже не доходя до экшена...

Использую такой код:

var time = DateTime.Now;
var str = string.Format("{0}/{1}/{2} {3}:{4}:{5}", time.Month, time.Day, time.Year, time.Hour, time.Minute, time.Second);
var guid = Guid.NewGuid();

var task =
@"<Id>guid</Id>
<Name>project.Variables["Name"].Value</Name>
<CreateTime>str</CreateTime>
<ExecutionSettings>
<LimitOfThreads>1</LimitOfThreads>
<MaxAllowOfThreads>0</MaxAllowOfThreads>
<DoneSuccesfully>0</DoneSuccesfully>
<DoneAll>0</DoneAll>
<NumberOfTries>0</NumberOfTries>
<LastNumberOfTries>0</LastNumberOfTries>
<Priority>50</Priority>
<Proxy>DoNotUseProxy</Proxy>
<Status>Newbie</Status>
<ProxyLabels></ProxyLabels>
<ShouldBeExecutedRandomly>False</ShouldBeExecutedRandomly>
<GroupLabels>Без метки</GroupLabels>
<GroupStates>Выполнены</GroupStates>
<MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>
<MaxNumOfFailStop>-1</MaxNumOfFailStop>
<NumOfFailStop>0</NumOfFailStop>
</ExecutionSettings>
<SchedulerSettings>
<StartDate>str</StartDate>
<EndDate>str</EndDate>
<RepetitionCount>1</RepetitionCount>
<ScheduleType>EveryMinutes</ScheduleType>
<RepeatType>FinishAfter</RepeatType>
<ActivateTime>str</ActivateTime>
<ActivateWorkTime>str</ActivateWorkTime>
<IsActive>False</IsActive>
<NumberOfTries>0</NumberOfTries>
<Minutes>1</Minutes>
<Days>1</Days>
<LastScheduleDate>str</LastScheduleDate>
<IsClearSucces>False</IsClearSucces>
</SchedulerSettings>
<Project>
<ProjectFileLocation>project.Variables["patch"].Value</ProjectFileLocation>
<ProjectType>Assembly</ProjectType>
</Project>";
// Add the task

ZennoPoster.AddTask(task);

Может в переменной str что то не то??
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
апну.
Может у кого то есть работающий пример?
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
<Name>project.Variables["Name"].Value</Name> - так никогда не заработает, <Name>Test</Name> или например так <Name>{0}</Name>
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
откуда копировал повнимательней там почитай, всё работает не раз проверено
в самом простом варианте, когда все прописано вручную - все действительно работает. Проблема в другом - передать в код переменные значения имени и пути к проекту.
Почему то конкатенация строк способом "string1"+"string2" приводит к ошибке
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Разобрался. Если кому то поможет:

var task =
"<Id>"+project.Variables["name"].Value+"</Id>"+
"<Name>"+project.Variables["name"].Value+"</Name>"+
"<CreateTime>01/01/0001 00:00:00</CreateTime>"+
"<ExecutionSettings> "+
" <LimitOfThreads>1</LimitOfThreads>"+
" <MaxAllowOfThreads>0</MaxAllowOfThreads>"+
" <DoneSuccesfully>0</DoneSuccesfully>"+
" <DoneAll>0</DoneAll>"+
" <NumberOfTries>0</NumberOfTries>"+
" <LastNumberOfTries>0</LastNumberOfTries>"+
" <Priority>50</Priority>"+
" <Proxy>DoNotUseProxy</Proxy>"+
" <Status>Newbie</Status>"+
" <ProxyLabels></ProxyLabels>"+
" <ShouldBeExecutedRandomly>False</ShouldBeExecutedRandomly>"+
" <GroupLabels>Без метки</GroupLabels>"+
" <GroupStates>Выполнены</GroupStates>"+
" <MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>"+
" <MaxNumOfFailStop>-1</MaxNumOfFailStop>"+
" <NumOfFailStop>0</NumOfFailStop>"+
"</ExecutionSettings>"+
"<SchedulerSettings>"+
" <StartDate>01/01/0001 00:00:00</StartDate>"+
" <EndDate>01/01/0001 00:00:00</EndDate>"+
" <RepetitionCount>1</RepetitionCount>"+
" <ScheduleType>EveryMinutes</ScheduleType>"+
" <RepeatType>FinishAfter</RepeatType>"+
" <ActivateTime>01/01/0001 00:00:00</ActivateTime>"+
" <ActivateWorkTime>01/01/0001 00:00:00</ActivateWorkTime>"+
" <IsActive>False</IsActive>"+
" <NumberOfTries>0</NumberOfTries>"+
" <Minutes>1</Minutes>"+
" <Days>1</Days>"+
" <LastScheduleDate>01/01/0001 00:00:00</LastScheduleDate>"+
" <IsClearSucces>False</IsClearSucces>"+
"</SchedulerSettings>"+
"<Project>"+
" <ProjectFileLocation>"+project.Variables["patch"].Value+"</ProjectFileLocation>"+
" <ProjectType>Assembly</ProjectType>"+
"</Project>";
// Add the task
ZennoPoster.AddTask(task);
 
  • Спасибо
Реакции: phoenixs и sanya

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
Двигаюсь дальше. Перед добавлением нового задания, необходимо удалить задание с тем же именем (если оно есть), чтобы не появлялись дубли.
Для этого есть метод RemoveTask, его использование в вики описывается следующим кодом:

// Gets list of tasks
var tasksList = new List<string>(ZennoPoster.TasksList);
// Check the presence of items in the list
if(tasksList.Count != 0)
{
// Select ane item
var source = tasksList[0];
// Sets path to task id
var xpath = "Task/Id";
// Gets guid string from task data
var doc = new System.Xml.XmlDocument();
doc.LoadXml("<Task>" + source + "</Task>");
string result;
var node = doc.SelectSingleNode(xpath);
if (node != null)
result = node.InnerXml;
else
throw new InvalidDataException(string.Format("{0} is null", xpath));
Guid id;
// Parse guid
if (Guid.TryParse(result, out id))
// If ok, remove the task
ZennoPoster.RemoveTask(id);
else
throw new FormatException(string.Format("{0} is not guid", result));
}

Мне известно только имя задания, как использовать этот метод в таком случае? Можно ли получить ID, зная имя?
Я правильно понял, что ID необходимо передать в переменную xpath?
 
  • Спасибо
Реакции: phoenixs

zennomoves

Client
Регистрация
05.12.2011
Сообщения
235
Благодарностей
72
Баллы
28
Всем привет!

Суть вопроса:
Если следующее время запуска проекта - величина переменная, как заставить проект, после окончания всех основных действий, запланировать следующий запуск самого себя?
А можно узнать, какие дополнительные условия при этом должны соблюдаться?

Из того, что написано, не понятно, почему нельзя в конце проекта прописать паузу, которая нам нужна, и в планировщике выставить необходимое число повторов.
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
А можно узнать, какие дополнительные условия при этом должны соблюдаться?

Из того, что написано, не понятно, почему нельзя в конце проекта прописать паузу, которая нам нужна, и в планировщике выставить необходимое число повторов.
Пауза в конце проекта будет занимать поток? Если да - то вариант не подходит. Необходимо высвободить поток и запланировать запуск проекта на переменную величину. Величина становится известна в процессе выполнения проекта - от нескольких десятков минут до суток.

Вопрос про удаление задания актуален.
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
63
Подскажите как из проекта можно Для другого шаблона (которий додан в зп) добавить количество попиток, очистить список успеха....
такое можна проделать через командную строку, но хочется без костилей. Или не замарачиватся и сзелать через бат файл
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Подскажите как из проекта можно Для другого шаблона (которий додан в зп) добавить количество попиток, очистить список успеха....
такое можна проделать через командную строку, но хочется без костилей. Или не замарачиватся и сзелать через бат файл
сделать бат файл. очевидно же проще всего
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
63
да но когда проектам 50-60 нужно изменить количество попиток... времени очень много уходит.
вот и думал что через снипет в цикле бистрее получится
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
можно еще выделить все шаблоны в постере и поменять там для всех одним разом
 

смм24

Client
Регистрация
05.07.2017
Сообщения
76
Благодарностей
10
Баллы
8
Разобрался. Если кому то поможет:

var task =
"<Id>"+project.Variables["name"].Value+"</Id>"+
"<Name>"+project.Variables["name"].Value+"</Name>"+
"<CreateTime>01/01/0001 00:00:00</CreateTime>"+
"<ExecutionSettings> "+
" <LimitOfThreads>1</LimitOfThreads>"+
" <MaxAllowOfThreads>0</MaxAllowOfThreads>"+
" <DoneSuccesfully>0</DoneSuccesfully>"+
" <DoneAll>0</DoneAll>"+
" <NumberOfTries>0</NumberOfTries>"+
" <LastNumberOfTries>0</LastNumberOfTries>"+
" <Priority>50</Priority>"+
" <Proxy>DoNotUseProxy</Proxy>"+
" <Status>Newbie</Status>"+
" <ProxyLabels></ProxyLabels>"+
" <ShouldBeExecutedRandomly>False</ShouldBeExecutedRandomly>"+
" <GroupLabels>Без метки</GroupLabels>"+
" <GroupStates>Выполнены</GroupStates>"+
" <MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>"+
" <MaxNumOfFailStop>-1</MaxNumOfFailStop>"+
" <NumOfFailStop>0</NumOfFailStop>"+
"</ExecutionSettings>"+
"<SchedulerSettings>"+
" <StartDate>01/01/0001 00:00:00</StartDate>"+
" <EndDate>01/01/0001 00:00:00</EndDate>"+
" <RepetitionCount>1</RepetitionCount>"+
" <ScheduleType>EveryMinutes</ScheduleType>"+
" <RepeatType>FinishAfter</RepeatType>"+
" <ActivateTime>01/01/0001 00:00:00</ActivateTime>"+
" <ActivateWorkTime>01/01/0001 00:00:00</ActivateWorkTime>"+
" <IsActive>False</IsActive>"+
" <NumberOfTries>0</NumberOfTries>"+
" <Minutes>1</Minutes>"+
" <Days>1</Days>"+
" <LastScheduleDate>01/01/0001 00:00:00</LastScheduleDate>"+
" <IsClearSucces>False</IsClearSucces>"+
"</SchedulerSettings>"+
"<Project>"+
" <ProjectFileLocation>"+project.Variables["patch"].Value+"</ProjectFileLocation>"+
" <ProjectType>Assembly</ProjectType>"+
"</Project>";
// Add the task
ZennoPoster.AddTask(task);
Почему то если не поставить дату 01/01/0001 00:00:00 работать не хочет, работает да и ладно
 

xopek2007

Client
Регистрация
10.05.2013
Сообщения
101
Благодарностей
8
Баллы
18
Разобрался. Если кому то поможет:

var task =
"<Id>"+project.Variables["name"].Value+"</Id>"+
"<Name>"+project.Variables["name"].Value+"</Name>"+
"<CreateTime>01/01/0001 00:00:00</CreateTime>"+
"<ExecutionSettings> "+
" <LimitOfThreads>1</LimitOfThreads>"+
" <MaxAllowOfThreads>0</MaxAllowOfThreads>"+
" <DoneSuccesfully>0</DoneSuccesfully>"+
" <DoneAll>0</DoneAll>"+
" <NumberOfTries>0</NumberOfTries>"+
" <LastNumberOfTries>0</LastNumberOfTries>"+
" <Priority>50</Priority>"+
" <Proxy>DoNotUseProxy</Proxy>"+
" <Status>Newbie</Status>"+
" <ProxyLabels></ProxyLabels>"+
" <ShouldBeExecutedRandomly>False</ShouldBeExecutedRandomly>"+
" <GroupLabels>Без метки</GroupLabels>"+
" <GroupStates>Выполнены</GroupStates>"+
" <MaxNumOfSuccesStop>-1</MaxNumOfSuccesStop>"+
" <MaxNumOfFailStop>-1</MaxNumOfFailStop>"+
" <NumOfFailStop>0</NumOfFailStop>"+
"</ExecutionSettings>"+
"<SchedulerSettings>"+
" <StartDate>01/01/0001 00:00:00</StartDate>"+
" <EndDate>01/01/0001 00:00:00</EndDate>"+
" <RepetitionCount>1</RepetitionCount>"+
" <ScheduleType>EveryMinutes</ScheduleType>"+
" <RepeatType>FinishAfter</RepeatType>"+
" <ActivateTime>01/01/0001 00:00:00</ActivateTime>"+
" <ActivateWorkTime>01/01/0001 00:00:00</ActivateWorkTime>"+
" <IsActive>False</IsActive>"+
" <NumberOfTries>0</NumberOfTries>"+
" <Minutes>1</Minutes>"+
" <Days>1</Days>"+
" <LastScheduleDate>01/01/0001 00:00:00</LastScheduleDate>"+
" <IsClearSucces>False</IsClearSucces>"+
"</SchedulerSettings>"+
"<Project>"+
" <ProjectFileLocation>"+project.Variables["patch"].Value+"</ProjectFileLocation>"+
" <ProjectType>Assembly</ProjectType>"+
"</Project>";
// Add the task
ZennoPoster.AddTask(task);
А можно тут еще добавить импорт входных настроек из файла?
Или записать значение переменной во входные настройки?
 

Bullet

Client
Регистрация
16.12.2015
Сообщения
186
Благодарностей
19
Баллы
18
черт возьми... этож было больше 4-х лет назад!
а я не помню даже с кем и что пил на прошлой неделе..
 

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