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

Написал вот такой код:
Но, он позволяет выгружать только конкретный класс, получаемый по запросу.
к каждому классу который хочется загружать и выгружать придется добавить %XML.Adaptor

Возможно ли оптимизировать так, что бы передавать имя класса который необходимо выгрузить
а на выходе получать xml или текстовый файл
Загрузка должна сохранять уникальность данных
т.е. после импорта данные в двух базах должны быть идентичны
Нужно ли выгружать еще какие то служебные поля для этого и есть ли таковые ?

Код: 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.
/// Класс экспорта данных
Class User.Export Extends (%Persistent, %XML.Adaptor) [ ClassType = persistent, Owner = _SYSTEM, ProcedureBlock ]
{

/// Содержит путь и имя файла выгрузки данных
Property FileName As %String(MAXLEN =  250 ) [ Required ];

Index FileNameIndex On FileName;

/// Метод осуществляет непосредственную выгрузку данных
/// класса SprTablDrugs в XML формате
/// 
ClassMethod ExportData(file As %String) As %Status
{
  
   set rs=##class(%ResultSet).%New("User.Export.SprTablDrugs")
   do rs.Execute()
 
   open file:"WNS"
   use file
 
   write "<!DOCTYPE SprTablDrugs [",!
   do ##class(User.SprTablDrugs).XMLDTD()
   write "]>",!
 
   write "<export>",!
 
   while rs.Next() 
    {
  	 
       write "<SprTablDrugs>",!
  
   	write "<Ind1>"
   	write rs.Get("Ind1")
   	write "</Ind1>",!
  
   	write "<Ind2>"
   	write rs.Get("Ind2")
   	write "</Ind2>",!

   	write "<Ind3>"
   	write rs.Get("Ind3")
   	write "</Ind3>",!

   	write "<TabCode>"
   	write rs.Get("TabCode")
   	write "</TabCode>"
  
   	write "</SprTablDrugs>",!
   
   	}
      write "</export>" 
     close file

	quit $$$OK
}

/// Метод осуществляющий загрузку XML данных
/// экспорта в базу, в класс SprTablDrugs
/// 
ClassMethod ImportData(file As %String) As %Status
{
   Set reader = ##class(%XML.Reader).%New()

  
    Do reader.OpenFile(file)

    
    Do reader.Correlate("SprTablDrugs","User.SprTablDrugs")
    
   
    While (reader.Next(.object,.sc)) {
  		write "<SprTablDrugs>",!
  
 		 write "<Ind1>"
 		 write object.Ind1
		 write "</Ind1>",!
  
 		 write "<Ind2>"
 		 write object.Ind2
 		 write "</Ind2>",!

		 write "<Ind3>"
 		 write object.Ind3
		 write "</Ind3>",!

		 write "<TabCode>"
		 write object.TabCode
		 write "</TabCode>"
  
 		 write "</SprTablDrugs>",!
	 	 
	 	 Set savestatus = object.%Save()
   		
   		 If $system.Status.IsError(savestatus) {
        	do $system.OBJ.DisplayError(savestatus)
         } 		 	    
       		
    }
    
 
    If $system.Status.IsError(sc) do $system.OBJ.DisplayError(sc)
}

/// Запрос получает данные из структур класса SprTablDrugs
/// 
Query SprTablDrugs(TypeExport As %Integer) As %SQLQuery(CONTAINID =  1 )
{
SELECT %ID,Ind1,Ind2,Ind3,TabCode FROM SprTablDrugs
}

}
...
Рейтинг: 0 / 0
Выгрузка/Загрузка данных(советы новичку)
    #36769437
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выгружать глобали произвольного класса можно с помощью следующего кода:
Код: 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.
ExportClassGlobals(ClassName,FileName) PUBLIC
{
	s $zt = "errExportClassGlobals"
	#; открытие класса
	s cls = ##class(%ClassDefinition).%OpenId(ClassName)
	if (cls = $$$NULLOREF)
	{
		s err = "Класс '"_ClassName_"' не существует!"
		g exitExportClassGlobals
	}
	#; выбор первого способа хранения
	s sdef = cls.Storages.GetAt( 1 )
	if (sdef = $$$NULLOREF)
	{
		s err = "У класса '"_ClassName_"' нет способов хранения!"
		g exitExportClassGlobals
	}
	#; получение наименований глобалов данных и индексов
	s DataLocation = sdef.DataLocation
	s IndexLocation = sdef.IndexLocation
	#; приведение наименования глобалов к виду "<имя_глобала>.gbl"
	s DataGlobal = $e(DataLocation, 2 ,$l(DataLocation))_".gbl"
	s IndexGlobal = $e(IndexLocation, 2 ,$l(IndexLocation))_".gbl"
	#; экспорт глобалов в файл
	s exportList = DataGlobal_","_IndexGlobal
	s sc = $SYSTEM.OBJ.Export(exportList,FileName)
	if ($$$ISERR(sc))
	{
		s err = $SYSTEM.Status.GetErrorText(sc)
		g exitExportClassGlobals
	}
	#;
	s err = ""
	g exitExportClassGlobals
	#;
errExportClassGlobals
	s $zt = ""
	s err = $ze
	#;
exitExportClassGlobals
	k sdef, cls
	#;
	q err
}
Тогда процедура экспорта будет выглядеть так (ExportClassGlobals находится у меня в программе Test):
Код: plaintext
w $$ExportClassGlobals^Test(<имя_класса>,<полное_имя_файла>)
Для импорта есть стандартный метод:
Код: plaintext
w $SYSTEM.OBJ.Load(<полное_имя_файла>)
Примечание: $SYSTEM.OBJ.Load предварительно полностью удалит импортируемые глобали из базы, в которую производится импорт.
...
Рейтинг: 0 / 0
Выгрузка/Загрузка данных(советы новичку)
    #36769494
StrayXXX4U
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, сэкономили много времени мне !!
Благодарен Вам.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Выгрузка/Загрузка данных(советы новичку)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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