powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
7 сообщений из 7, страница 1 из 1
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36547400
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, задумка такова:
необходимо строить дерево, узлы которого это экземпляры класса. В случае, если у экземпляра есть потомки, то хотелось бы из него строить ещё ветку, а в случае потомков у потомков строить ещё ветки. И хочется динамически располагать контролы для ввода переменных.
Есть ограничение: Microsoft Visual Stidio 2005/2008 и C#.
Что посоветуете, не хочу использовать прокси классы.
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36547562
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZLOI13,

Что-то в постановке задачи неверно, на мой взгляд.
У экземпляра не может быть потомков - он на то и экземпляр конкретного класса.
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36547582
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже ZLOI13 имеет ввиду под потомками свойства-объекты.
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36547618
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще есть сомнения в целесобразности решения задачи в универсальной форме.
Но возможно вам поможет моя давняя страничка. Сразу оговорюсь, что она не пригодилась, соответвенно ее не дорабатывал и практически не использовал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
<html>
<head>
</head>
<style>
body {font-family:Verdana,Arial;font-size: 15 ;}
th {background-color:#b0b0c0;}
.d {background-color:#e0e0e0;color=#a0a0a0}
.l {background-color:#CFD1DA;}
.b {background-color:#aAaFC1;}
.gray {background-color:#CFD1DA;border-style:none;}
.error {background-color:#FFCCCC;font-weight:bold;color:red}
td,th {border-style:none;text-align:left}
a {text-decoration:none;color:blue;}
</style>
<body>
<script language=cache runat=server>
 s classname=%request.Get("classname")
 s id=%request.Get("id")
 s addon=%request.Get("addon")
 
 s ClassList=##class(%ResultSet).%New("%ClassDefinition:ClassInfo")
 d ClassList.Execute()
 w "<form name=f1>"
 w "<table border=1><tr class=l>"
 w "<td><select name=classname>"
 while ClassList.Next() 
 	   {s clname=ClassList.Get("Name")
 	    if (ClassList.Get("Persistent")= 1 ) && ($f(clname,"%")= 0 )
 		      {w "<option ",$case(clname,classname:"selected",:""),">",clname,"</option>"
 		      }
 	   }
 d ClassList.%Close()
 w "<td><input type=text name=id value=",id," >"
 w "<td><input type=submit class=b value='==>'>"
 w "<input type=button class=b value='<==' onclick='history.back()'>"
 w "</table>"
 w "<form>"
 
 //Открываем объект по Id и classname
 q:(classname="")&&(addon="")
 if addon=""
     {s exist="",classlist="",ob=""
      x:id'="" "s exist=##class("_classname_").%ExistsId("_id_")"    //проверить, существует ли объект
      x:exist=1 "s ob=##class("_classname_").%OpenId("_id_")"   //открыть объект
     } 
 else 
     {x addon
      s classname=ob.%ClassName(1)
      s exist=1
     }
 
 w "<table border=1 valign=top><th>Поле<th>Значение<th><th>Тип<th>Описание"
 s def=##class(%ClassDefinition).%OpenId(classname)
 s classlist=def.Super_","_classname
 d def.%Close()

 f i=1:1:$l(classlist,",")
     {s classname=$p(classlist,",",i)
      w "<tr><td>",classname
      
      s def=##class(%ClassDefinition).%OpenId(classname)      
      s key=""
      d def.Properties.GetNext(.key)  
      while key'="" 
         {s fieldname=def.Properties.GetAt(key).Name 
 	        s collection=def.Properties.GetAt(key).Collection
 	        s type=def.Properties.GetAt(key).Type
 	        s private=def.Properties.GetAt(key).Private 
 	        s description=def.Properties.GetAt(key).Description

 	        w "<tr class=l><td>",fieldname
 	        w "<td>"
 	        g:'exist next
 	        if private=1 w "<i><закрыто>" g next                                               //закрытое поле	        
 	        if collection=""
 	            {s val=""
 	             x "s val=ob."_fieldname  
 	             s addon=##class(%CSP.Page).EscapeURL("s ob=##class("_classname_").%OpenId("_id_"),ob=ob."_fieldname)                                                         
 	             w ..DecodeValue(val,type,addon)
 	            }
 	        if collection="array"
 	            {s key2=""                                                       
 	             x "d ob."_fieldname_".GetNext(.key2)"
 	             w:key2="" "<i><пусто>"
 	             while key2'=""
 	                 {x "s val=ob."_fieldname_".GetAt(key2)"
 	                  s addon=##class(%CSP.Page).EscapeURL("s ob=##class("_classname_").%OpenId("_id_"),ob=ob."_fieldname_".GetAt("_key2_")")
 	                  w "<div>",key2,"->",..DecodeValue(val,type,addon),"</div>"
 	                  x "d ob."_fieldname_".GetNext(.key2)"
 	                 }
 	            }
:next 	        
 	        w "<td>",collection
 	        w "<td>",type
 	        w "<td><pre>",description,"</td>"
          d def.Properties.GetNext(.key)
         }
     }
 w "</table>" 
</script>
<script language=cache method=DecodeValue Arguments='data:%String,fieldtype:%String,addon:%String=""' returntype="%String">
 n def2,persistent,id2,ret,i
 if data="" q "<i><пусто>"                                                                               //пустое поле
 if (type="%Library.Date")||(fieldtype="%Date") q:data= 0  "<i><нулевая дата>"                             //нулевая дата
 if (type="%Library.Date")||(fieldtype="%Date") q:$zd(data, 3 ,, 4 )="" "<i><неправильная дата>("_val_")"    //нулевая дата
 if (type="%Library.Date")||(fieldtype="%Date") q $zd(data, 3 ,, 4 )                                             //дата
 if (type="%Library.List")||(fieldtype="%List") q "<i><список>"  

 //проверим, является ли тип хранимым классом
 s def2=##class(%ClassDefinition).%OpenId(fieldtype)
 s persistent=def2.Persistent
 s:persistent id2=data.%Id()
 d def2.%Close()	 
 if persistent q "<a href=Browser.csp?classname="_fieldtype_"&id="_id2_">"_id2_"</a>" 
 q:$e(type, 1 , 1 )'="%" "<a href='Browser.csp?addon="_addon_"'>OREF</a>"
 q "<b>"_val
</script>

</body>
</html>
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36547620
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZLOI13,

Если не хотите создавать прокси-классы из пакета %Dictionary , то работайте через ADO.NET с ними же, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  using (var cn = new CacheConnection("server=localhost;port=1972;namespace=USER;uid=_system;pwd=SYS"))
  {
    cn.Open();
    var ds = new DataSet();
    using (var cmd = new CacheCommand("select Name,Super from %dictionary.compiledclass", cn))
    //using (var cmd = new CacheCommand("select * from %dictionary.compiledproperty", cn))
    {
      var da = new CacheDataAdapter { SelectCommand = cmd };
      da.Fill(ds);

      dataGrid1.DataSource = ds;
      dataGrid1.DataMember = "Table";
    }
  }
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36560416
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за реакцию, я вроде нажал подписаться, но письма не пришли, может невнимателен был.
Да, универсальную форму удалось сделать благодаря ClassDefinition и PropertyDefinition.
Универсальность нужна, потому что классы со временем будут обрастать новыми свойствами. И переделывать потом везде номенклатуру контролов на формах не хочется. А так можно делать более менее универсальные формочки :)
Теперь вопрос в том, что нужно записывать в контролы значения и они должны записываться в базу... а это не сделать через те же самые прокси. Как бы прокси я буду использовать, когда уже точно буду знать, что вот этот класс с 99% вероятностью будет иметь вот эти свойства, чтобы выполнить вот эту операцию в автокаде. Как бы всё разрабатывается для него, а соответственно обращений к базе будет мало и мне не нужна большая скорость, но с базой потом надо будет работать через веб интерфейс и ещё левые программулины будут подключаться, так что решил использовать единую БД для всего комплекса ПО.
Есть такой CativeX контрол VisM. Предполагается, что будет такой общий контрол, который будет получать от всех методов задачи на выполнения. Попытался его прикрутить... ругается... если есть варианты на C# буду рад :)
...
Рейтинг: 0 / 0
Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
    #36560422
ZLOI13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу вот такой простенький код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
private void button1_Click(object sender, EventArgs e)
        {
            VV = new VisMClass();
            VV.Server= "CN_IPTCP:127.0.0.1[57772]:SYS:_SYSTEM";
            
            //VV.NameSpace = "@USER";
            //VV.Execute("Set Value=5");
            //this.Text = VV.VALUE.ToString();
        }
И в ответ аларм: Server Recieve timed out.
Я понял, что контрол заточен под VB и C++. Но по С++ ничего не объяснено и примеров нет.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как узнаь динамически какие есть классы и какие у них атрибуты и какого типа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]