No artigo anterior. Práticas de membros de classe e sua execução dentro do Python embutido. Agora voltaremos nossa atenção para o processo de alternância de espaços de nomes, acesso a variáveis globais, travessia e execução de rotinas dentro do Python embutido.
Antes de prosseguir para as outras funções. vamos revisar brevemente a função execute
dentro do pacote iris. Esta função é excepcionalmente benéfica para executar funções ObjectScript arbitrárias e invocação de classe.
>>> b
'aaaa'
>>> b = iris.execute('return $Extract("123456",2,5)')
>>> b
'2345'
>>> b = iris.execute('return $Length(123456)')
>>> iris.execute('write ##Class(%SYSTEM.SYS).NameSpace()')
LEARNING>>>
>>> b = iris.execute('return ##Class(%SYSTEM.SYS).NameSpace()')
>>> b
'LEARNING'
Vamos começar!
4. Mudar Namespaces
A troca de espaços de nomes durante a execução é frequentemente necessária. No entanto, diferentemente do IRIS, a troca direta de espaços de nomes dentro do Python embutido não é viável. Portanto, é essencial utilizar definições de classe existentes ou criar um método wrapper para facilitar a troca de namespaces.
ClassMethod SwitchNM() [ Language = python ]
{
import iris
print(iris.cls('%SYSTEM.SYS').NameSpace())
print(iris.system.Process.SetNamespace("USER"))
try:
iris.cls('User.EmbeddedPython').pyGetTemplateString()
except RuntimeError as e:
print("Wrong NameSpace",e)
}
5. Global
Para utilizar as capacidades de global para travessia de dados ou para recuperar informações de sistemas globais legados diretamente, em vez de usar SQL ou objetos dentro do Python embutido, é possível acessá-lo diretamente empregando a função gref do pacote iris. Para definir ou obter valores globais, a função gref pode ser utilizada para estabelecer uma referência à variável global e atribuir valores diretamente dentro do Python.
5.1 Definir valores de global
ClassMethod SetGlobal() [ Language = python ]
{
import iris
#create a global reference
g = iris.gref('^mygbl')
g[1],g[2]='Mon','Tue'
g["95752455",1]=iris.execute('return $LFS("Ashok,55720,9639639639,test@gmail.com",",")')
g["85752400",1]=iris.execute('return $LB("Test","9517539635","t@gmail.com")')
g["test","c1"]=iris.execute('return ##Class(MyLearn.EmbeddedPython).executeAndGetResult()') # method wil return some listbuild values
# declare values by using set function
g.set([3],'Wed')
g.set([3,1,1],'Test multilevel')
}
5.2 Buscar valores de global
Obtenha os valores globais do Python diretamente usando os subscritos ou o método get.
ClassMethod GetGlobal() [ Language = python ]
{
import iris
#gets a global reference
g = iris.gref('^mybgl')
# get values
print(g[3,1,1])
print(g.get([2,1]))
print(g["95752455",1])
}
5.3 Travessia
order - Travessia do global é essencial para coletar múltiplos níveis de dados do global. Esta função order do Python embutido funciona de forma semelhante ao comando $Order, utilizando a função order do iris.gref. Inicialmente, é necessário estabelecer uma referência à entidade global que requer travessia.
Travessia de nível de subscrito único
ClassMethod DollarOrder() [ Language = python ]
{
import iris
g = iris.gref('^MyLearn.EmbeddedPythonD') # I use my persistent class global
key = ''
while True:
key = g.order([key])
if key == None:
break
print(f'{key} {g.get([key])}')
}
Percurso em níveis com múltiplos índices
ClassMethod DollarOrderMultiLevel() [ Language = python ]
{
import iris
g = iris.gref('^mygbl')
key1= ''
while True:
key1 = g.order([key1])
if key1== None:
break
key2 = ''
while True:
key2 = g.order([key1,key2])
if key2 == None:
break
value = g.get([key1,key2])
print(key1,key2,value)
}
query
- Função de consulta a partir do iris.gref
semelhante a$query. sta função coleta todos os valores globais em tuplas. O resultado da tupla contém os IDs em uma lista e os valores na próxima tupla. Você pode consultar o exemplo de tupla abaixo.
ClassMethod DollarQuery() [ Language = python ]
{
import iris
g = iris.gref('^mygbl')
key = g.query()#this will return tuples of all the subscripts
for x in key:
print(x) # output (['3', '1', '1'], 'Test multilevel')
}
data - Esta funçãodata
verifica se o subscrito fornecido existe no escopo global e retorna os valores de $data
usando a própria função de dados.
ClassMethod DollarData() [ Language = python ]
{
import iris
g = iris.gref('^mygbl')
key1= ''
print(g.data([1]))
}
6. Rotinas
Além disso, é essencial implementar os membros da classe. Devemos executar as rotinas como parte da implementação para sistemas com base de código legado e outras situações relacionadas. Consequentemente, existe uma função dedicada dentro do pacote da biblioteca iris que permite a invocação de rotinas a partir do Python embutido através do uso da função routine.
ClassMethod RunRoutines() [ Language = python ]
{
import iris
iris.routine('^myirispython')
iris.routine('add^myirispython',1,2) # same as write $$add^myirispython(1,2)
}
Além disso, você também pode executar a rotina usando a função execute. iris.execute('do ^myirispython')
>>> iris.routine('^myirispythonT')
Traceback (most recent call last):
File "<input>", line 1, in <module>
RuntimeError: Routine not found
Continuaremos os outros tópicos no próximo artigo.