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
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: percorrido de um só nível com node e obtenção dos valores da mesma maeira 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: diferente do código anterior, pode usar nextsubstricpt para obter o subíndice seguinte facilmente.
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 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.
Antes de continuar, é importante se dar conta de que, diferente dos tipos de dados de IRIS, qie podemos tratar tudo como string, os tipod de dados de Python, como int, str,bool e list se classificam como objetos. Cada um desses tipos possui seus próprios atributos e métodos; por exemplo, o tipo de string do Python inclui funções como .upper() e .lower() que não são aplicáveis em outros tipos de dados. Em consequência, o IRIS está equipado com a capacidade de converter os valores de cadeia de IRIS em objetos de tipos de dados compatíveis com Python mediante o uso dos Typecast Methods. Essa funcionalidade se aplica de maneira similar aos métodos de classe, funções definidas pelo usuário e procedimentos. Do contrário, você deve utilizar as funções de conversão de tipos de Python para conseguir o tipo de dados desejado.
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:
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: 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.
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: 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.
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
Definição de classe IRIS que utilizei para a demonstração do código de classe e objeto em 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:
Estes são alguns métodos typecast para recuperar valores de retorno adequados de IRIS:
classMethodValue() - para chamar a métodos de classe gerais.
classMethodInteger - Devolve um valor inteiro
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
invokeString - String por padrão
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.