#InterSystems IRIS

0 Abonnés · 759 Publications

InterSystems IRIS est une plateforme complète de données
InterSystems IRIS vous offre tout le nécessaire pour capturer, partager, comprendre et agir sur la ressource le plus précieuse de votre entreprise : vos données.
En tant que plateforme complète, InterSystems IRIS élimine la nécessité d'intégrer plusieurs technologies de développement. Les applications nécessitent moins de code, moins de ressources système et moins de maintenance.

Question Corentin Blondeau · Juin 4, 2025

Bonjour,
Quels sont les avantages et les inconvénients d'avoir plusieurs namespaces par rapport à un seul?
J'aimerais bien savoir les aspects positifs et négatifs des deux cas de figures, par exemple 1 ou 4 espaces de nom pour un total de 20 flux.

Qu'en est t'il niveau sécurité, gestion serveur, gestion du code, autre?
En terme de performances, est-ce que trop d'items sur une seul production ralenti le serveur? Ou trop de namespaces augmente la consommation mémoire pour rien?
Comment évolue la consommation d'un namespace? Il y a un minimum?
Je vous remercie de vos réponses.
Corentin BLONDEAU

5
1 124
Question Pierre LaFay · Fév 4, 2024

Bonjour à tous,

Je cherche la syntaxe ou le moyen pour utiliser une classe créée dans le Namespace "BNA" (mon application) depuis le Namespace %SYS.

Voici le contexte :

Je dispose d'une application "BNA" contenue dans le NS "BNA", cette application met à disposition une fonctionnalité de création des utilisateurs. Cette fonctionnalité crée à la fois l'utilisateur dans une table de l'application et dans le système Iris.

J'ai créé un script d'initialisation de ma base pour pouvoir la réinitialiser à volonté, ce script commence par vider la base de ces données, puis initialise les données de base.

5
0 104
Question Jean-Charles Cano · Oct 26, 2023

Bonjour à tous,

je souhaite pouvoir lancer le terminal IRIS sans avoir à saisir de nom d'utilisateur ni de mot de passe.

Pour bien comprendre :

  • IRIS est installé directement sur une machine Windows
  • Lorsque j'utilise mon compte de domaine en me connectant en RDP lorsque je lance le terminal il s'exécute sans me demander de log de connexion. 
    • Je sais que cela fonctionne car le compte est aussi créé dans IRIS avec le même Nom
  • Un utilisateur Windows local a été créé, c'est avec ce compte que je veux ouvrir le terminal.

Le compte Local s'appelle ssh.

20
0 303
Question Sylvain Guilbaud · Août 23, 2023

Est-il prévu que LOAD DATA prenne en compte plusieurs formats de DATE/DATETIME avec, par exemple un paramètre de indiquant le format utilisé dans les données sources ?

exemple :

LOAD DATA .../...
USING
{
  "from": {
    "file": {
       "dateformat": "DD/MM/YYYY"
    }
  }
}
3
0 98
Question Moussa SAMB · Nov 2, 2023

Bonjour, 

Je cherche à me connecter via OAuth2 sur un serveur outlook.office365.com et récupérer les messages avec IMAP.

J'ai un programme qui fonctionne avec la connexion plain, cependant je n'arrive pas à me connecter avec certains e-mails.

Raison pour la quelle je pense que la connexion plain est désactivé pour ces comptes.

Pour faire le client IMAP je me suis inspiré de ce Post : https://community.intersystems.com/post/implementing-imap-client-inters…

Dans  la méthode Connect je passe : le serveur, le username et  l'AccesToken récupérer de Microsoft graph.

4
0 442
Question Julia Pertin · Oct 24, 2023

Bonjour,

J'ai un petit soucis je souhaite renvoyé via une API REST des données IRIS mais j'ai une erreur sur le renvoi de données de type Stream.GlobalBinary, j'essaie de faire un "CopyFrom" via $METHOD mais je récupère un "INVALID OREF" : 

set obj  = ##class(%ZEN.proxyObject).%New()   
   set update = $CLASSMETHOD(classname,"%OpenId",id)
ifclass.Properties.GetAt(i).Type = "%Stream.GlobalBinary"{
        set pnewContent = ##class(%Stream.GlobalCharacter).%New()
           do$METHOD($PROPERTY(update,propertyName),"Rewind")
              while '$PROPERTY(update,propertyName).
3
1 103
Question Jules Pontois · Oct 16, 2023

Bonjour,

Je travaille sur l'ajout d'étapes préliminaires avant l'envoi d'un message d'un Business Service à un Business Process.

Pour ce faire, je surcharge les méthodes SendRequestAsync et SendRequestSync, mettant ces étapes préliminaires au début et quittant avec ##super return.

Je veux garder le comportement natif de SendRequestAsync et SendRequestSync. Je veux aussi coller à l'utilisation de ##super, donc si ces méthodes changent dans une mise à jour annuelle d'Iris, je n'aurai rien à changer. À cet égard, la classe personnalisée que j'ai faite doit étendre Ens.BusinessService.

5
0 107
Question Moussa SAMB · Oct 17, 2023

Bonjour,

Je cherche à  dézipper un fichier zip que je récupère  via HTTP avec ObjectScript.

Je récupère  de ma requête HTTP un  %Stream.GlobalBinary, et via mon BusinessOperation, je crée le fichier Zip.

J'aimerais savoir s'il y a une méthode pour dézipper directement le  %Stream.GlobalBinary et avoir le dossier dézipper  en sortie ?

Ou sinon quelle méthode permet de dézipper un fichier Zip en ObjectScript ?

Merci d'avance pour votre aide

3
0 89
Question Jules Pontois · Oct 19, 2023

Cette question est apparue à l'origine dans les commentaires du post : Surcharge les méthodes SendRequestAsync et SendRequestSync
 

Bonjour,

Effectivement, retirer ForceGenerate des mots clés résout le problème des doublons. Merci !

Une dernière question : Une fois le code généré, il n'est pas directement visible dans les classes crées. Et notamment en utilisant VS Code. Du coup, actuellement, je lance la compilation des sous classe avec $system.OBJ.Compile et le flag subclasses.

1
0 104
Question Julia Pertin · Sept 20, 2023

Bonjour, 

Je souhaite faire un appel synchrone d'un process. En entrée je reçois un flux json qui me déclenche mon business process mais tant que ce flux n'est pas analysé je ne souhaite pas récupérer un autre flux json tant que le premier n'est pas terminé. 

Pour cela j'ai crée un business Service faisant un appel au targetconfigname, or le SendRequestSync ne fonctionne pas, celui ci a le même comportement que le SendRequestAsync : 

Method OnProcessInput(pInput As%RegisteredObject, Output pResponse As exparf.msg.
12
2 117
Question Sylvain Guilbaud · Août 28, 2023

Je recherche dans DBeaver un moyen efficace permettant de filtrer les tables systèmes (ex: appartenant à un schéma commençant par "%").

En utilisant un utilisateur possédant le rôle %All, DBeaver nous affiche une longue liste de schémas systèmes, qui nous oblige à descendre la liste avant d'accéder aux tables utilisateurs.

En créant un utilisateur dans IRIS avec des droits restreints permet de réduire cette liste, mais on perd l'intérêt du rôle %All.

3
0 486
Question Augustin MADET · Oct 24, 2023
import os

# Récupérer les variables d'environnement
db_host = os.getenv('DB_HOST')
db_port = os.getenv('DB_PORT')
db_namespace = os.getenv('DB_NAMESPACE')
db_username = os.getenv('DB_USERNAME')
db_password = os.getenv('DB_PASSWORD')

# Créer une connexion à la base de données
conn = irisnative.createConnection(db_host, db_port, db_namespace, db_username, db_password)

# Créer une instance IRIS à partir de cette connexion
iris_native = irisnative.createIris(conn)

status = iris_native.classMethodValue('%SYSTEM.OBJ', 'Load', 'Production.
4
1 124
Question Corentin Blondeau · Jan 6, 2025

Bonjour
J'essaie de travailler avec l'Adapteur/Connection UDP- et j'ai cette erreur .

ERREUR #5002: Erreur Cache: <WRITE>zSend+5^EnsLib.UDP.Common.1

 Voici la méthode
 

Class TEMPLATE.BO.UDPSend Extends Ens.BusinessOperation
{

Parameter ADAPTER = "EnsLib.UDP.OutboundAdapter";

Property Adapter As EnsLib.UDP.OutboundAdapter;

Method SendData(pInput As Ens.Request, Output pOutput As Ens.Response) As %Status
{
    Try {
        Set status=$$$OK
        Set pOutput=##class(Ens.Response).%New()
        
        Set stream = ##class(%Stream.GlobalCharacter).%New()
        Do stream.

6
0 57
Question Augustin MADET · Oct 10, 2023

Avec l'approche Python, je rencontre l'erreur suivante :

ERREUR <Ens>ErrCanNotAcquireJobRootLock: Impossible d'obtenir un verrouillage pour l'enregistrement de la globale


Ci-dessous le code implémenté :

import pandas as pd
from sqlalchemy import create_engine, types


classFileOperationEmbedded(BusinessOperation):
    tablename = None
    engine = Nonedefon_init(self):ifnot hasattr(self, "dsnIris"):
            self.dnsIris = 'iris+emb:///'ifnot hasattr(self, "schema"):
            self.schema = 'Toto'

        self.engine = create_engine(self.
1
0 135
Question Alan Decourtray · Mars 18, 2025

Bonjour à tous! 

Mes collègues et moi se demandions pourquoi la classe varstring était "cachée" dans la documentation Intersystems .
Est-ce qu'on peut l'utiliser sans problèmes ? On a essayé de chercher sur le forum, et d'autres développeurs ont l'air de l'utiliser. Est-ce qu'il y a des spécificités ou des risques que nous devrions connaître avant de l'utiliser ? 

Merci beaucoup! 

Alan

1
0 53
Question Anthony Decorte · Mai 13, 2025

Bonjour,

J'ai rencontré un problème lors du déploiement. Quand je déploie en utilisant la classe Ens.Deployment.Deploy, je ne reçois plus les logs dans le terminal. Cependant, le déploiement s'est bien passé, je le vois dans l'historique sur le portail.

Cela fonctionne sur notre environnement mais pas sur celui du client.

Set tSC = ##class(Ens.Deployment.Deploy).DeployCode(chemin_"GESL_SVCCLI_DEPLOY_CPT-243_V4_0.xml","SVCCLI.ProdClient",1,chemin_"GESL_SVCCLI_DEPLOY_CPT-243_V4_0_rb.xml","L",chemin_"GESL_SVCCLI_DEPLOY_CPT-243_V4_0.log",1,1)

Merci 🙂

3
0 46
Question Julia Pertin · Mai 15, 2024

Bonjour, 

Je souhaite réaliser une méthode générique pour modifier des propriétés d'une classe dynamique. Lorsque je fais un JSONImport() cela fonctionne très bien pour certains objet, or dans le cas d'un objet contenant une liste cela m'ajoute un élément en plus au lieu de la modifier. J'ai essayée de vérifier le type lors de l'itération du JSON afin de faire un Insert mais je n'arrive pas à utiliser les $METHOD sur le Insert ou même le %Set. 

Voici la classe : 

Class Epc.conf.poste Extends (%Persistent, %JSON.
2
0 117
Question Pierre LaFay · Fév 13, 2024

Bonjour à tous,

Nous développons une application avec FrontEnd (angular) et BackEnd (objectscript Iris), nous utilisons l'identification intégrée grâce à la route /login fournie par %CSP.REST. Nous n'utilisons pas IAM, nous attaquons l'API directement.

Pour éviter les attaques automatisées, nous avons mis une temporisation sur le login (1s entre chaque tentative). Cela protège donc l'API dans le cadre de son utilisation via l'application.

Toutefois, cela ne protège pas complètement l'API, il est possible d'enchainer les logins avec postman sans délai entre les tentatives.

5
0 82
Question Cécile Heuillet · Mai 26, 2025

Bonjour,

je me suis rendue compte que j'avais cette erreur qui est survenue sur une interop qui tournait depuis quelques mois  :

"BP completion cleanup error deleting BP instance Id: 1133, ERREUR #5540: SQLCODE : Message -106 : Échec de suppression de la ligne de la table « xxx.Context » avec  %rowid=« 1012 », la ligne avec cet ID n'a pas été trouvée."

Nous n'avons pas fait de modification à ce moment là et je ne trouve pas d'où vient l'erreur. Nous avions fait plus tôt un changement de namespace mais c'était bien plus tôt.

Et par ailleurs cela ne met pas le système en erreur.

3
0 67
Question Cécile Heuillet · Déc 21, 2023

Bonjour,

j'utilise une méthode en python sur une opération pour pouvoir générer un fichier csv à partir d'une table de lien. Cette méthode me génère l'erreur : ERREUR <Ens>ErrCanNotAcquireJobRootLock et cela me bloque complètement pour l'arrête de la production. Mon opération passe en statut "Queued" alors que le fichier est généré et mon message de retour est complet.

La méthode principale de l'opération est :

Method extractionPiecesSage(pRequest As myDSO.msg.exportPiecesSage, Output pResponse As myDSO.msg.retourExport) As%Status
{
    set sc = $$$OKset pResponse = ##class(myDSO.msg.
2
0 86
Question Julia Pertin · Sept 18, 2023

Bonjour à tous, 

Pour un interop je dois récupérer en entrée un json d'une API REST. J'essaie donc de passer le %Net.HttpRequest or j'obtiens cette erreur : 

J'ai mis cette classe en entrée du business process et j'ai un business service qui appel à intervalle régulier ce business process : 

Pouvez-vous m'aider s'il vous plait ? 

1
1 87
Question Julia Pertin · Juin 6, 2024

Bonjour, 

Je peux récupérer au sein d'un interop un objet dynamique vide : "{}"

Il faudrait que je puisse ajouter une condition afin de ne pas faire un traitement dans le cas ou je n'ai pas de contenu. Le seul moyen que j'ai trouvé pour l'instant c'est de vérifier si $LENGTH > 2 car cela me prend en compte les accolades. 

Avez-vous un moyen beaucoup plus propre ? 

Merci pour vos réponses

2
0 68
Question Pierre LaFay · Déc 22, 2023

Je souhaite créer des fichiers excel (xls) et des fichiers pdf pour la création de rapports.

Ces rapports étant complexes je souhaite programmer en objectscript leur création et non utiliser un système de report.

Je cherche les classes qui pourraient m'aider à réaliser cette tâche sachant que pour moi ces classes doivent exister puisqu'Iris propose la génération de fichiers xls.

J'avais demandé à chatGpt qui m'a "inventé" une classe inexistante : %Library.Excel.Workbook qui correspondait tout a fait à ce que je cherche.

6
0 150