Pergunta
Jullyanna Mendes · Mar. 4, 2021

Task

Estou tentando executar uma tarefa pelo terminal, utilizando:

set test=##class(%SYS.TaskSuper).%New()

d test.RunNow(1), passando o ID da tarefa, para executa-lá, porém ela não executa. 

Qual seria um outro jeito para que eu consiga realizar essa execução pelo terminal? 

$ZV: 2017.2.2 (Build 865_0_18359U)
Product version:
Caché 2017.1
20
1 0 5 49
Log in or sign up to continue

Respostas

Boa tarde, teria como eu adicionar set test=##class(%SYS.Task).RunNow(ID) dentro de um button ou input? no csp page

Boa tarde,

Sim é possível executando através do hyperevento. 

Executando um hyperevento o código vai rodar no servidor e não no browser.

https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...

Segue um teste que fiz aqui:

Class teste.NewClass2 Extends %CSP.Page [ ProcedureBlock ]
{ ClassMethod OnPage() As %Status
{    &html<<html>
   <head>
   <script language=javascript>
   function onServer(ID)
   {
      alert(#server(..ServerMethod(ID))#);
   }
   </script>
   #(..HyperEventHead())#
   </head>
   <body>
   <input type=button name = "Button" value="1000" onclick='onServer(value)' />
   </body>
   </html>>
   Quit $$$OK
} ClassMethod ServerMethod(ID As %String)
{
   do ##class(%SYS.Task).RunNow(ID)
} }

Abraços,

Fernando

Uma outra forma de você executar o teste de sua rotina instanciando ela é chamando diretamente o método OnTask(), lembrando se antes popular as propriedades (caso existam) que serão usadas na execução do método.