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 !
Comments
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\") NAMESPACEL'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
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…
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")
Haltdès que le fichier est prêt, vous pouvez utiliser irissession et y injecter les commandes:
irissession IRIS -U USER < c:\dev\script.txtCeci 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.
Bonjour @Lorenzo Scalese
Merci beaucoup, tout marche correctement !
Nickel, content que ça aide !