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

  • Автор темы Автор темы Bullet
  • Дата начала Дата начала

Bullet

Client
Регистрация
16.12.2015
Сообщения
185
Реакции
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 подобным же образом?
 
Сам задаю вопросы, сам себе и отвечаю...

Нашел метод 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 новое задание не появляется...
 
все что в таких скобках { } нужно заменять значениями ))
новый guid можно сгенерировать так Guid.NewGuid()
 
Убился с этим кодом - не работает. И, что интересно, при наличии экшена с кодом в проекте - проект сразу при старте падает в ошибку, даже не доходя до экшена...

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

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 что то не то??
 
апну.
Может у кого то есть работающий пример?
 
<Name>project.Variables["Name"].Value</Name> - так никогда не заработает, <Name>Test</Name> или например так <Name>{0}</Name>
 
откуда копировал повнимательней там почитай, всё работает не раз проверено
в самом простом варианте, когда все прописано вручную - все действительно работает. Проблема в другом - передать в код переменные значения имени и пути к проекту.
Почему то конкатенация строк способом "string1"+"string2" приводит к ошибке
 
Разобрался. Если кому то поможет:

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
Двигаюсь дальше. Перед добавлением нового задания, необходимо удалить задание с тем же именем (если оно есть), чтобы не появлялись дубли.
Для этого есть метод 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
Всем привет!

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

А можно узнать, какие дополнительные условия при этом должны соблюдаться?

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

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

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

Вопрос про удаление задания актуален.
 
Подскажите как из проекта можно Для другого шаблона (которий додан в зп) добавить количество попиток, очистить список успеха....
такое можна проделать через командную строку, но хочется без костилей. Или не замарачиватся и сзелать через бат файл
 
Подскажите как из проекта можно Для другого шаблона (которий додан в зп) добавить количество попиток, очистить список успеха....
такое можна проделать через командную строку, но хочется без костилей. Или не замарачиватся и сзелать через бат файл
сделать бат файл. очевидно же проще всего
 
да но когда проектам 50-60 нужно изменить количество попиток... времени очень много уходит.
вот и думал что через снипет в цикле бистрее получится
 
можно еще выделить все шаблоны в постере и поменять там для всех одним разом
 
Разобрался. Если кому то поможет:

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 работать не хочет, работает да и ладно
 
Разобрался. Если кому то поможет:

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);
А можно тут еще добавить импорт входных настроек из файла?
Или записать значение переменной во входные настройки?
 
черт возьми... этож было больше 4-х лет назад!
а я не помню даже с кем и что пил на прошлой неделе..
 

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