Rechercher

Annonce
· Sept 6, 2024

New InterSystems Reports Designer videos available

I am excited to share that the Learning Services team has recently added new content to our InterSystems Reports Learning Path. These latest videos, created by our partner, insightsoftware, provide instruction for developing reports with InterSystems Report Designer.

In these three short videos, you’ll learn how to:

  • Get Started with Report Designer: An orientation that walks you through creating a Banded Report.
  • Add Formulas to Reports: Learn how to incorporate formulas into your existing reports.
  • Preview and Export Reports: Explore the differences between page and web reports, along with various export formats.

Head over to the InterSystems Reports Learning Path to check them out and enhance your reporting skills today!

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Sept 6, 2024 2m de lecture

WebTerminal não funciona no IRIS 2024.2

Incluo esse post para ajudar os usuários de WebTerminal que atualizaram à versão IRIS 2024.2 -- (Build 247U) Tue Jul 16 2024 09:52:30 EDT -- liberada recentemente, ou estão considerando fazê-lo.

Essa versão 2024.2 contém uma mudança (DP-432503) que precisa que o usuário através do qual se conecta inicialmente ao Web Gateway (normalmente CSPSystem) deva ter permissões de leitura (READ) sobre a base de dados em que se encontra a classe de dispatching da aplicação web de tipo REST.

Para os casos em que não for assim, se gera um erro, mas retorna um estado HTTP 404 a quem faz a requisição no lugar do esperado HTTP 401

A princípio o problema será solucionado na 2024.3, referência DP-432898 / ALI048 : REST Login endpoints to return 401 HTTP error instead of 404, mas, ao ser a versão 2024.2 uma versão de tipo Continuous Delivery (CD), não se incluirá esta correção.

Um workaround possível é adaptar CSPSystem para que tenha permissão de leitura (READ) sobre a base de dados o namespace  em que está instalado o WebTerminal (ej. WEBTERMINAL).

Eu fiz assim:

  1. Crie um novo recurso de segurança %DB_WEBTERMINAL e atribuir à base de dados WEBTERMINAL no lugar de %DB_%DEFAULT.
  2. Crie um role %DB_WEBTERMINAL que outorgue ao dono do role de acesso RW ao recurso %DB_WEBTERMINAL.
  3. Crie outro role (eu o chamei de DBread_WEBTERMINAL) que dá ao dono do role acesso de somente leitura a esse recurso.
  4. Dê ao usuário CSPSystem o role DBread_WEBTERMINAL. Isto permite separar o bug da 2024.2.
  5. Edite a aplicação web /terminalsocket e adicione o role %DB_WEBTERMINAL no arquivo de Roles de Aplicação. Este passo é necessário porque WebTerminal inicialmente executa seu processo de websocket como UnknownUser e necessita modificar a informação de estado em sua base de dados incluso antes de que mude a executar como um usuário autenticado.

Uma técnica mais simples, mas menos segura seria:

  1. Crie um novo recurso %DB_WEBTERMINAL com privilégios RW, e atribua a base de dados WEBTERMINAL para que o use no lugar de %DB_%DEFAULT.

Mais detalhes em https://github.com/intersystems-community/webterminal/issues/155

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Sept 6, 2024 5m de lecture

IRIS Python nativo Parte 2

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

#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: 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 intstrbool 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)) #return string 
    date_horolog = irispy.classMethodInteger('Test.MYTest','GetHorolog') #return +$H value
    print(irispy.classMethodVoid('Test.MYTest','SetTestGlobal','test')) # no return resposne

 

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

 
Spoiler

 

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.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· Sept 6, 2024

Looking for information on projects where openEHR is used

HI, in The Netherlands I get lots of questions on the ability of InterSystems to handle openEHR data. Before I start a local initiative I'm interested in other work done with openEHR. Anybody?

Regards, Joost

3 Comments
Discussion (3)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Sept 6, 2024

Kick-off Webinar para el concurso de herramientas de desarrolladores de InterSystems 2024.

Hola Comunidad,

¡Nos complace invitaros a todos al próximo webinar de lanzamiento para el concurso de herramientas de desarrollo de InterSystems 2024!

Durante el webinar, descubriréis los emocionantes retos y oportunidades que os esperan a los entusiastas de IRIS en este concurso. Hablaremos sobre los temas que esperamos de los participantes y os mostraremos cómo desarrollar, construir y desplegar aplicaciones utilizando la plataforma de datos InterSystems IRIS.

Fecha y hora: Martes, 10 de septiembre – 12:30 pm EDT | 6:30 pm CEST.

Ponentes:  
🗣 ​​​@Dean Andrews, Responsables de Relaciones con Desarrolladores.
🗣 ​​​@Evgeny Shvarov, Gerentes Senior de Programas para Desarrolladores y Startups.
🗣 @Raj Singh, Product Manager.

¡Registráos para el lanzamiento hoy mismo!

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer