Artigo
· Set. 26 5min de leitura

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

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).

#single level traversal
def traversal_dollar_order_single_level():
    for  sub,val in irispy.node('^mygbl').items():
         print('subscript:',sub,' value:', val)
# multi level traversal
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 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() .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)) #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.

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) #set birthdate property
    iris_proxy_obj.set('RegisteredDate',horolog) #set the RegisteredDate property
    status = iris_proxy_obj.invoke('%Save') #call instance method
    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.

 
Spoiler

 

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.

Discussão (0)1
Entre ou crie uma conta para continuar