IRIS Python nativo - Parte 2
Na sessão anterior, exploramos o processo de instalação e começamos a escrever o IRIS em Python nativo. Agora procederemos a examinar a global percorrida e interatuar com os objetos da classe IRIS
get: esta função se utiliza para obter valores do nó percorrido
deftraversal_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: percorrido de um só nível com node e obtenção dos valores da mesma maeira que $Order(^mygbl(subscript), direction, data).
#single level traversaldeftraversal_dollar_order_single_level():for sub,val in irispy.node('^mygbl').items():
print('subscript:',sub,' value:', val)
# multi level traversaldeftraversal_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: diferente do código anterior, pode usar nextsubstricpt para obter o subíndice seguinte facilmente.
deftraversal_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:returnwhile next_sub1 != None:
next_sub1 = irispy.nextSubscript(direction,'^mygbl',next_sub,next_sub1)
print(f'1st subscript = {next_sub} next subscript {next_sub1}' )
Clases e Objetos
Você pode chamar os classmethods (métodos de classe) desde a definição da classe usando a função específica. Como mencionei anteriormente, os Typecast Methods são cruciais para obter a resposta adequada de IRIS.
classMethodValue:Chama o Classmethod desde o Python sem iniciar o objeto, da mesma maneira que (por exemplo):
Do ##Class(Test.MYTest).FirstNameGetStored(1)) e obtem um valor predeterminado de tipo "string" em Python. Há diferentes métoods de conversão de tipo disponíveis para o valor de retorno esperado no lugar de string. Por favor, veja o seguinte:
defget_clsmethod_value():
print(irispy.classMethodValue('Test.MYTest','FirstNameGetStored',1)) #return string
date_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog') #return +$H value
print(irispy.classMethodVoid('Test.MYTest','SetTestGlobal','test')) # no return resposne
classMethodObject: Função importante para instanciar um novo objeto IRIS ou abrir um objeto existente. Configure as propriedades e invoque métodos de instância, etc.
Nuevo objeto IRIS: Inicie o objeto de classe para Test.MYTest e configure as propriedades.
defcls_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) #set birthdate property
iris_proxy_obj.set('RegisteredDate',horolog) #set the RegisteredDate property
status = iris_proxy_obj.invoke('%Save') #call instance methodreturn status
Abrir objeto IRIS: No código que se segue, abra o objeto da classee Test.MyTest e obtenha os valores de Birthdate e RegisteredDate do objectid "2", e converta RegisteredDate em uma lista Python.
defcls_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
Definição de classe IRIS que utilizei para a demonstração do código de classe e objeto em Python.
Spoiler
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:
Estes são alguns métodos typecast para recuperar valores de retorno adequados de IRIS:
classMethodValue() - para chamar a métodos de classe gerais.
classMethodVoid - Sem valor de retorno
classMethodValue - String por padrão
classMethodFloat - Valor de retorno float
invoke() - se utiliza para chamar aos métodos de instância. Você deve iniciar o objeto para chamar a esta invocação de funções
invokeFloat - valor de retorno float
invokeInteger - valor de retorno inteiro
Cobriremos as funções, chamadas a procedimentos em rotinas e outras funcionalidades no próximo artigo.