Article
· Juin 26 3m de lecture

Embedded Python, Utilisation des paramètres de sortie

Contexte

Dans les versions >=2021.2 d'InterSystems IRIS, nous pouvons utiliser le [binaire irispython pour écrire directement du code python au-dessus de nos instances IRIS] (https://docs.intersystems.com/iris20212/csp/docbook/DocBook.UI.Page.cls?...). Cela nous permet d'utiliser des paquets python, d'appeler des méthodes, de faire des requêtes SQL et de faire à peu près tout ce qui se fait en Objectscript mais en python.

Par exemple, ci-dessous, je vérifie si un espace de noms est présent :

#!/usr/irissys/bin/irispython
import iris
# call arbitrary class methods
result = iris.cls('%SYS.Namespace').Exists('USER')
if result == 1:
    print(f"Namespace USER is present")

Mais que se passe-t-il si ma méthode dans IRIS a des paramètres spéciaux tels que les paramètres Output et ByRef ?
Comment utiliser les paramètres Output dans irispython ?

Par exemple, Ens.Director a beaucoup de paramètres de sortie sur ses méthodes, comment puis-je utiliser ces paramètres en python ?

Ens.Director:GetProductionStatus

// An example method stub from Ens.Director
ClassMethod GetProductionStatus(Output pProductionName As %String, Output pState As %Integer...

Essayer les méthodes de variables normales

À première vue, vous pouvez essayer ce qui suit :

import os
# Set namespace the manual way
os.environ['IRISNAMESPACE'] = 'DEMONSTRATION'

import iris

# TEST 1 avec variables de sortie
productionName, productionState = None, None
status = iris.cls('Ens.Director').GetProductionStatus(productionName, productionState) 

print("Success? -- {}".format(productionState != None))

Mais les deux tests ne renvoient pas les variables de sortie ! Vous pouvez essayer vous-même sur n'importe quel espace de noms Ensemble

Utilisation de iris.ref

L'utilitaire irispython iris.ref peut être utilisé pour capturer les variables Output et ByRef.

  1. Créer un objet iris.ref().
  2. Appelez votre méthode ObjectScript
  3. Utiliser la variable .value pour obtenir le résultat de ce paramètre
import os
# Définir l'espace en dur
os.environ['IRISNAMESPACE'] = 'DEMONSTRATION'

import iris

# TEST 2 avec des variables de sortie
productionName, productionState = iris.ref('productionName'), iris.ref('productionState')
status = iris.cls('Ens.Director').GetProductionStatus(productionName, productionState) 

print("Status: {}".format(status))
# see .value
print("Production: {}".format(productionName.value))
# see .value
print("Production State: {}".format(productionState.value))

image

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer