Сайт Информационных Технологий

Приложение 3

Текст программы экспорта классов из Cache в Обобщенный документ

getclass

; смотрим список всех имеющихся классов
New result, classname, cdef, superclass, a, i, j, Tmp1, Tmp2, Tmp3, x, y, TmpC, TmpS,
; получение объектной ссылки на множество экземпляров классов
Set result=##class(%ResultSet).%New("%ClassDefinition.ClassInfo")
Do result.Execute()
For Quit:result.Next()=0 Do
. Set classname = result.GetDataByName("Name") ; получение имени очередного класса
. Do GetProp(classname)
; формирование вспомогательных массивов Tmp2 и Tmp3
Set x = “”
For Set x = $Order(Tmp1(x)) Quit: x=“” Do ; запись в переменную x имени
                                                                    ; следующего по порядку класса из массива Tmp1
. Set TmpC = x, a=0, y = x, TmpS2=" "
. Set TmpS=Tmp1(y, “Super”) ; запись в переменную TmpS имени родительского класса
. For Quit:TmpS=“” Do ; выход из цикла, если нет родительского класса, иначе переход на верхний уровень                                        ; иерархии
    .. Set TmpS=Tmp1(y, “Super”) Quit: TmpS = “ ”
     .. Set a=a+1, TmpS2=TmpS, y = TmpS
.Set Tmp2(TmpC,TmpS2,a)= “” ; запись в массив Tmp2 имя класса, имя родительского класса, номер уровня                                                     ; иерархии
.Set i=0
.If ‘$Data(Tmp3(TmpS2)) Do
   .. Set Tmp3(TmpS2)= i, i=i+1
   .. Quit
.Else Quit
; формирование потока
Set x = “”
For Set x=$Order(Tmp2(x)) Quit: x=“” Do             ; запись в переменную x имени следующего
                                                                              ; по порядку класса из массива Tmp2
. Set superclass = Tmp1(x, “Super”) ; запись в переменную superclass имени родительского класса
. Set y = “”
. Set a = $Order(Tmp2(x, superclass, )) ; извлечение номера уровня иерархии класса из Tmp2
. Set:TmpS="" TmpS=" "
. For y=$Order(Tmp1(x, “Property”, y)) Quit: y=“” Do ; запись в переменную y имени
                                                                                    ; следующего по порядку свойства класса
     .. Set Potoc(Tmp3(superclass), “Yfeat”, “level”, a+2, y) = “”
Q
GetProp(classname) ;Функция сохранения свойств заданного класса в массив Tmp1
if classname="" Quit:$Q "" Q
Set cdef=##class(%ClassDefinition).%OpenId(classname) ; получение объектной ссылки на текущий класс
if cdef.System q 0 ; выход, если класс является системным  определение свойств
Set count=cdef.Properties.Count() ; общее количество свойств
if count>0 Do
.For i=1:1:count Set Tmp1(classname, “Property”, cdef.Properties.GetAt(i).Name) = “”
; определение родительского класса
Set superclass=cdef.Super
Set Tmp1(classname, “Super”) = superclass
Do cdef.%Close()
Q 1

Site of Information Technologies
Designed by  inftech@webservis.ru.