Как выполнить C# или JS код из переменной?

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Доброго дня.
Есть крайне примитивный C# или JS код, который лежит в переменной. Как его можно выполнить?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Есть несколько групп установки значений переменной, по типу:

Группа #1:
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
Группа #2:
project.Variables["переменная_1"].Value = "значение_4";
project.Variables["переменная_2"].Value = "значение_5";
project.Variables["переменная_3"].Value = "значение_6";
Группа #3:
project.Variables["переменная_1"].Value = "значение_7";
project.Variables["переменная_2"].Value = "значение_8";
project.Variables["переменная_3"].Value = "значение_9";
При работе шаблона с функцией "Проект в проекте", во вложенном проекте в разных местах, будут группой прописываться значения переменных. Как видно на примере выше, переменные одинаковые, но их значения отличаются в зависимости от ситуации, эти взначения в дальнейшем влияют на другие вложенные проекты, но это уже другая история.

В целом подойдет как C#, так и JS, нужно просто как-то быстро проставить значения переменным, без сложных конструкций и по моим рассуждениям, выполнение кода из переменной, как раз и является самым простым исходом.
 
Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113
Ну так в коде можете использовать значение из переменной.
 

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Ну так в коде можете использовать значение из переменной.
Значение из переменной я могу использовать, когда оно одно и принадлежит одной переменной. В нашем случае переменных несколько и значений этих переменных тоже несколько. Не совсем просто понимаю, как без C# кода прописать разным переменным, соответствующие и разные значения, как это происходит, при выполнении C# кода:

C#:
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113
Можете формировать значение из нескольких переменных, можете попробовать Switch

Напишите конкретные примеры желаемого результата, пока не совсем понятно, что хотите получить в итоге из этих переменных.
 
  • Спасибо
Реакции: material

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113
Или используйте стандартные действия с переменными
114153

и логикучерез switch
114154
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Можете формировать значение из нескольких переменных, можете попробовать Switch

Напишите конкретные примеры желаемого результата, пока не совсем понятно, что хотите получить в итоге из этих переменных.
Задача довольно сложная и запутанная, так как в дело вступают вложенные проекты. Сложный путь я найду, просто выполнение кода C# или JS из переменной, самый простой путь и хотелось бы узнать есть ли в целом решение данной задачи или его не существует.
 

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Или используйте стандартные действия с переменными
Посмотреть вложение 114153

и логикучерез switch
Посмотреть вложение 114154
Спасибо за Switch, хоть она не решит проблему, описанную в данной теме, но буду теперь ее использовать для других целей. Уже тему не зря создал, что-то новое узнал.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113
Ни разу Switch не пользовался, сейчас почитаю, что это такое и какие задачи можно с помощью нее закрывать.
На домашней странице ProjectMaker есть ссылка на видеоуроки
114155
 
  • Спасибо
Реакции: material

radv

Client
Регистрация
11.05.2015
Сообщения
3 683
Благодарностей
1 866
Баллы
113
просто выполнение кода C# или JS из переменной, самый простой путь и хотелось бы узнать есть ли в целом решение данной задачи или его не существует.
Ну так используйте C#
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 376
Благодарностей
3 301
Баллы
113

bitardenko

Client
Регистрация
27.12.2020
Сообщения
91
Благодарностей
73
Баллы
18

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Да JS выполняет, но как оказалось, через JS код нельзя прописать значение переменной.

Другими словами у JS нет аналога этому коду C#:
C#:
project.Variables["переменная_1"].Value = "значение_1";
Какой-то замкнутый круг.
 

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Напишите нормальный код.
Проблема вечной сложной работы логики проект в проете. Вложенный проект не знает, что ему передаст родительский, поэтому C# код всегда меняется и генерируется в родительском проекте, а исполняется во вложенном.
 

bitardenko

Client
Регистрация
27.12.2020
Сообщения
91
Благодарностей
73
Баллы
18
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
Как вариант
return "значение_1" и положить значение в переменную
Проблема в том, что там группа переменных, их несколько одним блоком:
C#:
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
895
Благодарностей
367
Баллы
63
Проблема вечной сложной работы логики проект в проете. Вложенный проект не знает, что ему передаст родительский, поэтому C# код всегда меняется и генерируется в родительском проекте, а исполняется во вложенном.
так передавай во вложенный проект сразу нужные значения и присваивай при вызове :bn:

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

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
так передавай во вложенный проект сразу нужные значения и присваивай при вызове :bn:

Посмотреть вложение 114157
В один вложенный проект, обращаться могут абсолютно разные по своей работе родительские проекты. Именно родительские проекты генерируют значения переменных, а вложенный проект их обрабатывает. Причем один родительские проект может передать, например 3 переменные со своими значениями, а другой родительский проект передаст 6 переменных со своими значениями.

Другими словами вложенный проект не знает даже примерно, что ему передаст родительский и заранее такое предсказывать будет сложно в исполнении.
 
Последнее редактирование:

Ахилес

Client
Регистрация
11.11.2020
Сообщения
895
Благодарностей
367
Баллы
63
В один вложенный проект, обращаться могут абсолютно разные по своей работе родительские проекты. Именно родительские проекты генерируют значения переменных, а вложенный проект их обрабатывает. Причем один родительские проект может передать, например 3 переменные со своими значениями, а другой родительский проект передаст 6 переменных со своими значениями.
ну так пусть и передают сколько хотят. у каждого вызова будет своя копия переменных. это же подпроект.
 

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
ну так пусть и передают сколько хотят. у каждого вызова будет своя копия переменных. это же подпроект.
Ваш пример подходит, если нужно передать одно значение переменной, из одной переменной в другую, а у меня получается, что у одной переменной может быть несколько разных значений, а уже во вложенном проекте, решается какое именно подходит.

P.S.
Мне нужно передать сразу несколько значений для одной переменной, а во вложенном проекте они будут указаны в разных местах и выполнять свою задачу.

Группа #1:
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
Группа #2:
project.Variables["переменная_1"].Value = "значение_4";
project.Variables["переменная_2"].Value = "значение_5";
project.Variables["переменная_3"].Value = "значение_6";
Группа #3:
project.Variables["переменная_1"].Value = "значение_7";
project.Variables["переменная_2"].Value = "значение_8";
project.Variables["переменная_3"].Value = "значение_9";
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
895
Благодарностей
367
Баллы
63
Ваш пример подходит, если нужно передать одно значение переменной, из одной переменной в другую, а у меня получается, что у одной переменной может быть несколько разных значений, а уже во вложенном проекте, решается какое именно подходит.
почему бы не решить какое подходит ДО вызова подпроекта ?
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
почему бы не решить какое подходит ДО вызова подпроекта ?
Они все 3 группы подходят, просто во вложенном проекте располагаются в разных местах и являются настройками для следующего уровня вложенных проектов.

P.S.
Может выше где неверно высказался, так как хочу все упростить, чтобы вопрос не казался сложным.
 

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
почему бы не решить какое подходит ДО вызова подпроекта ?
В целом вы верно понимаете суть ситуации. Проблема только в том, что все группы верные и нужны для работы проекта, в разных местах вложенного проекта. Если ветка уйдет в одну линию, то первая группа окажется верной, если в другую, то вторая группа пропишется в значениях тех же самых переменных. Там выше я отредактировал пост и вы можете увидеть группы переменных.
 

Ахилес

Client
Регистрация
11.11.2020
Сообщения
895
Благодарностей
367
Баллы
63
Они все 3 группы подходят, просто во вложенном проекте располагаются в разных местах и являются настройками для следующего уровня вложенных проектов.
значит надо сформировать данные таким образом, что бы они передавались логическими группами. а в подпроекте происходил разбор этих групп. и в следующий подпроект попадали выбранные данные из нужных групп.
оперировать надо данными, а не кодом. как говорят, мухи отдельно, котлеты отдельно. выше правильно написали, нужен нормальный код и нормальная структура данных, для работы.
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
значит надо сформировать данные таким образом, что бы они передавались логическими группами. а в подпроекте происходил разбор этих групп. и в следующий подпроект попадали выбранные данные из нужных групп.
оперировать надо данными, а не кодом. как говорят, мухи отдельно, котлеты отдельно. выше правильно написали, нужен нормальный код и нормальная структура данных, для работы.
Полностью согласен, но иногда приходится работать с тем, что имеется, когда скилл будет выше, старые решения заменяются на новые более компактные, быстрые и простые, с возгласами, как я раньше работал и почему этого не знал. Проблема именно в данном случае, что программированием я не владею, а задачи ставлю сложные, и поэтому в руки берутся костыли и побежали.

У меня есть запасной вариант, но этот мне показался максимально простым, хоть я и понимаю, что так обычно не делают люди, скилл которых выше моего.
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 376
Благодарностей
3 301
Баллы
113
Проблема вечной сложной работы логики проект в проете. Вложенный проект не знает, что ему передаст родительский, поэтому C# код всегда меняется и генерируется в родительском проекте, а исполняется во вложенном.
По сути вы же и создали проблему.
Напишите такую логику, которая не будет зависеть от этого.
 
  • Спасибо
Реакции: material

material

Client
Регистрация
23.03.2021
Сообщения
250
Благодарностей
76
Баллы
28
По сути вы же и создали проблему.
Напишите такую логику, которая не будет зависеть от этого.
Научиться бы отличать проблему от задачи. Для меня так выглядит задача, она же и создает проблему, чтобы иначе сформулировать задачу, нужен опыт. Вот и получается, что на сегодняшний момент возможна постановка такой задачи, которая создает некоторые проблемы в реализации. Проект в проекте сложный функционал, особенно при работе с переменными. Я создавал уже тему нерешаемой проблемы с 3 вложенными проектами, когда в 3-ем проекте выполняется действие, записывается в переменную, которую нужно передать в 1 проект, но из-за того, что переменной нет во 2-ом проекте, значение переменной не может передаться в 1 проект, нужно синхронизировать все переменные, между всеми проектами, чтобы значения переменных могли свободно путешествовать между любыми вложенными проектами.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 411
Баллы
113
Мне нужно передать сразу несколько значений для одной переменной, а во вложенном проекте они будут указаны в разных местах и выполнять свою задачу.

Группа #1:
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
Группа #2:
project.Variables["переменная_1"].Value = "значение_4";
project.Variables["переменная_2"].Value = "значение_5";
project.Variables["переменная_3"].Value = "значение_6";
Группа #3:
project.Variables["переменная_1"].Value = "значение_7";
project.Variables["переменная_2"].Value = "значение_8";
project.Variables["переменная_3"].Value = "значение_9";
Берите нужные пары например в словарь.
Его сериализируем и сохраняем в какую-то переменную temp
Передаем эту переменную во вложенный проект.

На стороне вложенного проекта десериализуем нашу переменную temp
И заполняем значениями переменные во вложенном проекте.

Выглядеть это может примерно так:

C#:
string[] data1 = new[]{ "значение_1", "значение_4", "значение_7"};
string[] data2 = new[]{ "значение_2", "значение_5", "значение_8"};
string[] data3 = new[]{ "значение_3", "значение_6", "значение_9"};

var dic = new Dictionary<string, string[]>();
dic["переменная_1"] = data1;
dic["переменная_2"] = data2;
dic["переменная_3"] = data3;

project.Variables["temp"].Value =Global.ZennoLab.Json.JsonConvert.SerializeObject(dic,  Global.ZennoLab.Json.Formatting.Indented);

// Во вложенном проекте
var dic_item = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(project.Variables["temp"].Value);

project.Variables["переменная_1"].Value = dic_item["переменная_1"][0]; // - это будет использовано в первом случае
project.Variables["переменная_1"].Value = dic_item["переменная_1"][1]; // - эта строка будет использована в другом месте
project.Variables["переменная_1"].Value = dic_item["переменная_1"][2]; // - эта строка будет использована ещё в каком-то  месте

project.Variables["переменная_2"].Value = dic_item["переменная_2"][0];
project.Variables["переменная_2"].Value = dic_item["переменная_2"][1];
project.Variables["переменная_2"].Value = dic_item["переменная_2"][2];

project.Variables["переменная_3"].Value = dic_item["переменная_3"][0];
project.Variables["переменная_3"].Value = dic_item["переменная_3"][1];
project.Variables["переменная_3"].Value = dic_item["переменная_3"][2];

C#:
// Во вложенном проекте в первом месте
var dic_item = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(project.Variables["temp"].Value);
int i = 0; 
project.Variables["переменная_1"].Value = dic_item["переменная_1"][i]; // - это будет использовано в первом случае
project.Variables["переменная_2"].Value = dic_item["переменная_2"][i];
project.Variables["переменная_3"].Value = dic_item["переменная_3"][i];

C#:
// Во вложенном проекте в втором месте
var dic_item = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(project.Variables["temp"].Value);
int i = 1; 
project.Variables["переменная_1"].Value = dic_item["переменная_1"][i]; // - это будет использовано в первом случае
project.Variables["переменная_2"].Value = dic_item["переменная_2"][i];
project.Variables["переменная_3"].Value = dic_item["переменная_3"][i];

C#:
// Во вложенном проекте в третьем месте
var dic_item = Global.ZennoLab.Json.JsonConvert.DeserializeObject<Dictionary<string, string[]>>(project.Variables["temp"].Value);
int i = 2; 
project.Variables["переменная_1"].Value = dic_item["переменная_1"][i]; // - это будет использовано в первом случае
project.Variables["переменная_2"].Value = dic_item["переменная_2"][i];
project.Variables["переменная_3"].Value = dic_item["переменная_3"][i];
 
Последнее редактирование:
  • Спасибо
Реакции: material

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