# ZSrvController (Cache` Intersystems)
Организации обмена между серверами Cache' (Удаленное подключение к серверу).
Проверить работу можно применив PuTTY.exe (https://putty.org.ru/download.html).
"ip" - Получиь IP адрес клиента со стороны сервера
"run: w $h" - Выполнить однострочную команду
"cls" - Очистить буфер команд на стороне сервера
"read" - Прочитать буфер команд записанные на стороне сервера
"run" - Выполнить команды записанные в буфере на стороне сервера
"runline" - Выполнить построчно команды записанные в буфере на стороне сервера
"key" - Получить ключ сесии
"exit" - Разорвать соединение
"ping" - тестовый запрос (после него произойдёт разрыв соединения)
"gl" - показать имя глобала в котором хранится буфер
"gl:^GBuff" - Установить имя глобала в котором хранится буфер
"setapp:AppName"- Указываем название приложение из которого подключились
Все остальные строки записываются в буфер на стороне сервера.
; 8200 - номер порта для соединения
;"USER" - область имен по умолчанию
do ##class(%ZMSrv.Controller).StartSRV(8200,"USER")
; 8200 - номер порта для соединения
do ##class(%ZMSrv.Controller).StopSRV(8200)
; IP ,Port
if ##class(%ZMSrv.Controller).ExistSRV("10.100.12.21",8200)=1{
W "Сервер доступен"
} else {
W "Сервер НЕ доступен "
}
s obj=##class(%ZMSrv.Controller).%New() if obj.Connect("127.0.0.1","SAMPLES",6010,"_SYSTEM","SYS")=1 { w !,obj.Send("run: w $h") s ExternalObject=obj.GetObject("Cinema.Film","1" ) w !,! zw ExternalObject }else{ w !,"Error: "_obj.Error,! } d obj.DisConnect() s obj=""
s obj=##class(%ZMSrv.Controller).%New() if obj.Connect("127.0.0.1",6006,"USER","_SYSTEM","SYS")=1 { w !,obj.Send("ip") w !,obj.Send("run: w $ZU(110)") ; Наполняем буфер командами Cache' d obj.Send(" for a=1:1:100 d ") d obj.Send(" . w $JOB_"":""_a ") d obj.Send(" . w $c(13,10) ") w !,obj.Send("run") ; запустить выполнение команд в буфере d obj.Send("cls") ; Очистить буфер на стороне сервера w !,"SessionKey: "_obj.SessionKey }else{ w !,"Error: "_obj.Error,! } d obj.DisConnect() q
s obj=##class(%ZMSrv.Controller).%New()
s obj.Host="127.0.0.1"
s obj.Port=8200
s obj.UserName="_SYSTEM"
s obj.UserPass="SYS"
s obj.NameSpace="USER"
if obj.Connect()=1 {
w !,obj.Send("ip")
w !,obj.Send("run: w $ZU(110)")
; Наполняем буфер командами Cache'
d obj.Send(" for a=1:1:100 d ")
d obj.Send(" . w $JOB_"":""_a ")
d obj.Send(" . w $c(13,10) ")
w !,obj.Send("run") ; запустить выполнение команд в буфере
d obj.Send("cls") ; Очистить буфер на стороне сервера
w !,"SessionKey: "_obj.SessionKey
}else{
w !,"Error: "_obj.Error,!
}
d obj.DisConnect()
q
; Класс в кодом находится запроса
; Class Demo.Import5 {
; ClassMethod test(SqlStr) {
; s SQLobj=##class(%SQL.Statement).%New()
; d SQLobj.%Prepare(SqlStr)
; s DataSet=SQLobj.%Execute()
; s QMeta=DataSet.%GetMetaData()
; }
; }
s obj=##class(%ZMSrv.Controller).%New()
s obj.Host="ne1234"
s obj.Port=8200
s obj.UserName="_SYSTEM"
s obj.UserPass="SYS"
s obj.NameSpace="USER"
if obj.Connect()=0 { w !,"Error: "_obj.Error,! q $$$OK }
; Вызываем класс метод
w obj.RunClassMethod("Demo.Import5","test","select top (500) * from Contracts.EPhDogovor where 1=1 ")
for {
q:+obj.Send("run: w DataSet.%Next()")=0
w obj.Send("run: w QMeta.columns.GetAt(1).colName")_"="_obj.Send("run: w DataSet.%GetData(1)")
}
d obj.DisConnect()
s SqlStr="select * from %SYS.ProcessQuery"
s obj=##class(%ZMSrv.Controller).%New()
; s obj.Host="127.0.0.1"
; s obj.Port=8200
; s obj.UserName="_SYSTEM"
; s obj.UserPass="SYS"
s obj.NameSpace="SAMPLES"
if obj.Connect()=1 {
; s obj.TimeOut=0
; s SqlStr="select top (?) * from Contracts.EPhDogovor where 1=1 and id [ ? "
; d obj.SqlExec("",SqlStr,10,999)
if obj.SqlExec("",SqlStr)'=1 {
w obj.Error
}else{
for {
s ResNext=obj.SqlNextRaw("")
q:ResNext=0
if ResNext="" {
w obj.Error
q
}
s re=obj.SqlGetRaw("")
zw re ; показать объект
}
}
}
d obj.DisConnect()
q
s obj=##class(%ZMSrv.Controller).%New()
; s obj.Host="127.0.0.1"
; s obj.Port=8200
; s obj.UserName="_SYSTEM"
; s obj.UserPass="SYS"
s obj.NameSpace="SAMPLES"
if obj.Connect()=1 {
if obj.SqlQuery("","%Dictionary.ClassDefinition:Summary" )'=1 q
for {
s resNext=obj.SqlQueryNext("")
q:resNext=0
if resNext="" {
w "Error: "_obj.Error,!
q
}
s re=obj.SqlQueryGet("")
zw re
}
}else{
w !,"Error: "_obj.Error,!
}
d obj.DisConnect()
q
s obj=##class(%ZMSrv.Controller).%New()
s obj.Host="127.0.0.1"
s obj.Port=8200
s obj.UserName="_SYSTEM"
s obj.UserPass="SYS"
s obj.NameSpace="SAMPLES"
if obj.Connect()=1 {
s ExternalObject=obj.GetObject("Cinema.Film","1" )
zw ExternalObject
}else{
w !,"Error: "_obj.Error,!
}
d obj.DisConnect()
; select * from TabDst4
; --delete from TabDst4
s obj=##class(%ZMSrv.Controller).%New()
s obj.Host="127.0.0.1"
s obj.Port=8200
s obj.UserName="_SYSTEM"
s obj.UserPass="SYS"
s obj.NameSpace="SAMPLES"
if obj.Connect()=1 {
s SQLstr="select top 4 id as OldID , ID , Title, Description , TicketsSold from Cinema.Film"
s DstClassName = "User.TabDst4"
d obj.CreateTabFromSQL(SQLstr,DstClassName ) ; создаем таблицу
d obj.SqlExec("test", SQLstr) ; Делаем запрос данных
s RawInd=0
for {
q:obj.SqlNextRaw("test")=0
#DIM RecObject as %ZEN.proxyObject =obj.SqlGetRaw("test")
s RawInd=RawInd+1
; Создание записи в таблице
s oZak1=$zObjClassMethod(DstClassName,"%New")
s key=""
for {
s key=$o(RecObject.%data(key))
q:key=""
continue:key11="ID"
s $zObjProperty(oZak1,key11)=RecObject.%data(key)
; w RawInd_") ||"_RecObject.ID_"||"_key_" "_RecObject.%data(key),!
}
s err=oZak1.%Save()
}
}else{
w !,"Error: "_obj.Error,!
}
d obj.DisConnect()
q
s obj=##class(%ZMSrv.Controller).%New()
s obj.Host="127.0.0.1"
s obj.Port=8200
s obj.UserName="_SYSTEM"
s obj.UserPass="SYS"
s obj.NameSpace="SAMPLES"
if obj.Connect()=1 {
s SQLstr="select top 4 id as OldID , ID , Title, Description , TicketsSold from Cinema.Film"
s DstClassName = "User.TabDst4"
d obj.CreateTabFromSQL(SQLstr,DstClassName ) ; создаем таблицу
d obj.SqlExec("test", SQLstr) ; Делаем запрос данных
s RawInd=0
for {
q:obj.SqlNextRaw("test")=0
s RawInd=RawInd+1
#DIM RecObject as %ZEN.proxyObject =obj.SqlGetRaw("test")
s res=obj.AddObjectToTab(RecObject,DstClassName ) ; Добавляем объект в таблицу и получаем ID новой записи
if res=0 w obj.Error,! ; если ID равен 0 , тогда произошла ошибка в процессе записи
e w res,!
}
}else{
w !,"Error: "_obj.Error,!
}
d obj.DisConnect()
q