Как изменить значение по-умолчанию для переменной?

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Всем привет!
Мы знаем, что в Зеннопостере есть переменные.
Мы можем их создать вручную или они могут быть созданы автоматически (VariableGroupTypeV4.AutoGenerated или VariableGroupTypeV4.UserDefined отвечают за вкладку Свои или Авто, при этом вкладки Окружение, Глобальные, Json, Xml - нет в этом перечислении).

В Зеннопостере переменная чуть больше, чем строка - это объект, содержащий несколько полей/свойств - Имя, Значение, Значение по-умолчанию, Примечание, Тип (Своя/Авто).
Код ниже выводит значения этих полей. Но, мне не получилось вытащить информацию о поле Значение по-умолчанию.
Собственно вопрос - как это сделать?
C#:
string name = "temp";
ILocalVariable lv = project.Variables[name];
project.SendInfoToLog(string.Format(@"1. Group: {0}",lv.Group));
project.SendInfoToLog(string.Format(@"2. Name: {0}",lv.Name));
project.SendInfoToLog(string.Format(@"3. Value: {0}",lv.Value));
project.SendInfoToLog(string.Format(@"4. по-умолчанию ????")); // как узнать?
project.SendInfoToLog(string.Format(@"5. Comment: {0}",lv.Comment));
53843


Мы можем перенести автоматически переменную с одной группы в другую - например из Свои в Авто и обратно.
Это позволяет строить логику шаблона в виде если переменная не находится в нужной группе - значит выполняем какое-то другое действие (или банально использовать в виде обычного значения bool включая или выключая возможность продолжения работы шаблона).
C#:
string name = "temp";
ILocalVariable lv = project.Variables[name];
project.SendInfoToLog(string.Format(@"1. Group: {0}",lv.Group));
lv.Group = VariableGroupTypeV4.AutoGenerated;
project.SendInfoToLog(string.Format(@"1. Group: {0}",lv.Group));
lv.Group = VariableGroupTypeV4.UserDefined;
project.SendInfoToLog(string.Format(@"1. Group: {0}",lv.Group));
Мы можем также переименовать переменную в любое время:
C#:
string name = "temp";
ILocalVariable lv = project.Variables[name];
project.SendInfoToLog(string.Format(@"2. Name: {0}",lv.Name));
lv.Name = "temp777";
project.SendInfoToLog(string.Format(@"2. Name: {0}",lv.Name));
lv.Name = "temp";
project.SendInfoToLog(string.Format(@"2. Name: {0}",lv.Name));
Также можно поменять комментарий/примечание:
C#:
string name = "temp";
ILocalVariable lv = project.Variables[name];
project.SendInfoToLog(string.Format(@"5. Comment: {0}",lv.Comment));
lv.Comment = "примечание 1";
project.SendInfoToLog(string.Format(@"5. Comment: {0}",lv.Comment));
lv.Comment = "примечание 2";
project.SendInfoToLog(string.Format(@"5. Comment: {0}",lv.Comment));
И также естественно мы можем поменять значение (собственно многие больше, чем изменение значения никак по другому не используют эти переменные):
C#:
string name = "temp";
ILocalVariable lv = project.Variables[name];
project.SendInfoToLog(string.Format(@"3. Value: {0}",lv.Value));
lv.Value = "значение 1";
project.SendInfoToLog(string.Format(@"3. Value: {0}",lv.Value));
lv.Value = "значение 2";
project.SendInfoToLog(string.Format(@"3. Value: {0}",lv.Value));
Как поменять содержимое поля Значение по-умолчанию в процессе выполнения шаблона (чтобы следующий поток который стартанет уже использовал новое значение)?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
когда ты меняешь имя или комментарий, в след. потоке эти изменения будут?
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
когда ты меняешь имя или комментарий, в след. потоке эти изменения будут?
Значит, изменить значение нельзя, я правильно понял?
Но, всё таки получить значение этого поля как-то можно, или также никак нельзя?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Значит, изменить значение нельзя, я правильно понял?
Но, всё таки получить значение этого поля как-то можно, или также никак нельзя?
я не знаю. Но по логике это будет изменение шаблона. Мне кажется, вряд ли доступно откуда либо кроме PM
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
я не знаю. Но по логике это будет изменение шаблона. Мне кажется, вряд ли доступно откуда либо кроме PM
В сообщении пользователя Adigen есть код который создает переменную, вызывая метод QuickCreateVariable:
C#:
string variableName = "MyVariableName"; // Имя новой переменной
string variableValue = "MyVariableValue"; // Значение новой переменной
object obj = project.Variables;
obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{variableName});
project.Variables[variableName].Value = variableValue;
Возможно, нужно просто где-то почитать что передавать методу QuickCreateVariable чтобы установить значения по умолчанию сразу (и тогда при создании переменной сразу же должны заполниться все поля... Но, по поиску описания QuickCreateVariable ничего дельного кроме сообщения на которое я оставил ссылку найти не получается... Из-за чего и создал эту тему, чтобы разобраться (да может и кому-то это поможет).
 
  • Спасибо
Реакции: Alexmd

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
В сообщении пользователя Adigen есть код который создает переменную, вызывая метод QuickCreateVariable:
C#:
string variableName = "MyVariableName"; // Имя новой переменной
string variableValue = "MyVariableValue"; // Значение новой переменной
object obj = project.Variables;
obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{variableName});
project.Variables[variableName].Value = variableValue;
Возможно, нужно просто где-то почитать что передавать методу QuickCreateVariable чтобы установить значения по умолчанию сразу (и тогда при создании переменной сразу же должны заполниться все поля... Но, по поиску описания QuickCreateVariable ничего дельного кроме сообщения на которое я оставил ссылку найти не получается... Из-за чего и создал эту тему, чтобы разобраться (да может и кому-то это поможет).
опять же. Создаёт переменную внутри потока. Остаётся ли эта переменная при след запуске? Я не проверял, но мне кажется, что нет. Ты проверял?
 
  • Спасибо
Реакции: udder и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
опять же. Создаёт переменную внутри потока. Остаётся ли эта переменная при след запуске? Я не проверял, но мне кажется, что нет. Ты проверял?
Переменная не остается - это нормально (она должна пропасть при завершении потока).
Но, в целом это не должно мешать как-то получить данные поля по-умолчанию и изменять данные поля по-умолчанию? (даже если с логической точки зрения это бесполезно).

P.S. Ну вот смотрите, я хочу создать 1000 переменных в PM и задать им значения по-умолчанию, потом сохранить шаблон и гонять его уже в Зеннопостере. Получается - что реализовать это автоматически нельзя - чисто разве что вручную сидеть и создавать переменные?
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Переменная не остается - это нормально (она должна пропасть при завершении потока).
Но, в целом это не должно мешать как-то получить данные поля по-умолчанию и изменять данные поля по-умолчанию? (даже если с логической точки зрения это бесполезно).

P.S. Ну вот смотрите, я хочу создать 1000 переменных в PM и задать им значения по-умолчанию, потом сохранить шаблон и гонять его уже в Зеннопостере. Получается - что реализовать это автоматически нельзя - чисто разве что вручную сидеть и создавать переменные?
я понял о чём ты. Но что-то мне подсказывает. Что-то мне подсказывает, что под таким углом разработчики создание переменных не рассматривали
 
  • Спасибо
Реакции: BAZAg

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
P.S. Ну вот смотрите, я хочу создать 1000 переменных в PM и задать им значения по-умолчанию, потом сохранить шаблон и гонять его уже в Зеннопостере. Получается - что реализовать это автоматически нельзя - чисто разве что вручную сидеть и создавать переменные?
Ничто ведь не мешает оставить код инициализации переменных в шаблоне. Назовем это пользовательская инициализация переменных. Кстати в проджекте созданные переменные остаются и могут быть сохранены.
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Ничто ведь не мешает оставить код инициализации переменных в шаблоне. Назовем это пользовательская инициализация переменных. Кстати в проджекте созданные переменные остаются и могут быть сохранены.
Да, как раз для этого мне код и подходит - создал переменные - сохранил шаблон - удалил код - отдал шаблон заказчику без кода - и пусть тот, кто продолжит работать над моим шаблоном думает зачем там 1000 переменных и зачем там какие-то значения сидят :-)
я понял о чём ты. Но что-то мне подсказывает. Что-то мне подсказывает, что под таким углом разработчики создание переменных не рассматривали
Да, может быть и так, просто как узнать как можно использовать метод QuickCreateVariable и что ему ещё можно передавать?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Да, как раз для этого мне код и подходит - создал переменные - сохранил шаблон - удалил код - отдал шаблон заказчику без кода - и пусть тот, кто продолжит работать над моим шаблоном думает зачем там 1000 переменных и зачем там какие-то значения сидят :-)

Да, может быть и так, просто как узнать как можно использовать метод QuickCreateVariable и что ему ещё можно передавать?
я ради интереса пытался передать 2-3-4 параметра в массиве new Object[]. Ответ был один - несоответствие числа параметров. Так что вряд ли QuickCreateVariable принимает что-то кроме имени переменной
 
  • Спасибо
Реакции: BAZAg

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
818
Баллы
93
Под похожую задачу я сделал такую штуку. Первый запуск в пм - создаются все нужные переменные. А при повторных - данные из инишника забиваются в переменные.
А ILocalVariable не имеет поля значений по умолчанию, этим пм где-то рулит.
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
я ради интереса пытался передать 2-3-4 параметра в массиве new Object[]. Ответ был один - несоответствие числа параметров. Так что вряд ли QuickCreateVariable принимает что-то кроме имени переменной
Да, видимо так и есть... Видимо придётся отказаться от задумки.
А ILocalVariable не имеет поля значений по умолчанию, этим пм где-то рулит.
Может быть есть ещё какие-то скрытые методы создания переменной? Как-то же мы создаем переменные вручную, как-то же мы вручную указываем значения по-умолчанию, как-то же нам отображается значение по-умолчанию - значит должны быть какие-то методы, которые можно было бы вызвать для выполнения этих действий - вот только опыта не хватает расковырять, чтобы понять как это сделать...
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Может быть есть ещё какие-то скрытые методы создания переменной? Как-то же мы создаем переменные вручную, как-то же мы вручную указываем значения по-умолчанию, как-то же нам отображается значение по-умолчанию - значит должны быть какие-то методы, которые можно было бы вызвать для выполнения этих действий - вот только опыта не хватает расковырять, чтобы понять как это сделать...
ну в c# нет методов установки по умолчанию. комментарий есть. имя есть. значение есть.
53966


а чем плоха идея вставлять в начало проекта кубик присвоения начальных значений переменным ? ну или из ini файла их грузить как выше предложили ?
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
а чем плоха идея вставлять в начало проекта кубик присвоения начальных значений переменным ?
Идея плохая потому, что запретит пользователю менять значение через входящие настройки.
Кроме этого - значения с входящих настроек, которые подставляются при старте шаблона - это не то же самое, что значения которые устанавливаются для переменной по-умолчанию.
Значения по-умолчанию - это те, которые установил разработчик шаблона, а значения с входящих настроек - это то, что себе решил установить пользователь шаблона.
А я хочу автоматически отслеживать состояние между входящими настройками (что ввёл пользователь и что я сам установил в шаблоне).
Также меня посещают мысли о создании большого количества переменных с различными значениями, которые будут подгружаться при старте шаблона.
Но, я не хочу эти переменные создавать кодом в начале шаблона и потом присваивать им значения - я хочу в конечной версии шаблона удалить этот код и оставить шаблон с большим количеством переменных с установленными значениями по-умолчанию.

Дело тут такое, что "это не возможно" и "я не знаю как реализовать" - это также не одно и то же - то что я чего-то не знаю не значит, что нельзя как-то ухитриться и найти нужную лазейку (лень писать какой-то отдельный автокликер который будет 100500 раз кликать по кнопке создать переменную и потом заполнять нужные переменные нужными значениями по-умолчанию). Отказаться от этой затеи для меня также не вариант - да и кто знает, вдруг всё таки как-то можно будет реализовать данную задумку (на крайний случай наверно даже через WinApi покликать по нужным кнопкам графического интерфейса PM, но, пока это делать лень...).

ну или из ini файла их грузить как выше предложили ?
Вариант из файла - это подписать свои шаблоны постоянно что-то подгружать с жесткого диска, что не есть хорошо (да и медленнее чем с ОЗУ), кроме того постоянно нужно проверять значение не пропал ли данный файл, не используется ли этот файл кем-то ещё (например любопытным пользователем шаблона), да и в целом подгрузка с файла - это аналогия подгрузки профиля, а мне нужно держать данные в оперативной памяти. Вместо профиля я уже использую файлы json, мне как-то удобнее с них брать данные, чем с ini - выгружаю туда целые объекты, и когда считываю - то намного проще потом воссоздать эти объекты. Но, тут уже кто к чему больше привык. В целом, вопрос не о том, как реализовать что-то по другому (вариантов с файлов, с базы данных, с облака или ещё откуда-то медленнее и геморойнее, чем просто получать данные с ОЗУ, и очевидно, что можно построить логику по другому, но, тут как бы не хочу я по другому, а хочу именно так, как задумал изначально).

Если такой возможности нет - тогда нужно просить разработчиков Зенно, чтобы предоставили такой функционал. Если он есть - то я хотел бы его как-то найти. Есть же функционал при подгрузке профиля "Создавать недостающие переменные" - может быть есть смысл как-то сгенерировать профиль, потом его подгрузить с указанной настройкой - что и позволит подгрузить нужные переменные с нужными значениями по-умолчанию... Танцы с бубном конечно, но, всё таки возможно это будет одним из вариантов, если другой вариант не будет найден.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Если такой возможности нет - тогда нужно просить разработчиков Зенно, чтобы предоставили такой функционал. Если он есть - то я хотел бы его как-то найти. Есть же функционал при подгрузке профиля "Создавать недостающие переменные" - может быть есть смысл как-то сгенерировать профиль, потом его подгрузить с указанной настройкой - что и позволит подгрузить нужные переменные с нужными значениями по-умолчанию... Танцы с бубном конечно, но, всё таки возможно это будет одним из вариантов, если другой вариант не будет найден.
ну так в самом деле , в предложениях создайте тему для добавления доп. опции сюда
53982


я вон их просил в фулэмулятион крысы добавить относительные координаты, и пожалуйста в сегодняшнем обновлении они их добавили :-)
 
  • Спасибо
Реакции: BAZAg

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
818
Баллы
93
Если такой возможности нет - тогда нужно просить разработчиков Зенно, чтобы предоставили такой функционал. Если он есть - то я хотел бы его как-то найти. Есть же функционал при подгрузке профиля "Создавать недостающие переменные" - может быть есть смысл как-то сгенерировать профиль, потом его подгрузить с указанной настройкой - что и позволит подгрузить нужные переменные с нужными значениями по-умолчанию... Танцы с бубном конечно, но, всё таки возможно это будет одним из вариантов, если другой вариант не будет найден.
Прошу прощения, конечно, но у меня создалось впечатление, что вы хотите достать до гланд, через кишку.
Создание сотен переменных, именно зеннопостеровских переменных - смысла вообще не имеет для процесса исполнения, это важно только для процесса разработки. Если вы эти переменные создаете для процесса разработки шаблона - тогда еще ладно. Но если вы их создаете просто как хранилища инфы - это уже то самое гландирование.

Если надо просто сравнивать дефолтные данные с пользовательскими - сделайте слепок актуальных данных и сравнивайте со слепком дефолтных. Его хранение вопрос вторичный - бд, файл, прямо в коде, да где угодно. И сравнивайте себе два списка обьектов по полям. Прошлись по обоим и сравнили все что нужно.

Может я конечно и не понимаю до конца вашу задумку, но то что я вижу, на текущий момент, хм, ну неправильно чтоль.. Попытки кидаться печеньками, для определения силы ветра. Т.е. да, можно, если извратиться, но зачем?
 
  • Спасибо
Реакции: BAZAg

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
271
Баллы
63
Да, как раз для этого мне код и подходит - создал переменные - сохранил шаблон - удалил код - отдал шаблон заказчику без кода - и пусть тот, кто продолжит работать над моим шаблоном думает зачем там 1000 переменных и зачем там какие-то значения сидят :-)
А что помешает их очистить?
55045
 

JoDiM

Client
Регистрация
24.12.2019
Сообщения
3
Благодарностей
0
Баллы
1
Я так понимаю, Вы хотите, что при следующем запуске проекта все переменные сохранялись и использовались дальше?
Тоже столкнулся с такой проблемой, смог решить её только через список)
 

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
Hope this can help you

create variables with default value

create variables with default value:
object magicClassObject = project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{"myvar","myValue",VariableGroupTypeV4.UserDefined,true });
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Hope this can help you

create variables with default value

create variables with default value:
object magicClassObject = project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{"myvar","myValue",VariableGroupTypeV4.UserDefined,true });
Thank you friend! I tried to find it!
 

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
Thank you friend! I tried to find it!
Thanks,

My curiosity started when you commented "GetMethod (" Quick Create Variable ")", would there be more of this type?

Get Methods and their parameters by reflection c#:
//System.Reflection  required
//System.Windows.Forms   required

//what are their methods? (modify by the one required)
object obj = project.Variables;

System.Reflection.MethodInfo[] methodInfos = obj.GetType().GetMethods(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.DeclaredOnly);

string ConcatenateInfoParameters = "";
string resulFinal = "";
int NoLast = 0;

foreach (System.Reflection.MethodInfo methodInfo in methodInfos)
{
  string zero = "MethodName = " + methodInfo.Name;
  System.Reflection.ParameterInfo[] pars  = methodInfo.GetParameters();
  int last = methodInfo.GetParameters().Length;
  foreach (System.Reflection.ParameterInfo p in pars){
  string one = String.Format("{0}",p.Name);
  string two = String.Format("{0}",p.ParameterType);
  if (NoLast < last-1){
  ConcatenateInfoParameters += "Name = " + one + ", Type = " + two + " ; ";
  NoLast++;
  }
  else{
  NoLast++;
  }
  if (NoLast == last){
  ConcatenateInfoParameters += "Name = " + one + ", Type = " + two;
  }
  }
  //Output to log
  project.SendInfoToLog(zero + " With Parameters = (" + ConcatenateInfoParameters+ ")");
  resulFinal += zero + " With Parameters = (" + ConcatenateInfoParameters+ ")" + "\r\n";
  ConcatenateInfoParameters = "";
  NoLast = 0;
}

//Output to windows clipboard
System.Windows.Forms.Clipboard.SetText(resulFinal);
project.SendInfoToLog("RESULTS COPIED TO THE CLIPBOARD");
good day!


//Output

MethodName = get_AllVariables With Parameters = ()
MethodName = CreateVariable With Parameters = (Name = name, Type = System.String ; Name = value, Type = System.String ; Name = groupTypeV4, Type = ZennoLab.InterfacesLibrary.ProjectModel.Enums.VariableGroupTypeV4 ; Name = setCurrentValue, Type = System.Boolean)
MethodName = QuickCreateVariable With Parameters = (Name = name, Type = System.String)
MethodName = DeleteVariable With Parameters = (Name = name, Type = System.String)
MethodName = get_Item With Parameters = (Name = parName, Type = System.String)
MethodName = get_Keys With Parameters = ()
MethodName = Initilize With Parameters = (Name = macrosExecutor, Type = Global.Interfaces.IMacrosExecutor)
MethodName = FillFromDict With Parameters = (Name = rawVarsList, Type = System.Collections.Generic.Dictionary`2[System.String,System.String])
MethodName = get_BlockName With Parameters = ()
MethodName = set_BlockName With Parameters = (Name = value, Type = System.String)
MethodName = RefreshStructure With Parameters = (Name = patch, Type = ZennoLab.TemplateManipulator.V4.ProjectModelPatch)
MethodName = GetEnumerator With Parameters = ()
 
Последнее редактирование:

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
I know English at the Google Translator level.
Thank you for your help!
The forum does not contain the information you provided.
I am sure that this information will be useful to many users!
 

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
Hi,

I have written a delegate, and I share it in case it is useful to you;

The delegate allows creating variables with:

CreateVariable method or with the QuickCreateVariable method.

Just writing via c# cube;

project.Context ["CreateVarValue"] ("MynewVAR", "NewValue", true, true, true)

Parameters ->namevarcreate string, valuevarcreate string, createvarquick bool, resetvalue bool, infotolog boll)

CreateVariable: create variable and set it with the current value and the default value.

QuickCreateVariable - Create variable with current value.

I only recommend its use to create quickly variables in ProjectMaker templates and once created delete the delegate c # cube.

good day!
 

Вложения

  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
  • Спасибо
Реакции: legorange

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13

legorange

Client
Регистрация
22.04.2020
Сообщения
13
Благодарностей
34
Баллы
13
Here is the template code;

Paste this code into a c # cube;

Create automatic Zennoposter Var:
project.Context["CreateVarValue"] = (Action<string,string,bool,bool,bool>)((namevarcreate,valuevarcreate,createvarquick,resetvalue,infotolog) => {
string NameSave = namevarcreate;
string ValueSave = valuevarcreate;
bool Quick = createvarquick;   
bool ResetVar = resetvalue;   
bool Tolog = infotolog;
string name = "";
string oldvalue = "";   
    
//test name and oldvalue exists   
try{
name = project.Variables[NameSave].Name;
}
catch{
name = "";
}
try{
if(!String.IsNullOrEmpty(project.Variables[NameSave].Value)){
oldvalue =     project.Variables[NameSave].Value;
}
}
catch{
;
}

//CreateVariable
if(!Quick){
if(ResetVar){   
try{
object magicClassObject = project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{NameSave,ValueSave,VariableGroupTypeV4.UserDefined,true });
}
catch{
object magicClassObjectDeleteVar = project.Variables.GetType().GetMethod("DeleteVariable").Invoke(project.Variables,new object[]{NameSave});
object magicClassObject = project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{NameSave,ValueSave,VariableGroupTypeV4.UserDefined,true });   
}
}
if(!ResetVar){
try{
object magicClassObject = project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{NameSave,ValueSave,VariableGroupTypeV4.UserDefined,true });
}
catch{
;
}
}
}

//QuickCreateVariable
if(Quick){
if(ResetVar){
object magicClassObject = project.Variables.GetType().GetMethod("QuickCreateVariable").Invoke(project.Variables,new object[]{NameSave});
project.Variables[NameSave].Value = ValueSave;   
}
if(!ResetVar){
if(String.IsNullOrEmpty(name)){   
object magicClassObject = project.Variables.GetType().GetMethod("QuickCreateVariable").Invoke(project.Variables,new object[]{NameSave});
project.Variables[NameSave].Value = ValueSave;
}   
}
}

//ToLog
if(Tolog){
if(String.IsNullOrEmpty(name)){
project.SendInfoToLog("The variable " + NameSave + " has been created with value " + ValueSave);
}
if(!String.IsNullOrEmpty(name) && ResetVar){
if(oldvalue.Equals(ValueSave)){   
project.SendInfoToLog("The variable " + NameSave + " already existed and has not been reset, it keep the same value " + ValueSave);
}
if(!oldvalue.Equals(ValueSave)){   
project.SendInfoToLog("The variable " + NameSave + " already existed and has been reset with value " + ValueSave);
}
}
if(!String.IsNullOrEmpty(name) && !ResetVar){
project.SendInfoToLog("The variable " + NameSave + " already existed and has not been reset.");
}
}   

});
Run the code and then from any c# cube, write;

Call delegate Create Zennoposter Var:
//The delegate allows creating variables with the method:
//CreateVariable or with the QuickCreateVariable method.

//Just writing via c# cube;

//project.Context ["CreateVarValue"] ("MynewVAR", "NewValue", true, true, true)

//Parameters:
//(namevarcreate string, valuevarcreate string, createvarquick bool, resetvalue bool, infotolog boll)

//CreateVariable: create variable and set it with the current value and the default value.

//QuickCreateVariable - Create variable with current value.

//Parameters (namevarcreate string,valuevarcreate string,createvarquick bool,resetvalue bool,infotolog boll)

project.Context["CreateVarValue"]("MynewVAR","NewValue",false,true,true);
 
Последнее редактирование:
  • Спасибо
Реакции: udder, SHILY и BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Here is the template code;
Paste this code into a c # cube;
Thank you very much!
Thanks to you, developing templates (creating, deleting, changing variables) will become easier for me!
My knowledge is not enough to write this code myself.
But, I understand very well what exactly is going on in this code!
Thanks again!
 
  • Спасибо
Реакции: udder и legorange

che100

Client
Регистрация
18.04.2017
Сообщения
808
Благодарностей
499
Баллы
63
Aдовый код для простой операции, на форуме всюду пишут : Для того, чтобы установить значение переменной в С# кубике - она уже должна быть объявлена в проекте.
Должна но не обязана!
Пугает , что не ясно как этот код работает.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Пугает , что не ясно как этот код работает.
А в чём сложность?
Просто вызываем примерно вот так:
Создать переменную:
project.Variables.GetType().GetMethod("CreateVariable").Invoke(project.Variables,new object[]{"name1","value2",VariableGroupTypeV4.UserDefined,true });
Получаем переменную в проекте:
92873
 
  • Спасибо
Реакции: che100 и djaga

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