Приложение 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)
; формирование вспомогательных массивов
Tmp
2 и
Tmp3
Set x = “”
For Set x = $Order(Tmp1(x)) Quit: x=“” Do ;
запись
в
переменную
x
имени
; следующего по порядку класса из массива T
mp1
. 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)= “”
; запись в массив
Tmp
2 имя класса, имя родительского класса, номер уровня ; иерархии
.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
.