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

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

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

как мне подсказали для этого необходимо юзать XML, но к сожалению мои знания в связке CACHE + XML ничтожн малы... нашел только раздел справки http://192.168.2.116/csp/docbook/DocBook.UI.Page.cls?KEY=GXML , что впрочем мне пока ничего не дало
...
Рейтинг: 0 / 0
29.10.2007, 12:54
    #34901246
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
Т.е. класса два А и Б? Кто и как компилит класс А?
Экспорт/импорт осуществляет метод
Код: 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
29.10.2007, 13:39
    #34901453
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
Вот так можно выгружать данные класса в 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
29.10.2007, 13:59
    #34901532
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
u78 , при такой выгрузке/загрузке ID загруженых записей совпадает с ID выгруженых?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
29.10.2007, 14:20
    #34901623
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
krvsaпри такой выгрузке/загрузке ID загруженых записей совпадает с ID выгруженых?
В том то и беда, что ДА. Эта проблема решена в Object Synchronization, там передаются не ID а GUID, (в каждой системе ведётся своё соответствие GUID и ID) по которым и восстанавливаются объектные ссылки. Но я замучался бороться с этой синхронизацией.
...
Рейтинг: 0 / 0
29.10.2007, 15:26
    #34901920
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
ага спасибо большое... сейчас буду разбираться
...
Рейтинг: 0 / 0
29.10.2007, 15:29
    #34901934
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
yot , твои классы находятся в одной области?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
29.10.2007, 15:50
    #34902026
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
в одной
...
Рейтинг: 0 / 0
29.10.2007, 15:55
    #34902047
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
yotв одной
Тогда зачем теде xml? Можно читать и писать сразу из класса в класс...
...
Рейтинг: 0 / 0
29.10.2007, 16:01
    #34902080
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
пример:

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

удаленый клиент скачивает его... нажимает установить... и у него появляются в справочнике новые значения...
...
Рейтинг: 0 / 0
29.10.2007, 16:38
    #34902298
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
А сразу видеть все эти изменения не судьба? У нас пока все данные показываются динамически... Один добавил/изменил - всем доступна эта информация.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
29.10.2007, 17:02
    #34902416
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
если изменения "только в одни ворота" тогда, блин, всё намного проще:
предположим мне надо выгрузить класс 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
30.10.2007, 09:00
    #34903519
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
u78 , я смотрю ты при чтении искользуеш не только "c", но и "k"... Что дает последний ключ?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
30.10.2007, 09:37
    #34903597
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
krvsa Что дает последний ключ?
Три дополнительных хитпойнта, две жизни и новое оружие.
не знаю. так в документации было
...
Рейтинг: 0 / 0
30.10.2007, 10:45
    #34903788
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
С этими ключами туману напустили
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
30.10.2007, 12:00
    #34904117
NoGot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
d $SYSTEM.OBJ.ShowFlags()
...
Рейтинг: 0 / 0
30.10.2007, 12:41
    #34904282
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
NoGotd $SYSTEM.OBJ.ShowFlags()
Я в курсе... Но там много... И многие не понятно для чего...
...
Рейтинг: 0 / 0
30.10.2007, 13:06
    #34904435
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
авторИ многие не понятно для чего...
Ну спросите ;-)
...
Рейтинг: 0 / 0
30.10.2007, 13:17
    #34904481
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
Вот про "k" спрашивал...
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
30.10.2007, 14:19
    #34904748
''
''
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
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
30.10.2007, 14:59
    #34904872
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
Это я видел... Но с переводом у меня туго
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
31.10.2007, 06:29
    #34906176
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
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
31.10.2007, 06:31
    #34906178
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
добавка к флагу k - я написал "будут сораняться int рутины", слова Int в оригинале не было, будут также сохранться mac рутины классов
...
Рейтинг: 0 / 0
31.10.2007, 09:48
    #34906421
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
Блок А.Н. , спасибо! Я все законспектировал в свой блокнотик
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
31.10.2007, 11:39
    #34906918
yot
yot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XML + выгрузка данных
большое спасибо за столь подробное объяснение
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / XML + выгрузка данных / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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