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

material

Client
Регистрация
23.03.2021
Сообщения
382
Реакции
175
Баллы
43
Доброго дня.
Есть крайне примитивный C# или JS код, который лежит в переменной. Как его можно выполнить?
 
Есть несколько групп установки значений переменной, по типу:

Группа #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, нужно просто как-то быстро проставить значения переменным, без сложных конструкций и по моим рассуждениям, выполнение кода из переменной, как раз и является самым простым исходом.
 
Последнее редактирование:
Ну так в коде можете использовать значение из переменной.
 
Ну так в коде можете использовать значение из переменной.

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

C#:
Развернуть Свернуть Копировать
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
 
Можете формировать значение из нескольких переменных, можете попробовать Switch

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

и логикучерез switch
114154
 
  • Спасибо
Реакции: material
Можете формировать значение из нескольких переменных, можете попробовать Switch

Напишите конкретные примеры желаемого результата, пока не совсем понятно, что хотите получить в итоге из этих переменных.

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

и логикучерез switch
Посмотреть вложение 114154

Спасибо за Switch, хоть она не решит проблему, описанную в данной теме, но буду теперь ее использовать для других целей. Уже тему не зря создал, что-то новое узнал.
 
Ни разу Switch не пользовался, сейчас почитаю, что это такое и какие задачи можно с помощью нее закрывать.
На домашней странице ProjectMaker есть ссылка на видеоуроки
114155
 
  • Спасибо
Реакции: material
просто выполнение кода C# или JS из переменной, самый простой путь и хотелось бы узнать есть ли в целом решение данной задачи или его не существует.
Ну так используйте C#
 

Да JS выполняет, но как оказалось, через JS код нельзя прописать значение переменной.

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

Какой-то замкнутый круг.
 
Напишите нормальный код.

Проблема вечной сложной работы логики проект в проете. Вложенный проект не знает, что ему передаст родительский, поэтому C# код всегда меняется и генерируется в родительском проекте, а исполняется во вложенном.
 
Другими словами у JS нет аналога этому коду C#:
C#:
Развернуть Свернуть Копировать
project.Variables["переменная_1"].Value = "значение_1";
Как вариант
return "значение_1" и положить значение в переменную
 
  • Спасибо
Реакции: material
Как вариант
return "значение_1" и положить значение в переменную

Проблема в том, что там группа переменных, их несколько одним блоком:
C#:
Развернуть Свернуть Копировать
project.Variables["переменная_1"].Value = "значение_1";
project.Variables["переменная_2"].Value = "значение_2";
project.Variables["переменная_3"].Value = "значение_3";
 
Проблема вечной сложной работы логики проект в проете. Вложенный проект не знает, что ему передаст родительский, поэтому C# код всегда меняется и генерируется в родительском проекте, а исполняется во вложенном.
так передавай во вложенный проект сразу нужные значения и присваивай при вызове :bn:

114157
 
  • Спасибо
Реакции: material
так передавай во вложенный проект сразу нужные значения и присваивай при вызове :bn:

Посмотреть вложение 114157

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

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

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

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";
 
Ваш пример подходит, если нужно передать одно значение переменной, из одной переменной в другую, а у меня получается, что у одной переменной может быть несколько разных значений, а уже во вложенном проекте, решается какое именно подходит.
почему бы не решить какое подходит ДО вызова подпроекта ?
 
  • Спасибо
Реакции: material
почему бы не решить какое подходит ДО вызова подпроекта ?

Они все 3 группы подходят, просто во вложенном проекте располагаются в разных местах и являются настройками для следующего уровня вложенных проектов.

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

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

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

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

Научиться бы отличать проблему от задачи. Для меня так выглядит задача, она же и создает проблему, чтобы иначе сформулировать задачу, нужен опыт. Вот и получается, что на сегодняшний момент возможна постановка такой задачи, которая создает некоторые проблемы в реализации. Проект в проекте сложный функционал, особенно при работе с переменными. Я создавал уже тему нерешаемой проблемы с 3 вложенными проектами, когда в 3-ем проекте выполняется действие, записывается в переменную, которую нужно передать в 1 проект, но из-за того, что переменной нет во 2-ом проекте, значение переменной не может передаться в 1 проект, нужно синхронизировать все переменные, между всеми проектами, чтобы значения переменных могли свободно путешествовать между любыми вложенными проектами.
 
Мне нужно передать сразу несколько значений для одной переменной, а во вложенном проекте они будут указаны в разных местах и выполнять свою задачу.

Группа #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

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