powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML + выгрузка данных
25 сообщений из 25, страница 1 из 1
XML + выгрузка данных
    #34901238
yot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yot
Гость
здраствуйте...
у меня вопрос,а скорее даже не вопрос, а просьба подсказать направление, или помочь с примером реализации задачи описаной ниже.
задача:

необходимо выгружать данные хранящиеся в классе в другой класс, и иметь возможность при компиляции класса (в который были выгружены данные), заполнять из него данными класс в котором данные должны хранится...

извиняюсь за сумбурность написаного... но пока лучше не могу сформулировать поставленную задачу

как мне подсказали для этого необходимо юзать XML, но к сожалению мои знания в связке CACHE + XML ничтожн малы... нашел только раздел справки http://192.168.2.116/csp/docbook/DocBook.UI.Page.cls?KEY=GXML , что впрочем мне пока ничего не дало
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901246
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. класса два А и Б? Кто и как компилит класс А?
Экспорт/импорт осуществляет метод
Код: plaintext
d $system.OBJ.Export|Load
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901453
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так можно выгружать данные класса в XML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 
 s writer=##class(%XML.Writer).%New()
 s writer.Charset="Windows-1251"
 s writer.Indent= 1 
 d writer.OutputToFile("c:\1.xml")
 d writer.RootElement("ClassObjects")
 	d writer.Element("ClassObject")
 		d writer.WriteAttribute("Id","ид нашего объекта")
 		d writer.WriteAttribute("Property1","Данные поля Property1")
 		d writer.WriteAttribute("Property2","Данные поля Property2")
 	d writer.EndElement() //ClassObject
 d writer.EndRootElement()
 q

Вот так загружать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 s filename="c:\1.xml"
 S ok=##CLASS(%XML.TextReader).ParseFile(filename,.reader)  //открываем файл
 do {
 CONTINUE:reader.NodeType'="element"
 CONTINUE:reader.LocalName'="ClassObject"
 d reader.MoveToAttributeName("Id")
 w "Id="_reader.Value,!
 d reader.MoveToAttributeName("Property1")
 w "   Property1="_reader.Value,!
 d reader.MoveToAttributeName("Property2") 
 w "   Property1="_reader.Value,!
 w !
  } while reader.Read()  //пролистываем структуру xml
 q

Вот так компилировать классы:
Код: plaintext
1.
s ok=$System.OBJ.Compile("User.Samples",.one,.err)
(что такое one и err не помню, какие то возвращаемые значения

Такой обмен данными достаточно прост и вызовет проблемы при передаче ссылочных данных (например если поле Property1 будет не %String а User.AnotherPersistentClass (или что нить в этом роде). Эти проблемы решает Object Synchronization, но она тоже имеет свои проблемы.
Кстати я тоже из Орла, 302581095, стучитесь если что.
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901532
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 , при такой выгрузке/загрузке ID загруженых записей совпадает с ID выгруженых?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901623
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaпри такой выгрузке/загрузке ID загруженых записей совпадает с ID выгруженых?
В том то и беда, что ДА. Эта проблема решена в Object Synchronization, там передаются не ID а GUID, (в каждой системе ведётся своё соответствие GUID и ID) по которым и восстанавливаются объектные ссылки. Но я замучался бороться с этой синхронизацией.
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901920
yot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yot
Гость
ага спасибо большое... сейчас буду разбираться
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34901934
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yot , твои классы находятся в одной области?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34902026
yot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yot
Гость
в одной
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34902047
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yotв одной
Тогда зачем теде xml? Можно читать и писать сразу из класса в класс...
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34902080
yot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yot
Гость
пример:

добавилось какое - нибудь значение в справочкник или что-то изменилось в нем
мне надо чтоб это изменение появилось у удоленого клиента... я на сайте выкладываю это исправление
сделаное в виде дистрибютива...

удаленый клиент скачивает его... нажимает установить... и у него появляются в справочнике новые значения...
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34902298
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сразу видеть все эти изменения не судьба? У нас пока все данные показываются динамически... Один добавил/изменил - всем доступна эта информация.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34902416
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если изменения "только в одни ворота" тогда, блин, всё намного проще:
предположим мне надо выгрузить класс User.Samples (предполагаем что структура хранения обычная , т.е. никто не менял)

Первый вариант: выгружать описание класса и его глобалы (данные и индексы), но, в этом случае, получится слишком большой объём повторных данных.
Код: plaintext
1.
2.
3.
4.
SET ExportElements="User.Samples.cls,User.SamplesD.gbl,User.SamplesI.gbl"
SET ExportFile="c:\1.xml"
SET Ok=$SYSTEM.OBJ.Export(ElementForExport,ExportFile)
IF '+Ok w "ошибка!"

второй вариант - выгружать не весь глобал с данными а лишь изменённые записи (вот как найти изменённые - сами решайте).
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
// подготавливаем глобал с изменёнными данными
SET glob=$NA(^mtempArt($I(^mtempArt)))
KILL @glob
//сами реализуйте выгрузку изменённых во временный глобал, но я предполагаю что изменились записи c  10  по  20 
FOR i= 10 : 1 : 20  DO
. MERGE @glob@(i)=User.SamplesD(i)   //сохраняю изменённые во временный глобал
SET ExportElements="User.Samples.cls,mtempArt.gbl"
SET ExportFile="c:\1.xml"
SET Ok=$SYSTEM.OBJ.Export(ElementForExport,ExportFile)

На клиенте такой код импортирует и данные и описание класса сразу
Код: plaintext
1.
Do $system.OBJ.Load("c:\1.xml","ck")

Во втором случае придётся перестроить индексы после того как загрузили данные
Код: plaintext
1.
2.
3.
4.
SET Ok = ##class(User.Samples).%PurgeIndices() //убьём все индексы
i '+Ok w "Ошибка",!
SET Ok = ##class(User.Samples).%BuildIndices()  //восстановим все индексы
i '+Ok w "Ошибка",!

(прошу прощения если где то ошибся в синтаксисе или перепутал названия, написал всё без проверки)
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34903519
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
u78 , я смотрю ты при чтении искользуеш не только "c", но и "k"... Что дает последний ключ?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34903597
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa Что дает последний ключ?
Три дополнительных хитпойнта, две жизни и новое оружие.
не знаю. так в документации было
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34903788
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С этими ключами туману напустили
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904117
NoGot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d $SYSTEM.OBJ.ShowFlags()
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904282
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NoGotd $SYSTEM.OBJ.ShowFlags()
Я в курсе... Но там много... И многие не понятно для чего...
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904435
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ многие не понятно для чего...
Ну спросите ;-)
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904481
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот про "k" спрашивал...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904748
''
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
''
Гость
krvsaВот про "k" спрашивал...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT

"k" - Keep the source code of generated routines.
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34904872
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я видел... Но с переводом у меня туго
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34906176
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a - Include application classes. This flag is set by default.
Включать классы приложения. Флаг включен по умолчанию.
b - Include sub classes.
Включать подклассы
c - Compile. Use this flag while loading a CDL file will cause the classes loaded to be compiled as well.
Компилировать. (дальше не переведено)
d - Display. This flag is set by default.
Выводить на экран
e - Delete extent.
Удалить extent (видимо речь идет об удалении экземпляров класса?)
f - Force. Force a compilation even when classes instances are in use. Existing objects are invalid after compilation.
Форсировать компиляцию, даже если есть открытые экземпляры классов. Открытые объекты будут недействительны после перекомпиляции
g - Skip XML export of selectivity and extentisize in class storage.
(не экспортировать SELECTIVITY и EXTENTSIZE)
h - Generate help.
Создавать справку
i - Validate XML export format against schema on Load.
Проверять XML экспорт повторной загрузкой.
k - Keep source. When this flag is set, source code of generated routines will be kept.
Сохранять источник. Если флаг установлен, будут сохраняться int рутины (иначе удалять после компилляции).
l - Use lock while compilation classes. This flag is set by default.
Использовать блокировку при компилляции классов. Флаг установлен по умолчанию
p - Include percent classes.
Включать %-классы
q - SQL-only compilation.
Только SQL-компиляция
r - Recursive. It means include all the classes that are dependency predecessors.
Рекурсивно.(дальше не перевел)
s - Include system classes.
Включать системные классы
u - Update only. It means do not compile classes that are up-to-date.
Только обновлять. Не компилируются не устаревшие классы
v - Keep valid. When combined with "f" flag (which forces recompilation), also keeps the objects valid after compilation finishes.
Сохранять валидность. В комбинации в флагом f сохраняет валидность открытых объектов после компиляции.
y - Include classes that are related to the current class in the way that
they either reference to or are referenced by the current class in SQL usage.
Включать классы, связанные через SQL или ссылки
4 - Export CDL compatible with version 4 from later version.
Экспортировать совместимо с версией 4 (Кстати не будет работать кажется)
o1- Optimize ..Property to i%Property where possible.
Оптимизировать ..Property to i%Property по возможности.
o2- Optimize calls within this class, no incremental compile support.
Оптимизировать вызовы внутри класса, не поддерживает инкрементальную компиляцию.
o3- Optimize calls within this class and to system classes.
Оптимизировать вызовы к системным классам.
o4- Optimize calls to all classes, only works from CompileAll entry point.
Оптимизировать вызовы ко всем классам, работает только в CompileAll

---------------------------------------------
Я не так хорошо знаю анлийский, так что в чем сомневаюсь - не переводил. Где-то перевел по смыслу, а не дословно
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34906178
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавка к флагу k - я написал "будут сораняться int рутины", слова Int в оригинале не было, будут также сохранться mac рутины классов
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34906421
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н. , спасибо! Я все законспектировал в свой блокнотик
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
XML + выгрузка данных
    #34906918
yot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yot
Гость
большое спасибо за столь подробное объяснение
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML + выгрузка данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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