powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное копирование программ (рутин)
23 сообщений из 23, страница 1 из 1
Программное копирование программ (рутин)
    #40100415
Olegnomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Есть ли простой способ программного копирования программ (рутин) из одной области в другую без экспорта - импорта в файл.
Cache 5.0.21 !!!

Заранее спасибо.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100434
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
Есть ли простой способ программного копирования программ (рутин) из одной области в другую без экспорта - импорта в файл.

Конечно есть.
Например можно прочитать текст программы (если он есть конечно)... Перейти в другую область... Записать там его и откомпилировать.
Смотри какие классы работают с программами. Я на память уже не помню.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100436
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Смотри какие классы работают с программами. Я на память уже не помню.

Во, нашел...
https://docs.intersystems.com/latest/csp/documatic/%CSP.Documatic.cls?&LIBRARY=%SYS&CLASSNAME=%Library.Routine
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100442
Olegnomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эту библиотеку смотрели. Компилирование нашли, сохранение нашли, удаление нашли. А как открыть не нашли). Плохо смотрели?
Может пример, если не сложно.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100444
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
А как открыть не нашли). Плохо смотрели?

Собственно "открывать" и не нужно... Нужно читать.
Там есть методы
Код: javascript
1.
method Read


и
Код: javascript
1.
method ReadLine



Olegnomad
Может пример, если не сложно.

Там и пример есть у ReadLine
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
While 'stream.AtEnd { 
   Write stream.ReadLine(,.sc,.eol) 
   If $$$ISERR(sc) { 
      Write "ERROR" 
      Quit 
   } 
   If eol { 
      Write ! 
   } 
}
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100445
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad , понял я про "открытие"...
Давно с этим дело не имел.
Код: javascript
1.
Set routine = ##class(%Routine).%New("MyRoutine.MAC")


Аналогичная фигня - только %Open() .
Это ведь все стандартные методы, доставшиеся этому классу от родителя, только переопределенные...
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100467
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad , что-то сомнения меня терзают по поводу этого "открытия"...
Вот пример как работают с файлами
Код: javascript
1.
2.
3.
4.
  Set file=##class(%File).%New("file.txt")
  Write file.Size
  Do file.Open("WSN")
  Do file.WriteLine("This is a line of text")


Вполне возможно что с программками будет такая же картина...

P.S.
Все позабыл...
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100478
Olegnomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Set routine = ##class(%Routine).%New("MyRoutine.MAC") работает, хотя в %Routine нет %New(). Это системная команда? С %Open не работает. Open есть в Stream, но там нужен OID. Вроде операция простая - копирование, но что-то не получается.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100530
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
Код: javascript
1.
Set routine = ##class(%Routine).%New("MyRoutine.MAC")

работает, хотя в %Routine нет %New(). Это системная команда?

Сам класс унаследован от других классов - %New() идет от родителей, но может быть переопределен в самом классе "под себя"...
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100561
MX-9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad,

как вариант тупо и просто :

перебросить рутину в локаль - построчно в цикле

перейти в другую область (ZN)

из локали перекинуть в новую рутину - построчно в цикле (ZI)

сохранить (ZS)
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100568
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Olegnomad
Здравствуйте! Есть ли простой способ программного копирования программ (рутин) из одной области в другую без экспорта - импорта в файл.
Cache 5.0.21 !!!

USER>D ^%RCOPY

Copy routine(s): * To: ?

Enter a routine using one of the following formats:
ROUTINE (assumes extension MAC if it exists, INT otherwise)
or ROUTINE.EXTENSION (assumes version 0)
or ROUTINE.EXTENSION.VERSION
or |"NAMESPACE"|ROUTINE.EXTENSION.VERSION
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100569
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DIMAS>D ^%RCOPY

Copy routine(s): *.MAC To: |"USER"|*.MAC
Copy routine(s):

Generate backups? No => No
Compile? Yes => Yes
Display Errors? Yes => Yes
Overwrite Existing Routines? Yes => Yes

Display routine names on
Device:
Right margin: 80 =>

BuildVersion.MAC -> |"USER"|BuildVersion.MAC - COMPILED
DIMAS>W $ZV
Cache for Windows (x86-64) 2012.2.5 (Build 962_2) Fri Feb 17 2017 13:15:45 EST
DIMAS>
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100654
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MX-9,

С MAC-программами такой номер не пройдёт.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100673
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто теоретически...
Можно просто скопировать нужные узлы из "программных" глобалов.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100674
Olegnomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока пробуем программно использовать %RCopy. Она внутри вызывает %R. Копирование вроде получилось. С компиляцией проблема. На %R есть где-нибудь описание?
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100704
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Olegnomad,

может так пойдёт:

USER>set r=##class(%Routine).%OpenId("BuildVersion.MAC")

USER>zw

r=<OBJECT REFERENCE>[1@%Library.Routine]
USER>w r.Name
BuildVersion
USER>w r.Compile()

Компиляция программы: : BuildVersion.MAC1
USER>
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100713
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или все программы скомпилировать:
USER>w ##class(%Routine).CompileAll()

Compiling in namespace USER at 22:39:47
BuildVersion.MAC
1 routines compiled with 0 errors at 22:39:471
USER>
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100716
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Olegnomad
Пока пробуем программно использовать %RCopy. Она внутри вызывает %R. Копирование вроде получилось. С компиляцией проблема. На %R есть где-нибудь описание?

Если запустить поиск ^%R( в классе %Library.Routine, то можно получить какое-то представление.
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40100729
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
Пока пробуем программно использовать %RCopy. Она внутри вызывает %R. Копирование вроде получилось. С компиляцией проблема. На %R есть где-нибудь описание?

Может, .INC тоже надо копировать?
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40101077
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
На %R есть где-нибудь описание?

Using the Cache ^%R Routine
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40101369
Olegnomad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся! Копирование вроде работает. Но нам нужно предварительно очистить всю область от программ и глобалей. Не можем построить список программ в области. Используем ^$ROUTINE и %RD. Удаляются не все программы. Хотя проводник показывает пустую область. В Telixe программы видны. В чем подвох?
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40101470
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Olegnomad
Не можем построить список программ в области.

Так вроде там была какая-то "особенная" глобаль (или глобал)... Типа
Код: javascript
1.
^$r


По ней нужно было пройтись... Узлами как раз были имена программ.
В классе есть метод по выборке программ
Код: javascript
1.
2.
query Find
query RoutineList
...
Рейтинг: 0 / 0
Программное копирование программ (рутин)
    #40101491
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Olegnomad
Но нам нужно предварительно очистить всю область от программ и глобалей. Не можем построить список программ в области.

У меня когда-то работала программа зачистки и сборки пакета в области, попробуйте этот текст, может поможет:
- - - - -
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 write !,"удаление всех описаний классов:",!
 do $system.OBJ.DeletePackage("*")
  write !,"удаление всех программ из области:",!
 // удаляются все программы из области, кроме текущей
 set rset = ##class(%ResultSet).%New()
 set rset.ClassName = "%Library.Routine"
 set rset.QueryName = "RoutineList"
 
 for rext = "*.MAC","*.INT","*.OBJ" {
 	do rset.Execute(rext,,1)
	 while (rset.Next(.sc)) {
	    if ($SYSTEM.Status.IsOK(sc)) {
	       set rname = rset.Data("Name")
	       if ($t(+0)'=$extract(rname,1,$length(rname)-4)) {
	       	write rset.Data("Name"),!
	       	do ##class(%Library.Routine).Delete(rname)
	       }
	    }
	 }
 }
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Программное копирование программ (рутин)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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