検索

Résumé
· Avr 1

InterSystems Developer Community Digest, March 2025

Hello and welcome to the March 2025 Developer Community Newsletter.
General Stats
150 new posts published in March:
 30 new articles
 46 new announcements
 70 new questions
 4 new discussions
337 new members joined in March
14,726 posts published all time
15,711 members joined all time
Top posts
Top authors of the month
Articles
#InterSystems IRIS
Leveraging InterSystems IRIS for Health Data Analytics with Explainable AI and Vector Search
By Rahul Singhal
IRIS Vector Search for Matching Companies and Climate Action
By Alice Heiman
Multi-Layered Security Architecture for IRIS Deployments on AWS with InterSystems IAM
By Roy Leonov
SQLAchemy-iris with the latest version Python driver
By Dmitry Maslennikov
Parallel Query Processing - (System-wide and Query-based)
By Parani.K
IRIS Vector Search for Climate Matching: Introducing BAS
By Suze van Adrichem
Salesforce Integration with InterSystems IRIS
By Yuri Marx
How to set up an IRIS Sharding cluster in less than a minute
By Jose-Tomas Salvador
SQL Query Stopped Working After Changing %String Property to Wrapper Types
By Joe Fu
Embedded Python VS ObjectScript - Performance Testing Parsing XML
By Luis Angel Pérez Ramos
Having trouble connecting your Visual Studio Code to your IRIS instance via WebGateway? Here are some tips!
By Luis Angel Pérez Ramos
Ollama AI with IRIS
By Rodolfo Pscheidt
InterSystems IRIS data platform: Architecture
By Developer Community Admin
Workaround for scikit-learn 1.6.0 Incompatibility in IRIS 2024.3 AutoML
By Thomas Dyar
Create business processes with custom Python code: a quick guide
By Adam Coppola
2025.1 Modernizing Interoperability User Experience
By Aya Heshmat
How to write a message to the console log
By Hiroshi Sato
Reviews on Open Exchange - #50
By Robert Cemper
AI-Powered System Management with IRIS Agent
By Georgii Tatevosian
OMOP Odyssey - Vanna AI ( The Underworld )
By Ron Sweeney
Ask your IRIS server using an AI Chat
By Yuri Marx
Operate the database through dialogue
By lando miller
#InterSystems IRIS for Health
#IRIS contest
#Documentation
#Summit
Announcements
#InterSystems IRIS
Developing with InterSystems Objects and SQL – In Person (Boston, MA) March 24-28, 2025 / Registration space available
By Larry Finlayson
Deprecation of MultiValue in InterSystems IRIS 2025.1
By Daniel Palevski
Principal Architect and Integration Engineer
By varsha Vijay
[Video] Customizing the InterSystems FHIR Transformation Service
By Anastasia Dyubaylo
Using OpenEHR with InterSystems IRIS
By Jeff Fried
Early Access Program for new Table Partitioning feature
By Benjamin De Boe
[Video] A better way of buidling index for IRIS
By Anastasia Dyubaylo
InterSystems UK & Ireland Data Summit 2025
By Anastasia Dyubaylo
Reminder: Beta Testers Needed for Our Upcoming InterSystems IRIS Developer Professional Certification Exam
By Celeste Canzano
Open Call for User Insights Interviews
By Michelle Spisak
Managing InterSystems Servers – In-Person April 14-18, 2025 / Registration space available
By Larry Finlayson
Developer Meetup in Cambridge - GenAI & AI Agents [April 23 2025]
By Liubov Zelenskaia
General Availability of InterSystems IRIS, InterSystems IRIS for Health, and HealthShare Health Connect 2025.1
By Daniel Palevski
[Video] Quick wins with InterSystems IRIS Vector DB
By Anastasia Dyubaylo
[Video] Rapidly Create and Deploy Secure REST Services on InterSystems IRIS
By Anastasia Dyubaylo
#Developer Community Official
#Open Exchange
#IRIS contest
#Other
#Learning Portal
#InterSystems IRIS for Health
#Job Wanted
#InterSystems Ideas Portal
InterSystems Ideas News #20
By Irène Mykhailova
#Summit
Questions
#InterSystems IRIS
download files
By john.smith4237
PROTECT Error on POST request to FHIR server
By Riccardo Villa
Using Lists and ListFind within BPL
By Scott Roth
Debugging embedded python library
By Eduard Lebedyuk
Enable/Disable a scheduler task
By Krishnaveni Kapu
Running app outside container Linux
By john.smith4237
Dynamic SQL Queries with a ROUTINE (CODE) database mounted in read-only mode: ERROR #5002: ObjectScript error: ShowPlan+6^%apiSQL *sqlOrig
By Sylvain Guilbaud
EnsLib.JavaGateway.Service to remote JavaGateway
By Igor Pak
Request for Ensemble HL7 Project Guide with Certification
By Harshitha Balakrishna
git-source-control questions
By Fiona Griffiths
Docker IRIS_Community Mount
By Matthias Thon
Convert HTML to PDF
By john.smith4237
SQL Inbound Service write to internal Cache Table
By Scott Roth
SQL Query not transforming into class structure correctly
By Scott Roth
How do I get the name of the OS user used by the IRIS superserver?
By Evan Gabhart
2 [Utility.Event] ISCLOG: WebSocket [SendAsyncMessage]
By Lucas Galdino
Question about varstrings
By Alan Decourtray
How to use class property ot type %Persistent in non persistent class (page)
By PagerianDevelper
SLF4J error
By john.smith4237
Prometheus + Iris 2022.1
By Guilherme Silva
Starting & stopping Java Server programmatically
By john.smith4237
comparison library with renderers in IRIS, similar to Python's difflib ("Helpers for computing deltas")
By Mauricio Sthandier
Java Server timing out
By john.smith4237
"garbled text" due to incorrect character encoding or decoding.
By Fahima Ansari
Transforms in COS over DTL
By Paul Hula
VSCode - trying to use tag to call SELECT statement
By Scott Roth
AWS Files
By Touggourt
Distinct strings in MDX
By Dmitrij Vladimirov
How to tokenize a text using SentenceTransformer?
By Kurro Lopez
"Bad value for type long" on select from PostgreSQL via EnsLib.SQL.OutboundAdapter
By Andrew Sklyarov
irisowner getting in the way of irisusr when using $ZF(-100)
By Mauricio Aguirre
count(*) from a sql dynamic query
By Krishnaveni Kapu
%NOCHECK for Objects
By Matthew Giesmann
How to convert UTF8 special characters to the actual character
By Padmaja Konduru
Task scheduler
By Nezla
Object mapping between Pydantic and %RegisteredObject
By Timothy Leavitt
#Global Masters
#Caché
#InterSystems IRIS for Health
IO-Redirect package on Linux
By Phillip Wu
How to send the HL7 Batch messages over a SOAP webservice which takes 3 credentials(Username, Password, Org.ID) using IRIS Management Portal
By Lokesh Parakh
: Unable to import required dependencies: numpy: Error importing numpy: you should not try to import numpy from its source directory; please exit the numpy so
By Shashvati Dash
NodeJS Iris Package - Work on node Windows?
By John McBride
SDA3 to HL7 transform
By Sheetal Kairawala
%Net.SSH.Session - how to sudo
By Dmitrii Baranov
How do you use .NET SDK for setting an object to a list (IRISLIST?
By John McBride
ERROR #5911: Character Set 'iso-8859-4' not installed, unable to perform character set translation (EnsLib.HL7.Operation.HTTPOperation)
By Will
trying to convert SDA to FHIR get an error
By Bing Chen
Recover PROD to STAGING using .cbk
By Dmitrii Baranov
Calling iris merge from Ansible
By Tom Elmer
Expanding 1 HL7 segment into multiple based on interger value from a lookup table mapping
By Darin Kurth
HL7 OBX 5 modification resolved
By Gary M Lusso
Want to get text from the next line
By Fahima Ansari
Anyone experience hurdles when using the Production Validator toolkit?
By Andre Ribera
File with JSON records
By Michael Wood
HL7 CR/LF to create a blank space between segment -- resolved
By Gary M Lusso
get ClassMethod
By Krishnaveni Kapu
Working with multiple git repositories
By Dmitrii Baranov
#Ensemble
#HealthShare
#Health Connect
#Other
MSM FOR WINDOWS
By JASON PARKER
Discussions
March, 2025Month at a GlanceInterSystems Developer Community
Article
· Avr 1 4m de lecture

Ask your IRIS classes with Ollama, IRIS VectorDB and Langchain

If you want to know if a class about a topic already exists asking a simple natural language question, it is possible now. Download and run the application https://openexchange.intersystems.com/package/langchain-iris-tool to know all about your project classes in a Chat.

Installation:

$ git clone https://github.com/yurimarx/langchain-iris-tool.git
$ docker-compose build
$ docker-compose up -d

Using:

1. Open the URL http://localhost:8501

2. Check out the Settings button used to the Agent connect the InterSystems IRIS

3. Ask about your developed classes (e.g.: Are there classes that inherit from Persistent?)

UI 4

Solutions used:

  1. Ollama - private LLM and NLP Chat tool
  2. Lanchain - plataform to build AI agents
  3. Streamlit - Frontend framework
  4. InterSystems IRIS as a server to answer the questions about it

About Ollama

It is a free and on-premises LLM solution to be able running Generative AI with privacy and security because your data will be processed on-premises only. The project Ollama supports many models including mistral, Open AI models, Deepseek models and others running on-premises. This package used Ollama via docker compose with the model mistral:

ollama:
    image: ollama/ollama:latest
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            capabilities: ["gpu"]
            count: all  # Adjust count for the number of GPUs you want to use
    ports:
      - 11434:11434
    volumes:
      - ./model_files:/model_files
      - .:/code
      - ./ollama:/root/.ollama
    container_name: ollama_iris
    pull_policy: always
    tty: true
    entrypoint: ["/bin/sh", "/model_files/run_ollama.sh"] # Loading the finetuned Mistral with the GGUF file
    restart: always
    environment:
      - OLLAMA_KEEP_ALIVE=24h
      - OLLAMA_HOST=0.0.0.0

About Langchain:

Langchain it is a framework to build GenAI applications easily. The Langchain has the concept of tool. Tools are plug-ins (RAG applications) used by Langchain to complement the work of the LLMs. This application implemented a langchain tool to ask management and development questions for your IRIS server:

from langchain.llms import Ollama
from langchain.chains import RetrievalQA
from langchain.document_loaders import CSVLoader
from langchain.embeddings import OllamaEmbeddings
from langchain_iris import IRISVector

def get_insights(question, csv_file, iris_conn, collection_name):
    
    # Load and process the CSV data    
    loader = CSVLoader(csv_file)
    documents = loader.load()

    llm = Ollama(
        base_url="http://ollama:11434", 
        model="mistral", 
        temperature=0,
    )

    # Create embeddings
    embeddings = OllamaEmbeddings(model="mistral", base_url="http://ollama:11434", temperature=0)

    db = IRISVector.from_documents(
        embedding=embeddings, 
        documents=documents,
        connection_string=iris_conn,
        collection_name=collection_name,
        pre_delete_collection=True
    )

    qa = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=db.as_retriever())
    
    return qa({"query": question})

About Streamlit:

The streamlit solution it is used to develop frontends using python language. This application has a streamlit chat application to interact with the Ollama, Langchain and IRIS and get relevant responses:

import pandas as pd
import streamlit as st
from sqlalchemy import create_engine
import langchain_helper as lch

username = "_system"
password = "SYS"
hostname = "iris"
port = 51972
webport = 52773
namespace = "USER"
st.set_page_config(page_title="InterSystems IRIS Classes Demo", page_icon="📜")

st.title("Langchain IRIS Classes Chat")

with st.popover("Settings"):
    with st.spinner(text="Connecting to the IRIS classes"):
        engine = create_engine("iris://" + username + ":" + password + "@" + hostname + ":" + str(port) + "/" + namespace)
        connection  = engine.connect()
        query = 'select * from %Dictionary.ClassDefinition where substring(ID,1,1) <> \'%\' and  Copyright is null'
        df = pd.read_sql(query, con=connection)
        df.to_csv("classes.csv")
    
    username = st.text_input("Username:", username)
    password = st.text_input("Password:", password)
    hostname = st.text_input("Hostname:", hostname)
    port = int(st.text_input("Port:", port))
    webport = int(st.text_input("Web port:", webport))
    namespace = st.text_input("Namespace:", namespace)

            

# User query input
query = st.text_input(label="Enter your query")

# Submit button
if st.button(label="Ask IRIS Classes", type="primary"):
    
    with st.spinner(text="Generating response"):
        iris_conn_str = f"iris://{username}:{password}@{hostname}:{port}/{namespace}"
        response = lch.get_insights(query, "classes.csv", iris_conn=iris_conn_str, collection_name="classes")
        st.write(response['result'])
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Annonce
· Avr 1

Récapitulation de la communauté des développeurs, mars 2025

Bonjour et bienvenue à la récapitulation de la Communauté des Développeurs mars 2025.
Statistiques générales
✓ Nouvelles publications 20 publiées le mars :
 9 nouveaux articles
 9 nouvelles annonces
 2 nouvelles questions
✓ Nouveaux membres 4 ayant rejoint le mars
✓ Publications 1,133 publiées depuis le début
✓ Membres 166 ayant rejoint depuis le début
Meilleures publications
Les meilleurs auteurs du mois
Articles
#InterSystems IRIS
 
#InterSystems IRIS for Health
 
Annonces
#InterSystems IRIS
 
#Communauté des développeurs officielle
 
Questions
Mars, 2025Month at a GlanceInterSystems Developer Community
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Question
· Avr 1

GENERATE JWT / OAUTH2.0 SIGNATURE

 JSON Web Token (JWT) Authentication

Hi Everyone,

I would like to share the code and step-by-step instructions/or guideline for generating a JWT (JSON Web Token) signature, as well as how to test it using Postman / HealthConnect.

JWT is an open standard (RFC 7519) that defines a compact, URL-safe method for securely transmitting information between parties in the form of a JSON object.

Structure of a JWT:

A JWT consists of three parts, separated by dots (.):

Header

.

Payload

.

Signature

 

  1. Header: The header contains about the token, specifying its type and the signing algorithm used. It typically includes the following fields:
  • alg (Algorithm): Defines the signing algorithm (e.g., HMAC SHA256, RSA, etc.).
  • typ (Type): Specifies the token type, which is always JWT.
  • kid (Key ID): Identifies the key used for signature verification.

Example:

{

  "alg": "HS256",  

  "typ": "JWT",

   “kid”: “my-key”

}

 

  1. Payload: The payload contains the claims. It typically includes the following fields:
  • iss  -(Issuer) – Issuer of the token.
  • Sub - (Subject) – Subject of the JWT (user identifier).
  • Aud - (Audience) – Intended recipient of the token (JWT).
  • Exp - (Expiration time) – Token expiry timestamp.
  • jti – (Unique) - Token identifier.
  • iat  - (Issued At) – When the token was created.
  • etc

Example:

{

  "iss": "your issuer",

   "sub": "your subject",

   "aud": “your audience”,

   “jti”: “your jti”,

  “exp”: “your expiry time”

}

  1. Signature: it is created by encoding the header and payload, then signing them using a private or secret key. It ensures the integrity and authenticity of the token.

Signature= header + payload and a private or secret key

Example:

{

 HMACSHA256( base64UrlEncode(header) +

"."

+  base64UrlEncode(payload),

secret key)

}

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJVadQssw5c

PROCESS

Step 1: Generate Public and Private Keys

To generate a public-private key pair, you can use either OpenSSL or an online JSON Web Key (JWK) generator like mkjwk.

Using mkjwk (JSON Web Key Generator): mkjwk - JSON Web Key Generator

  • Open the mkjwk tool.
  • Set the following parameters:
    • Key Size: Based on your requirements (e.g., 4096 bits).
    • Key Use: Signature.
    • Algorithm: Select the desired algorithm (e.g., RS512).
    • Key ID (kid): Choose a name for the key identifier (this key value is required for code, see screenshot -1, below.).
    • Show X.509 Certificate: Enable this option to generate an X.509 certificate if needed (e.g. “Yes”)
  • This will generate both a public key and a private key for signing and verification.

 

Step 2: Generate and Sign a JWT Using Cache Object Script

The code implementation for this process is provided in Screenshot 1 below.

Screenshot 1: Cache Object Script Code

 

Step 3: Execute the Method – see screenshot 2 below.

Screenshot 2 – Method Execution.

 

Step 4: After executing the method in Step 3, copy the Base64-encoded output from the result displayed in Screenshot 2.

Step 5: Test in Postman - Follow these steps to send a request using Postman:

  1. Open Postman (if you don’t have it, just download and install it)
  2. Select the “POST” method and enter the appropriate “URL”.
  3. Navigate to the “Body” section, then add the required key-value pairs (needed to set up the key and value)
  4. In the "client_assertion" field, paste the Base64-encoded data from Step 4.
  5. Then “Send” to submit the request.

You should receive a response containing the access_token, expiration time, and other details based on - setup.

Screenshot 3: Postman Output

 

I hope this guide helps you. Once you have successfully generated and tested the JWT, you can proceed with configuring it in the HealthConnect Management Portal based on your requirements.

Thank you.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Article
· Avr 1 19m de lecture

Virtualização de grandes bancos de dados - Planejamento de capacidade de CPU VMware

Frequentemente, clientes, fornecedores ou equipes internas me pedem para explicar o planejamento de capacidade de CPU para para grandes bancos de dados de produção rodando no VMware vSphere.

Em resumo, existem algumas práticas recomendadas simples a seguir para dimensionar a CPU para grandes bancos de dados de produção:

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