En la sección anterior, exploramos el proceso de instalación y comenzamos a escribir el IRIS en Python nativo. Ahora procederemos a examinar el recorrido global y a interactuar con los objetos de la clase IRIS.
get: esta función se utiliza para obtener valores del nodo de recorrido
def traversal_firstlevel_subscript():
"""
^mygbl(235)="test66,62" and ^mygbl(912)="test118,78"
"""
for i in irispy.node('^mygbl'):
print(i, gbl_node.get(i,''))
node e items: recorrido de un solo nivel con node y obtención de los valores de la misma manera que $Order(^mygbl(subscript), direction, data).
def traversal_dollar_order_single_level():
for sub,val in irispy.node('^mygbl').items():
print('subscript:',sub,' value:', val)
def traversal_dollar_order_multi_level():
for sub,val in irispy.node('^mygbl').items():
print(f'sub type is: {type(sub)} {sub} and val type is {type(val)}')
for sub1,val1 in irispy.node('^mygbl',sub).items():
print('subscript:',sub1,' value:', val1)
nextsubscript: a diferencia del código anterior, podéis usar nextsubscript para obtener el siguiente subíndice fácilmente.
def traversal_dollar_order_use_nextsubscript():
direction = 0
next_sub = ''
while next_sub != None:
next_sub = irispy.nextSubscript(direction,'^mygbl', next_sub)
print(f'next subscript = {next_sub}' )
next_sub1=''
if next_sub == None:return
while next_sub1 != None:
next_sub1 = irispy.nextSubscript(direction,'^mygbl',next_sub,next_sub1)
print(f'1st subscript = {next_sub} next subscript {next_sub1}' )
Clases y Objetos
Podéis llamar a los classmethods (métodos de clase) desde la definición de la clase utilizando la función específica. Como mencioné anteriormente, los Typecast Methods son cruciales para obtener la respuesta adecuada de IRIS.
Antes de continuar, es importante darse cuenta de que, a diferencia de los tipos de datos de IRIS, en los que podemos tratar todo como cadenas, los tipos de datos de Python, como int, str, bool y list, se clasifican como objetos. Cada uno de estos tipos posee sus propios atributos y métodos; por ejemplo, el tipo de cadena de Python incluye funciones como .upper() y .lower(), que no son aplicables a otros tipos de datos. En consecuencia, IRIS está equipado con la capacidad de convertir los valores de cadena de IRIS en objetos de tipos de datos compatibles con Python mediante el uso de los Typecast Methods. Esta funcionalidad se aplica de manera similar a los métodos de clase, funciones definidas por el usuario y procedimientos. De lo contrario, debéis utilizar las funciones de conversión de tipos de Python para lograr el tipo de datos deseado.
classMethodValue: Llamad al Classmethod desde Python sin iniciar el objeto, de la misma manera que (por ejemplo:
Do ##Class(Test.MYTest).FirstNameGetStored(1)
) y obtened un valor predeterminado de tipo "string" en Python. Hay diferentes métodos de conversión de tipo disponibles para el valor de retorno esperado en lugar de una cadena. Por favor, referíos a lo siguiente.
def get_clsmethod_value():
print(irispy.classMethodValue('Test.MYTest','FirstNameGetStored',1))
date_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog')
print(irispy.classMethodVoid('Test.MYTest','SetTestGlobal','test'))
classMethodObject: Función importante para instanciar un nuevo objeto IRIS o abrir un objeto existente. Configurad las propiedades e invocad métodos de instancia, etc.
Nuevo objeto IRIS: Iniciad el objeto de clase para Test.MYTest y configurad las propiedades.
def cls_object_new():
"""
initiate new object and store
"""
iris_proxy_obj = irispy.classMethodObject('Test.MYTest','%New','ashok','kumar')
birthdate_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog','12/12/1990')
horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog')
iris_proxy_obj.set('BirthDate',birthdate_horolog)
iris_proxy_obj.set('RegisteredDate',horolog)
status = iris_proxy_obj.invoke('%Save')
return status
Abrir objeto IRIS: En el código a continuación, abrid el objeto de la clase Test.MyTest y obtened los valores de Birthdate y RegisteredDate del objectid "2", y convertid RegisteredDate en una lista de Python.
def cls_object_open():
iris_proxy_obj = irispy.classMethodObject('Test.MYTest','%OpenId',2)
birth_date = iris_proxy_obj.get('BirthDate')
full_name iris_proxy_obj.InvokeString("GetFullName")
data = [birth_date, iris_proxy_obj.get('RegisteredDate')]
return data
Definición de clase IRIS que utilicé para la demostración del código de clase y objeto en Python.
Class Test.MYTest Extends %Persistent
{
Property FirstName As %String
Property LastName As %String
Property BirthDate As %Date
Property RegisteredDate As %Date
Method %OnNew(FirstName, LastName) As %Status
{
Set ..FirstName = FirstName
Set ..LastName = LastName
Return $$$OK
}
ClassMethod GetHorolog(pDate As %String = "") [ CodeMode = expression ]
{
$Select(pDate'="":$ZDH(pDate),1: +$H)
}
Method GetFullName() As %String
{
Return ..FirstName_","_..LastName
}
}
Typecast methods:
Estos son algunos typecast methods para recuperar valores de retorno adecuados de IRIS:
classMethodValue() - para llamar a métodos de clase generales.
classMethodInteger - Devuelve un valor entero
classMethodVoid - Sin valor de retorno
classMethodValue - Cadena por defecto
classMethodFloat - Valor de retorno float
invoke() - se utiliza para llamar a los métodos de instancia. Tenéis que iniciar el objeto para llamar a esta invocar funciones
invokeString - cadena por defecto
invokeFloat - valor de retorno float
invokeInteger - valor de retorno entero
Cubriremos las funciones, llamadas a procedimientos en rutinas y otras funcionalidades en el próximo artículo.