Skip to content

Организации обмена между серверами Cache' . Удаленное подключение к серверу внешними программами PuTTY

Notifications You must be signed in to change notification settings

MyasnikovIA/ZSrvController

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 

Repository files navigation


# ZSrvController (Cache` Intersystems)

%ZMSrv.Controller



Организации обмена между серверами 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 "Сервер НЕ доступен "
   }






  Пример подключения к Серверу из Cache'


          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=""
 


  Пример подключения к Серверу из Cache'


          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


  Пример подключения к Серверу из Cache'



   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


 

Получение SQL запроса с удаленного сервера


 


  ;  Класс в кодом находится запроса
  ;  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()


 

Получение SQL запроса на удаленном сервере(вариант 2)


 

            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

 


 

Получить объекты из Query запроса


 

               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
 

 

Получить объект по ID  


 

       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()
 

 

Создать локально таблицу по SQL запросу во внешнюю БД и заполнить её результатом запроса


 

          ; 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
 
 

 

Создаем таблицу из SQL запроса и заносим в неё данние


 

           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

 

About

Организации обмена между серверами Cache' . Удаленное подключение к серверу внешними программами PuTTY

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages