Écrit par

Bastide Le Confort Médical
Question Jean-Charles Cano · Oct 4, 2023

Exécutions d'un script dans un terminal Iris sans GUI

Bonjour,

Nous voulons créer une CD pour InterSystems. Nous avons créé un script IRIS qui permet de compiler automatiquement les fichiers .cls dans les bons namespaces et pour exécuter ce script, nous faisons la commande: iristerm /console=cn_ap:IRIS .\import.scr'

Cependant, cela va nous ouvrir un terminal IRIS dans une nouvelle fenêtre (GUI). Le problème, c'est que nous passons par un user SSH, en exécutant la commande : 

ssh user@hostname 'E: && iristerm /console=cn_ap:IRIS .\import.scr'

, cela ne fonctionne pas, nous supposons que c'est à cause de ce GUI qui est censé s'ouvrir, mais sans interface graphique c'est compliqué.

Nous n'avons pas trouvé de moyen pour ouvrir le terminal sans GUI ou même d'exécuter ce script d'une autre manière (et automatiquement pour la CD). 

Il s'agit d'un script écrit comme vous pouvez retrouver la documentation ici.

Si quelqu'un a une idée, nous sommes preneurs.

Merci d'avance !

Product version: IRIS 2022.1
$ZV: IRIS for Windows (x86-64) 2022.1 (Build 209U) Tue May 31 2022 12:16:40 EDT

Comments

Lorenzo Scalese · Oct 4, 2023

Bonsoir @Jean-Charles.Cano ,

Avez-vous déjà essayé avec runw?  Voici un exemple de structure de la commande pour démarrer une classmethod:  

iris runw INSTANCENAME ##class(Package.Class).ClassMethod(\"argument\") NAMESPACE

L'exe iris se trouve dans le sous répertoire bin de l'instance IRIS.

pour démarrer un terminal en ligne de commande utilisez irissession:

irissession INSTANCENAME -U NAMESPACE

# ex:
irissession IRIS -U USER

# il est également possible de démarrer un programme, ex:

irissession IRIS -U %SYS ^%SS

0
Cyril Grosjean  Oct 9, 2023 to Lorenzo Scalese

Bonjour @Lorenzo Scalese,

Le problème de la commande iris runw c'est que nous allons éxecuter une classe dans un namespace, cependant, nous voulons à partir d'un script (ou de cette classe si c'est possible) compiler plusieurs fichiers cls provenant de répertoires précis sur la machine (pas importés dans InterSystems), dans des namespaces différents (plus d'une dizaine).

Nous avons pas mal de difficultés sur la compréhension de l'éxecution d'un script, pouvez-vous nous fournir plus de détails concernant runw ou même un exemple afin qu'on puisse voir comment changer de namespace et compiler.

Merci beaucoup !

Cyril

PS : Pour le script il s'agit d'un script réalisé en suivant cette page de la documentation : https://docs.intersystems.com/irisforhealth20232/csp/docbook/DocBook.UI…

0
Lorenzo Scalese  Oct 9, 2023 to Cyril Grosjean

Bonjour @Cyril Grosjean ,

Je devrais pouvoir vous fournir quelques informations pouvant vous être utile.

Dans ma boîte, entre d'autres choses, je m'occupe de l'écriture de scripts de deploy pour nos environnements internes.

La solution que je pense la plus simple est d'écrire une classe (ou une routine) qui sera votre script principal pour toutes les actions à effectuer.  

Le tuto que vous avez suivi, n'est pas vraiment adapté.  Il y a quelques années, je l'ai testé par curiosité, mais c'est vraiment pour faire de l'émulation terminal.

Voici un exemple de classe qui se positionne sur un namespace, charge et compile un répertoire:

Class dc.DeployDemo
{

ClassMethod deploy(
	sourceDirectory As%String,
	targetNameSpace As%String)
{
    Set startNameSpace = $NamespaceWrite !, $ZDateTime($Horolog, 3, 1) _ " Start deploy"; L'utilisation du new $namespace permet au système ; de revenir automatiquement sur le namspace d'origine en quittant la méthodeNew$NamespaceSet$Namespace = targetNameSpace
    
    Write !, $ZDateTime($Horolog, 3, 1) _ " Switch to namespace "_$NamespaceWrite !, $ZDateTime($Horolog, 3, 1) _ " Load and compile directory " _ sourceDirectory

    ; le 4ème argument permet de faire un chargement récursif (inclusion des sous répertoires)Set sc = $SYSTEM.OBJ.LoadDir(sourceDirectory, "ck", , 1)

    Set msgStatus = $Select($$$ISERR(sc):$SYSTEM.Status.GetOneErrorText(sc),1:"OK")

    Write !, $ZDateTime($Horolog, 3, 1) _ " Status " _ msgStatus

    Quit
}

}

Préparer ensuite un fichier texte contenant le code à exécuter (pour l'exemple le fichier texte est c:\dev\script.txt): 

Do##class(dc.DeployDemo).deploy("c:\src\cls","namespace")
Halt

dès que le fichier est prêt, vous pouvez utiliser irissession et y injecter les commandes:

irissession IRIS -U USER < c:\dev\script.txt

Ceci reste qu'un exemple assez basic, n'hésitez pas à me contacter sur Discord, nous pourrons échanger verbalement plus rapidement sur le sujet si vous le souhaitez.

Lorenzo.

0
Lorenzo Scalese  Oct 10, 2023 to Cyril Grosjean

Nickel, content que ça aide !

0