Clear filter
Announcement
Carmen Logue · Aug 30, 2023
InterSystems Reports version 23.2 is now available from the InterSystems Software Distribution site in the Components section. They are labeled InterSystems Reports Designer and InterSystems Reports Server and are available for Mac OSX, Windows or Linux. insightsoftware elected to move from a numerical number plan to a year-based numbering plan in 2023 so there are no versions 20 through 22; versions increase from Version 19 to Version 23. Note that the reports Server docker image will be available at a later date from the Container Repository.
This new release brings along some great enhancements included with our partner insightsoftware's Logi Report Version 23.2 including:
Increased functionality in the page report template editor, Report Studio, for additional editing from the Reports Server. This is part of a long term strategy to enable report designers to make modifications to the reports using permissions-based access to editing on the Reports Server.
Additional bookmark management in the "My Bookmarks" folder, such as running bookmarks directly or viewing the parameter and filter information. Bookmarks allow customers to save their filters and parameters for easy access to their customized view of a shared report.
For more information about these features and others, see this feature update from insightsoftware.
For more information about InterSystems Reports, see the InterSystems documentation and learning services content.
Announcement
Anastasia Dyubaylo · Sep 7, 2023
Hello and welcome to the Developer Ecosystem Summer News!
This summer we've had a lot of online and offline activities in the InterSystems Developer Ecosystem. In case you missed something, we've prepared for you a selection of the hottest news and topics to catch up on!
News
💡 InterSystems Ideas News #7
🔥 New Feature on Open Exchange: Explore App Dependencies
🔥 GitLab is Now Supported on Open Exchange
📝 InterSystems Developer Hub - new dev portal is ready!
📝 System-level default Peer Review Document added to CCR
📝 InterSystems Classroom Training will now be issuing Digital Badges
📝 InterSystems Supported Platforms Update Q3-2023
📝 InterSystems Supported Platforms Update Q2-2023
📝 Developer Access Program for InterSystems IRIS Cloud SQL and InterSystems IRIS Cloud IntegratedML
♨ Upcoming InterSystems Container Changes
♨ Aug 1, 2023 – Alert: ECP Application Server Hang and Dejournaling Hang
♨ June 13, 2023 - Advisory: Increased Process Memory Usage
♨ New Organization Dashboard launched within CCR!
♨ New Timeout Introduced for Client-bound ItemSets within CCR
Contests & Events
🏔️ Global Summit 2023
Announcement
Day 1, 2, 3
Keynotes
Developer Ecosystem Session
InterSystems Grand Prix Contest 2023
Contest Announcement
Kick-off Webinar
Technology Bonuses
Time to Vote
Technical Bonuses Results
Winners Announcement
Meetup with Winners
The 2nd InterSystems Idea-A-Thon
Announcement
Winners
⏯️ [Webinar] [Webinar in Hebrew] Introducing VS Code, and Moving from InterSystems Studio
⏯️ [Webinar] Migrating to VS Code from Studio
☕️ [Meetup] Demos of Latest Predictive Analytics technology
☕️ [Meetup] Generative AI Use Cases in Healthcare
🧑🤝🧑 [Roundtable] Generative AI Use Cases in Healthcare
🧑🤝🧑 [Roundtable] Optimizing your dev practices
Latest Releases
⬇️ Developer Community Release, July 2023
⬇️ Developer Community Release, June 2023
⬇️ InterSystems IRIS, IRIS for Health, & HealthShare Health Connect 2023.1.1 are available
⬇️ InterSystems announces General Availability of InterSystems IRIS, InterSystems IRIS for Health, & InterSystems Studio 2023.2
⬇️ InterSystems IRIS, IRIS for Health, & HealthShare Health Connect 2023.2 developer previews
Preview 3
Preview 4
Preview 5
Preview 6
Preview 7
⬇️ The InterSystems Supply Chain Orchestrator and InterSystems IRIS for Supply Chain are now Generally Available
⬇️ IKO (InterSystems Kubernetes Operator) 3.6 Release Announcement
⬇️ InterSystems IRIS Adaptive Analytics 2023.2 Now Available
⬇️ InterSystems Reports 23.2 Release Announcement
Best Practices & Key Questions
🔥 Best Practices of Summer 2023
Azure Load Balancer (ILB) with HealthShare
IRIS Data to Google Big Query - InterSystems Cloud SQL via Dataflow
InterSystems IRIS Interoperability with Embedded Python
Simplify Python Packages with zpip, an irispython pip wrapper
InterSystems Embedded Python in glance
Tutorial how to analyze requests and responses received and processed in webgateway pods
Using OAuth 2.0 / OIDC for single sign-on to an IRIS REST application
Machine Learning in IRIS using the HuggingFace API and/or ml models in local ( using Python )
❓ Key Questions of Spring 2023: June, July, August
People and Companies to Know About
🌟 Global Masters of Summer 2023: June, July, August
Job Opportunities
💼 Looking for an InterSystems Developer and Startup Evangelist 🔥
💼 Remote Job Oportinity - IRIS for Health
💼 Hybrid: InterSystems Application Developer
💼 Hybrid InterSystems Cache Database Administrator
💼 Remote: InterSystems Ensemble Experience
So...
Here is our take on the most interesting and important things!
What were your highlights from this past season? Share them in the comments section and let's remember the fun we've had! Thank you for all of your hard work ... it's amazing to see how far this ecosystem has come in the past couple of years :) Thanks for your constant supportive feedback, Ben! 😊 Awesome! So many interesting things!
Article
Evgeny Shvarov · Sep 3, 2023
While starting the development with IRIS we have a distribution kit or in case of Docker we are pulling the docker image and then often we need to initialize it and setup the development environment. We might need to create databases, namespaces, turn on/off some services, create resources. We often need to import code and data into IRIS instance and run some custom code to init the solution.
And there plenty of templates on Open Exchange where we suggest how to init REST, Interoperability, Analytics, Fullstack and many other templates with ObjectScript. What if we want to use only Python to setup the development environment for Embedded Python project with IRIS?
So, the recent release of Embedded Python template is the pure python boilerplate that could be a starting point for developers that build python projects with no need to use and learn ObjectScript. This article expresses how this template could be used to initialize IRIS. Here we go!
Ok!
Creating Database and Namespace
Often we need to create database and namespace. This could be done with merge cpf functionality of IRIS, and here is the merge file that does the thing:
[Actions]
CreateResource:Name=%DB_IRISAPP_DATA,Description="IRISAPP_DATA database"
CreateDatabase:Name=IRISAPP_DATA,Directory=/usr/irissys/mgr/IRISAPP_DATA,Resource=%DB_IRISAPP_DATA
CreateResource:Name=%DB_IRISAPP_CODE,Description="IRISAPP_CODE database"
CreateDatabase:Name=IRISAPP_CODE,Directory=/usr/irissys/mgr/IRISAPP_CODE,Resource=%DB_IRISAPP_CODE
CreateNamespace:Name=IRISAPP,Globals=IRISAPP_DATA,Routines=IRISAPP_CODE,Interop=1
ModifyService:Name=%Service_CallIn,Enabled=1,AutheEnabled=48
ModifyUser:Name=SuperUser,PasswordHash=a31d24aecc0bfe560a7e45bd913ad27c667dc25a75cbfd358c451bb595b6bd52bd25c82cafaa23ca1dd30b3b4947d12d3bb0ffb2a717df29912b743a281f97c1,0a4c463a2fa1e7542b61aa48800091ab688eb0a14bebf536638f411f5454c9343b9aa6402b4694f0a89b624407a5f43f0a38fc35216bb18aab7dc41ef9f056b1,10000,SHA512
Merge cpf contains Actions which in this case create dabasases IRISAPP_DATA and IRISAPP_CODE for data and code respectively, the related IRISAPP namespace to access it and the related resources %IRISAPP_DATA and %IRISAPP_CODE" to manage the access.
This Merge cpf also enables Callin service to make Embedded python work via ModifyService action:
ModifyService:Name=%Service_CallIn,Enabled=1,AutheEnabled=48
The last action is an example how you can securely set user's password, using ModifyUser action:
ModifyUser:Name=SuperUser,PasswordHash=a31d24aecc0bfe560a7e45bd913ad27c667dc25a75cbfd358c451bb595b6bd52bd25c82cafaa23ca1dd30b3b4947d12d3bb0ffb2a717df29912b743a281f97c1,0a4c463a2fa1e7542b61aa48800091ab688eb0a14bebf536638f411f5454c9343b9aa6402b4694f0a89b624407a5f43f0a38fc35216bb18aab7dc41ef9f056b1,10000,SHA512
The password hash here can be generated via another docker image from InterSystems, e.g. with the following line called in a terminal (learn more about passwordhash):
docker run --rm -it containers.intersystems.com/intersystems/passwordhash:1.1 -algorithm SHA512 -workfactor 10000
merge command is could be called in Dockerfile like this:
iris merge IRIS merge.cpf && \
Other types of merge actions and different settings available for IRIS could be found in documentation.
Running an Arbitrary Init Code
Another popular use case is to run an arbitrary custom code to load data, init variables and load code from the repository e.g. in a form of IPM package. Usually in IRIS templates there is a special file iris.script that contains such a code in form of ObjectScript. I kept the iris.script file in the repository just to demo how it have been used with ObjectScript.
In this python template you can find the example of such init code in a iris_script.py file. Let's see what's there:
import glob
import os
import iris
import pandas as pd
from sqlalchemy import create_engine
from iris import ipm
# switch namespace to the %SYS namespace
iris.system.Process.SetNamespace("%SYS")
# set credentials to not expire
iris.cls('Security.Users').UnExpireUserPasswords("*")
# switch namespace to IRISAPP built by merge.cpf
iris.system.Process.SetNamespace("IRISAPP")
# load ipm package listed in module.xml
#iris.cls('%ZPM.PackageManager').Shell("load /home/irisowner/dev -v")
assert ipm('load /home/irisowner/dev -v')
# load demo data
engine = create_engine('iris+emb:///')
# list all csv files in the demo data folder
for files in glob.glob('/home/irisowner/dev/data/*.csv'):
# get the file name without the extension
table_name = os.path.splitext(os.path.basename(files))[0]
# load the csv file into a pandas dataframe
df = pd.read_csv(files)
# write the dataframe to IRIS
df.to_sql(table_name, engine, if_exists='replace', index=False, schema='dc_demo')
The code is rather self-explanatory and it has the demo of changing namespaces, loading repo code in form of IPM module, importing csv files that contained in /data folder of the repo using sqlalchemy lib.
What Does the Template do?
Basically this template provides examples how can Embedded Python by used with IRIS.
1. Calling Python From ObjectScript
To demo it we have several ObjectScript classes in the repo.
To test the approach open IRIS terminal and run:
IRISAPP>d ##class(dc.python.test).Hello()
World
this test demoes how you can use functions in sample.py code in IRIS using Embedded Python.
2. Refer to IRIS from python
To test this you can run irisapp.py that performs different operations with IRIS database. To run all the test start terminal session in docker:
# attach to the running IRIS container
docker-compose exec iris bash
# run the script
$ irispython ./python/irisapp.py
3. Building Python Flask REST API that works with IRIS
There is also an example of REST api in python made with Flask that you could use in your applications that you can find in /python/flask/app.py.
To start Flask REST api do:
$ docker-compose exec iris bash
# irispython /python/flask/app.py
Then you can test the server at http://localhost:55030/.
And here are two examples on how to add a new record in IRIS and read a record:
POST http://localhost:55030/persistentclass
Content-Type: application/json
Accept: application/json
{
"test": "toto"
}
Result:
json
{
"id": 1,
"test": "toto"
}
GET http://localhost:55030/persistentclass/1
Accept: application/json
Result:
json
{
"id": 1,
"test": "toto"
}
4. Deployment
The deployment of the solution to IRIS systems can be performed via IPM. For that purpose we have an IPM module.xml that will deliver ObjectScript and Python files to a target IRIS system from an IPM Registry you will publish module at.
Thanks a lot to @Guillaume.Rongier7183 and @Dmitry.Maslennikov who helped a lot to create the template and make "Pure Python" approach possible.
There are more "radical" approaches in organizing such templates - here is the "no dockerfile" and "no objedctscript" sample by @Dmitry.Maslennikov ,
here is "embedded python" template by @Guillaume.Rongier7183. 💡 This article is considered as InterSystems Data Platform Best Practice.
Announcement
Anastasia Dyubaylo · Sep 23, 2024
Hi Community,
It's voting time! Cast your votes for the best applications in our Developer Tools Contest:
🔥 VOTE FOR THE BEST APPS 🔥
How to vote? Details below.
Experts nomination:
InterSystems experienced jury will choose the best apps to nominate the prizes in the Experts Nomination.
Community nomination:
For each user, a higher score is selected from two categories below:
Conditions
Place
1st
2nd
3rd
If you have an article posted on DC and an app uploaded to Open Exchange (OEX)
9
6
3
If you have at least 1 article posted on DC or 1 app uploaded to OEX
6
4
2
If you make any valid contribution to DC (posted a comment/question, etc.)
3
2
1
Level
Place
1st
2nd
3rd
VIP Global Masters level or ISC Product Managers
15
10
5
Ambassador GM level
12
8
4
Expert GM level or DC Moderators
9
6
3
Specialist GM level
6
4
2
Advocate GM level or ISC Employees
3
2
1
Blind vote!
The number of votes for each app will be hidden from everyone. Once a day we will publish the leaderboard in the comments to this post.
The order of projects on the contest page will be as follows: the earlier an application was submitted to the competition, the higher it will be on the list.
P.S. Don't forget to subscribe to this post (click on the bell icon) to be notified of new comments.
To take part in the voting, you need:
Sign in to Open Exchange – DC credentials will work.
Make any valid contribution to the Developer Community – answer or ask questions, write an article, contribute applications on Open Exchange – and you'll be able to vote. Check this post on the options to make helpful contributions to the Developer Community.
If you change your mind, cancel the choice and give your vote to another application!
Support the application you like!
Note: contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases! So! After the first day of the voting, we have the following results:
Community Nomination, Top 5
iterm by @Dmitry.Maslennikov sql-embeddings by @Henrique IPM in VS Code by @John.Murray DX Jetpack for VS Code by @John.Murray Code-Scanner by @Robert.Cemper1003
Expert Nomination, Top 4
iterm by @Dmitry.Maslennikov sql-embeddings by @Henrique IPM in VS Code by @John.Murray DX Jetpack for VS Code by @John.Murray
Experts, we are waiting for your votes! 🔥 Voting for the InterSystems Developer Tools Contest 2024 goes ahead!
Here are the results at the moment:
Community Nomination, Top 5
iterm by @Dmitry Maslennikov IPM in VS Code by @John Murray DX Jetpack for VS Code by @John Murray sql-embeddings by @Henrique Dias Code-Scanner by @Robert Cemper
➡️ Voting is here.
Expert Nomination, Top 4
iterm by @Dmitry Maslennikov sql-embeddings by @Henrique Dias IPM in VS Code by @John Murray DX Jetpack for VS Code by @John Murray
➡️ Voting is here. Hi Developers!
At the moment we can see the next results of the voting:
Community Nomination, Top 5
iterm by @Dmitry Maslennikov IPM in VS Code by @John Murray DX Jetpack for VS Code by @John Murraysql-embeddings by @Henrique Dias Code-Scanner by @Robert Cemper
➡️ Voting is here.
Expert Nomination, Top 5
iterm by @Dmitry Maslennikov DX Jetpack for VS Code by @John Murray sql-embeddings by @Henrique Dias IPM in VS Code by @John Murray IOP REST Client Framework by @Antoine.Dh
➡️ Voting is here.
Devs, there are only a few days left to the end of the voting period!Don't forget to check for Technological Bonuses, you can gain some extra points by them! Hey Devs!
Here are the results at the moment!
Community Nomination, Top 5
iterm by @Dmitry Maslennikov IRIS-Test-Data-Generator by @Dylan.ColeIPM in VS Code by @John Murray sql-embeddings by @Henrique Dias DX Jetpack for VS Code by @John Murray
➡️ Voting is here.
Expert Nomination, Top 5
iterm by @Dmitry Maslennikov sql-embeddings by @Henrique Dias iris-ccd-devtools by @Chi.Nguyen-RettigIOP REST Client Framework by @Antoine.DhDX Jetpack for VS Code by @John.Murray
➡️ Voting is here. Last day of voting! ⌛
Please check out the Contest Board.Our contestants need your votes! 📢
Announcement
Carmen Logue · Sep 6, 2024
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!
Announcement
Anastasia Dyubaylo · Sep 11, 2024
Hello and welcome to the Developer Ecosystem Summer News!
This summer was full of exciting activities in the InterSystems Developer Ecosystem. In case you missed something, we've prepared for you a selection of the hottest news and topics to catch up on!
News
🎇 Developer Community AI is here!
💡 InterSystems Ideas News #14 and #15
📝 New on Open Exchange: Top contributors, List view and Setup of release date
📝 Windows upgrade removes Studio in 2024.2
🛑 Alert: Database Corruption with Multi-Volume Databases after Truncation
📝 MacOS Only - End-of-maintenance for Cache & Ensemble on MacOS
📝 InterSystems Platforms Update Q3-2024
Contests & Events
🎆 Global Summit 2024 (part 1 and part 2)
InterSystems Python Contest
Contest Announcement
Kick-off Webinar
Technology Bonuses
Time to Vote
Technical Bonuses Results
Winners Announcement
Meetup with Winners
Code Golf
Print every character your program doesn't have
3rd InterSystems Ideas Contest
Contest Announcement
Winners announcement
Developer Community AI Sweepstakes
Sweepstakes announcement
Winner announcement
🤝 Developer Meetup in Cambridge [AI, LLM, Python] August 28, 2024
🤝 Meetup in Boston: Innovating on Health Data [AI Startup Showcase & intro to FHIR]
🚰 [Water Cooler Talk] Developer Copilots: yay or nay?
Latest Releases
⬇️ VS Code release June 2024 (version 1.91)
⬇️ VS Code release July 2024 (version 1.92)
⬇️ Git-source-control launches release 2.4.0 with a new basic mode
⬇️ InterSystems Reports version 24.1 Release Announcement
⬇️ Announcing availability of Adaptive Analytics 2024.1
⬇️ IAM 2.8.4.10 & 3.4.3.10 Release Announcement
⬇️ IAM 2.8.4.11 & 3.4.3.11 Release Announcement
⬇️ Maintenance Release 2024.1.1 of InterSystems IRIS, IRIS for Health, & HealthShare Health Connect is now available
⬇️ InterSystems announces General Availability of InterSystems IRIS, InterSystems IRIS for Health, & HealthShare Health Connect 2024.2
⬇️ InterSystems IRIS & IRIS for Health 2024.3 developer preview is now available
Best Practices & Key Questions
🔥 Best practices
DB.Changelog: Keeping track of database changes using SQL Triggers and CodeMode = objectgenerator
Feedback : Using embedded python daily for more than 2 years
Sending WhatsApp messages from InterSystems IRIS production
Continuous Delivery of your InterSystems solution using GitLab - Part XII: Dynamic Inactivity Timeouts
Application Metrics for HealthShare
Data Tagging in IRIS Using Embedded Python and the OpenAI API
FHIR json property order part II
Dynamic SQL Best Practices (or "How to Avoid Both SQL Injection Vulnerabilities and Spaghetti Code")
"What's taking so long?" - Process Sampling for Performance Analysis
Functional indices for lightning-fast queries on many-to-many relationship tables
Using an Azure bot to access IRIS
❓ Key Questions: June, July, August
People and Companies to Know About
👨💻 Celebrating a Champion of Our Developer Community
Job Opportunities
💼 Looking for a Senior DB Manager for IRIS/Cache - Remote, Full-Time
💼 REMOTE: Looking for InterSystems skills in HL7+CCDA, SDA3,FHIR,IRIS
💼 Remote Opportunity for a Senior Database Manager at a State Agency (2.5 yr Contract)
💼 Seeking Interoperability Engineer for Healthshare Connect Cloud and Epic Ambulatory
💼 Looking for Integration Engineer expertise in IRIS
💼 Looking for IRIS for Health Engineers
💼 Looking for InterSystems Cache developer [Remote, Part time]
So...
Here is our take on the most interesting and important things!
What were your highlights from this past season? Share them in the comments section and let's remember the fun we've had!
Announcement
Anastasia Dyubaylo · Oct 23, 2024
Drumroll, please...
🎉 The InterSystems Developer Community has officially surpassed 20,000 registered members! 🎉
But that’s not all – we’ve also achieved some impressive milestones:
📝 21,500 published posts
👁 10,000,000 views
We want to take a moment to celebrate with all of you who have made this possible!
In what feels like the blink of an eye, our community has EXPLODED in size 🤯. We’ve doubled in size in just two years' time! It’s not just numbers — it’s the impact YOU are making, and we couldn’t be more grateful!
This phenomenal growth is all thanks to you — our amazing community of developers, contributors, and trailblazers! Whether you're sharing your expertise and next-level insights, asking thought-provoking questions, or collaborating with others, you are the heartbeat of this Community. ❤️🔥 You’re transforming this platform into a powerhouse of ideas and solutions, and we are here for it!
🌍🫂 With six regional communities in different languages (EN, ES, PT, JP, CN, FR), we’re uniting developers from all over the globe, making the InterSystems Developer Community a truly global hub.
👏 A special shoutout to our superstar moderators, content managers, and admins who keep this incredible machine running smoothly. Your dedication keeps the gears turning, and we couldn’t do it without you!
But guess what? This is just the beginning!We’re excited to keep growing, learning, and innovating TOGETHER. Whether you're new to the community or a long-time member, there’s so much more ahead for all of us!
THANK YOU!
---
Sincerely yours,InterSystems Developer Community Team
Announcement
Derek Robinson · Nov 21, 2024
Hi, Community!
Looking to streamline your data management? See how this fully managed, cloud-based solution can help:
Exploring InterSystems Data Fabric Studio
In this video, you will get an introduction to InterSystems® Data Fabric Studio™ and see how it helps you:
Quickly access your data.
Unify data from multiple sources.
Create data visualizations.
...all using an intuitive user interface!
Announcement
Bob Kuszewski · Dec 2, 2024
Welcome to the Q4’2024 quarterly platforms update. I hope that your 2024 has been incredible and that 2025 is even better.
If you’re new to these updates, welcome! This update aims to share recent changes as well as our best current knowledge on upcoming changes, but predicting the future is tricky business and this shouldn’t be considered a committed roadmap.
With that said, on to the update…
InterSystems IRIS Production Operating Systems and CPU Architectures
Red Hat Enterprise Linux
Previous Updates
We’ve completed minor OS certification for RHEL 9.4 & 8.10 on IRIS 2024.1 without incident.
Upcoming Changes
The next major update for RHEL will be RHEL 10 which is expected in Q2 of 2025.
Short-term-supported 9.5 & 8.11 were released earlier this month, and we’ve started minor OS certification on IRIS 2024.1.
Further reading: RHEL Release Page
Ubuntu
Previous Updates
We’ve completed minor OS certification for Ubuntu 22.04.3 on IRIS 2024.1 without incident
Upcoming Changes
We’re currently doing minor OS certification on Ubuntu 24.04.1. So far, so good.
Further Reading: Ubuntu Releases Page
SUSE Linux
Previous Updates
SUSE Linux Enterprise Server 15 SP6 was released in May. The release notes can be found here.
General Support from SUSE for Linux Enterprise Server 15 SP3 came to an end on 12/31/2022, but extended security support will continue until December, 2025.
Further Reading: SUSE lifecycle
Oracle Linux
No updates
Further Reading: Oracle Linux Support Policy
Microsoft Windows
Recent Changes
Windows Server 2025 was released earlier this month and we’ve begun the process of adding support for the platform.
Upcoming Changes
Microsoft has pushed back the anticipated release date for Windows 12 to sometime in 2025. We’ll start the process of supporting the new OS after it’s been released.
Further Reading: Microsoft Lifecycle
AIX
Recent Changes
IRIS 2024.3 and up will only support OpenSSL 3. NOTE: This means that 2024.2 is the last version of IRIS that has both OpenSSL 1 and OpenSSL 3 kits. In IRIS 2023.3, 2024.1, & 2024.2, we provided two separate IRIS kits – one that supports OpenSSL 1 and one that supports OpenSSL 3. Given the importance of OpenSSL 3 for overall system security, we’ve heard from many of you that you’ve already moved to OpenSSL 3.
Further Reading: AIX Lifecycle
Containers
Previous Updates
We changed the container base image from Ubuntu 22.04 to Ubuntu 24.04 with IRIS 2024.2
We’re considering changes to the default IRIS container to, by default, have internal traffic (ECP, Mirroring, etc) on a different port from potentially externally facing traffic (ODBC, JDBC, etc). If you have needs in this area, please reach out and let me know.
InterSystems IRIS Development Operating Systems and CPU Architectures
MacOS
Upcoming Changes
Apple has released MacOS 15 and we are planning support for it in IRIS 2025.1
InterSystems Components
Previous Updates
InterSystems API Manager 2.8.4.11 & 3.4.3.11 have been released. If you’re using IAM, please upgrade soon.
InterSystems Reports 24.1 has been released.
Caché & Ensemble Production Operating Systems and CPU Architectures
Previous Updates
A reminder that the final Caché & Ensemble maintenance releases are scheduled for Q1-2027, which is coming up sooner than you think. See Jeff’s excellent community article for more info.
InterSystems Supported Platforms Documentation
The InterSystems Supported Platforms documentation is the definitive source information on supported technologies.
IRIS 2024.1 Supported Server Platforms
IRIS 2023.1 Supported Server Platforms
IRIS 2022.1 Supported Server Platforms
Caché & Ensemble 2018.1 Supported Server Platforms
… and that’s all folks. Again, if there’s something more that you’d like to know about, please let us know.
Article
Kristina Lauer · Jan 23
Updated 02/27/25
Hi Community,
Looking for a way to onboard your team with InterSystems IRIS® for Health? Unlock the full potential of this platform by using these InterSystems learning resources. With a mix of online and in-person training, you can support various roles in your organization and equip your team for success.
Onboarding Resources for Every Role
Developers
Online Learning Program: Getting Started with InterSystems IRIS for Health for Coders (21h)
Classroom Training: Developing with InterSystems Objects and SQL and Building and Managing HL7 Integrations (5 days each)
System Administrators
Learning Path: InterSystems IRIS Management Basics (10h)
Classroom Training: Managing InterSystems Servers (5 days)
Data Analysts
Video: Introduction to Analytics with InterSystems (6m)
Learning Paths for every tool:
Analyzing Data with InterSystems IRIS BI
Delivering Data Visually with InterSystems Reports (1h 15m)
Build Data Models Using Adaptive Analytics (2h 15m)
Classroom Training: Using InterSystems Embedded Analytics (5 days)
System Integrators
Learning Program: Getting Started with InterSystems IRIS for Health for Integrators (14h)
Classroom Training: Developing System Integrations and Building and Managing HL7 Integrations (5 days each)
Learning Paths for integrators working with HL7® FHIR®: Building Basic FHIR Integrations with InterSystems (4h) and FHIR-Enabling Your Applications with InterSystems (3h 30m)
Project managers
Watch product overview videos.
Read success stories to get inspired—see how others are using InterSystems products!
Other Resources from Learning Services
💻 Online Learning: Register for free at learning.intersystems.com to access self-paced courses, videos, exercises, task-based learning paths, role-based programs, and more.
👩🏫 Classroom Training: Sign up for live, in-person or virtual training, or request a private course for your team. Find details at classroom.intersystems.com.
📘 InterSystems IRIS documentation: Comprehensive reference materials, guides, and how-to articles. Explore the documentation.
📧 Support: For technical support, email support@intersystems.com.
Certification Opportunities
Once you and your team members have gained enough training and experience, get certified according to your role!
Learn from the Community
💬Engage in learning on the Developer Community: Chat with other developers, post questions, read articles, and stay updated with the latest announcements. See this post for tips on how to learn on the Developer Community.
Article
Anila Kosaraju · Feb 5
Interoperability of systems ensures smooth workflow and management of data in today's connected digital world. InterSystems IRIS extends interoperability a notch higher with its Embedded Python feature, which lets developers seamlessly integrate Python scripts into the IRIS components, like services, operations, and custom functions.
Why Embedded Python in IRIS?Embedded Python brings the flexibility of Python into the powerful world of InterSystems IRIS and provides the following: Access to Python Libraries: Leverage popular libraries such as pandas, NumPy, and requests for advanced data processing.Ease of Use: Python simplifies the implementation of complex logic.Efficient Interoperability: Develop services, operations, and transformations directly within IRIS, reducing the need for external tools.Below is the code I tried to implement for a python business operation:
from iris import irisnative
class SamplePythonOperation: def on_message(self, request): # Connect to IRIS conn = irisnative.createConnection("localhost", 1972, "USER", "_SYSTEM", "SYS") iris_obj = irisnative.createIRIS(conn)
# Log the request message iris_obj.set("Received: " + request.get("MessageText"), "MyApp", "Log")
# Process the request response = "Hello, " + request.get("MessageText") return {"Result": response}
Embedded Python in InterSystems IRIS allows developers to leverage the flexibility of Python with the robustness of IRIS for interoperability solutions. In transforming data, building APIs, or integrating external systems, traditional expectations are that Embedded Python is a revolution for modern applications.
Use Embedded Python today, and discover new avenues of seamless interoperability! wow, nice article, can you provide more information about how you register this python class into a production ?
for the more, can you tell me what is the difference between embedded python and irisnative, i'm a bit confused. Thanks! Yes I can tell you that. For registering a class into a production,
Navigate to Interoperability > Productions.
Open or create a new production.
Add a new Business Operation.
Select the Python Adapter.
In the Settings, specify your Python class name
The adapter will invoke the method of the Python class whenever the operation receives input.
And the difference between them is- Embedded Python runs natively within InterSystems IRIS, allowing you to build and integrate IRIS components like services or operations directly using Python. In contrast, irisnative is an external Python library for connecting to and interacting with an IRIS database from outside the IRIS environment, such as standalone scripts or external applications.
Thanks, but i can't find the Python Adapter do you mean EnsLib.PEX.BusinessOperation or IOP.BusinessOperation.
Next if Embedded Python runs natively on iris, why i have to declare a connection as you mention in your example ?
Does this work best ?
from iop import BusinessOperation
class HelloWorld(BusinessOperation):
def on_message(self, request):
self.log_info("Hello World")
Yes, You're right. Sorry for the confusion. By saying Python adapter, I meant EnsLib.PEX.BusinessOperation and also you're perfectly correct about the declaration too. irisnative is unnecessary for local interactions. I'm just trying things on iris so don't take me for an expert😄.
Your code is correct and I would like to add that - 'from EnsLib.PEX import BusinessOperation' would be the best.
Announcement
Anastasia Dyubaylo · Sep 3, 2024
Hi Community!
We hope you enjoyed our Developer Community AI sweepstakes and learned something new while interacting with our DC AI. Now, it's time to announce the winner!
And the winner of the sweepstakes is @Akio.Hashimoto1419. Congratulations! We will get in touch soon to deliver your prize, which is a Patagonia Black Hole® MLC™ Cube:
If you're curious to see what questions were asked, here are all 28 of them that took part in the sweepstakes:
Author
Link
@Iryna.Mykhailova
Vector search
@Heloisa.Paiva
Python in IRIS
@Ohata.Yuji
Kill command
@Ohata.Yuji
Kill command
@Ohata.Yuji
Sharding
@Minoru.Horita
REST
@Akio.Hashimoto1419
Database creation
@Akio.Hashimoto1419
Database creation
@Iryna.Mykhailova
Working with dates/times
@Michael.Davidovich
Errors handling
@Timothy.Leavitt
Streams
@George.James
Errors handling
@Muhammad.Waseem
Vector search
@Daniel.Aguilar
Business Process
@Evgeny.Shvarov
XML export
@José.Pereira
Adapters
@Jani.Hurskainen
Using command line
@Jani.Hurskainen
Using command line
@Timothy.Leavitt
VSCode
@Sean.Connelly
Using methods
@Sean.Connelly
Doing calculations
@Sean.Connelly
Doing calculations
@Sean.Connelly
Doing calculations
@Sean.Connelly
Doing calculations
@Vishal.Pallerla
Creating classes
@Pietro.DiLeo
Using streams
@Pietro.DiLeo
Using streams
@LuisAngel.PérezRamos
SQL Gateway
Our sincerest congratulations to our winner! And better luck next time to everyone else who took part! Congratulations to the winner! This was an interesting experience 😁 I hope we will get more sweepstakes like this!
Article
Ashok Kumar T · Sep 13, 2024
In the previous article. Practices of class members and their execution within embedded Python. We will now turn our attention to the process of switching namespaces, accessing global variables , traversing and routine executions within embedded Python.
Before proceeding to the other functions. let us briefly review the execute function within the iris package. This function is exceptionally beneficial for executing the arbitrary ObjectScript functions and class invocation.
>>> b = iris.execute('return $Piece("test^aaaa","^",2)')>>> 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'
Let us begin!
4. Switch Namespaces
Switching namespaces during execution is often necessary. However, unlike in IRIS, direct switching of namespaces within embedded Python is not feasible. Therefore, it is essential to utilize existing class definitions or to create a wrapper method to facilitate the switching of 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
To utilize the capabilities of global for data traversal or to retrieve information from legacy global systems directly, rather than through SQL or objects within embedded Python, one can access it directly by employing the gref function from the iris package. To set or get global values, the gref function can be utilized to establish a reference to the global variable and directly assign values within Python.
iris.gref
class gref(builtins.object) | InterSystems IRIS global reference object. | Use the iris.gref() method to obtain a reference to a global | | Methods defined here: | | __delitem__(self, key, /) | Delete self[key]. | | __getitem__(self, key, /) | Return self[key]. | | __len__(self, /) | Return len(self). | | __repr__(self, /) | Return repr(self). | | __setitem__(self, key, value, /) | Set self[key] to value. | | __str__(self, /) | Return str(self). | | data(self, key) | Given the keys of a global as a list, returns the state of that. | Example: x = g.data([i,j]) sets x to 0,1,10,11 0-if undefined, 1-defined, 10-undefined but has descendants, 11-has value and descendants | | get(self, key) | Given the keys of a global as a list, returns the value stored at that node of the global. | Example: x = g.get([i,j]) sets x to the value stored at key i,j of global g. | | getAsBytes(self, key) | Given the keys of a global as a list, returns a string stored at that node of the global, as bytes. | Example: x = g.getAsBytes([i,j]) sets x to the value stored at key i,j of global g, as bytes. | | keys(self, key) | Traverses a global starting at the specified key, returning each key in the global. | Example: for key in g.keys([i, j]) traverses g from key i,j, returning each key in turn. Optional second argumenent 1 or -1, if -1 reverses the returned order | | kill(self, key) | Given the keys of a global as a list, kills that node of the global and its subtree. | Example: g.kill([i,j]) kills the node stored at key i,j of global g and any descendants. | | order(self, key) | Given the keys of a global as a list, returns the next key of the global, optional second argument 1 or -1, if -1 returns the previous key. | Example: j = g.order([i,j]) sets j to the next second-level key of global g. | | orderiter(self, key) | Traverses a global starting at the specified key, returning the next key and value as a tuple. | Example: for (key, value) in g.orderiter([i,j]) traverses g from key i,j, returning the next key and value. Optional second argumenent 1 or -1, if -1 reverses the returned order. | | query(self, key) | Traverses a global starting at the specified key, returning each key and value as a tuple. | Example: for (key, value) in g.query([i,j]) traverses g from key i,j, returning each key and value in turn. Optional second argumenent 1 or -1, if -1 reverses the returned order. | | set(self, key, value) | Given the keys of a global as a list, sets the value stored at that key of the global. | Example: g.set([i,j], 10) sets the value of the node at key i,j of global g to 10 | | ---------------------------------------------------------------------- | Static methods defined here: | | __new__(*args, **kwargs) from builtins.type | Create and return a new object. See help(type) for accurate signature.
5.1 Set global values
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 get global valuesFetch the global values from python directly by using the subscripts or get method.
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 Traversal
order - Traversing the global is essential for collecting multiple level of data's from global. This embedded Python order functions similarly to the $Order command, utilizing the order function from the iris.gref. Initially, it is necessary to establish a reference to the global entity that requires traversal.
Single subscript level traversal
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])}')
}
Multi subscript level traversal
global
zw ^mygbl^mygbl(1)="Mon"^mygbl(2)="Tue"^mygbl(3)="Wed"^mygbl(3,1,1)="Test multilevel"^mygbl(85752400,1)=$lb("Test","9517539635","t@gmail.com")^mygbl(95752455,1)=$lb("Ashok","55720","9639639639","test@gmail.com")^mygbl("test","c1")=$lb("Test","8527538521","pylearn@gmail.com")
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 - query function from the iris.gref similarly $query. This function is collects all the global values in to tuples. the tuple result contains the id(s) in list and values is the next tuple. You can refer the below tuple sample
tuple
ex: zw ^mybgl^mybgl(1)="Mon"^mybgl(2)="Tue"^mybgl(3)="Wed"^mybgl(3,1,1)="Test multilevel"^mybgl(95752455,1)=$lb("Ashok","55720","9639639639","test@gmail.com")
Python tuple : ( [ids], data)(['1'], 'Mon')(['2'], 'Tue')(['3'], 'Wed')(['3', '1', '1'], 'Test multilevel')(['95752455', '1'], '\x07\x01Ashok\x07\x0155720\x0c\x019639639639\x10\x01test@gmail.com')
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 - this data function Check whether the given subscript is exist in the global and return the $data values by using the data function
ClassMethod DollarData() [ Language = python ]
{
import iris
g = iris.gref('^mygbl')
key1= ''
print(g.data([1]))
}
6. Routines
Furthermore, it is essential to implement the class members. We must execute the routines as part of the implementation for legacy codebase systems and other related situations. Consequently, there exists a dedicated function within the iris library package that allows for the invocation of routines from embedded python through the use of the routine function.
myirispython.mac
myirispython w 123 qir1 w "running ir1" qadd(p1,p2) public{return p1+p2}sub(p1,p2) s c= p1-p2
ClassMethod RunRoutines() [ Language = python ]
{
import iris
iris.routine('^myirispython')
iris.routine('add^myirispython',1,2) # same as write $$add^myirispython(1,2)
}
Additionally, you can execute the routine by using execute function as well. iris.execute('do ^myirispython')
note: If the routine is not found >>> iris.routine('^myirispythonT')Traceback (most recent call last): File "<input>", line 1, in <module>RuntimeError: Routine not found
Will continue the other topics in the next article.
Great articles. Thanks for sharing.
Why are you using Language Tag and not "pure" python script ? It's so much convient to work with native python script than python code in cls classes. Hello @Guillaume.Rongier7183
Thanks for the feedback! I go over your pretty useful article. I just write python code inside the ObjectScript itself by using language mode because of it's small code snippets. I actually facing some issues while writing IRIS in native python script.
From my pervious community question. First I install this intersystems_irispython-3.2.0-py3-none-any.whl in python and there is no cls, execute, routine, gref, ref or other IRIS script functions available.
As you recommend from the post. I install the official driver https://github.com/intersystems-community/intersystems-irispython/releases/download/3.8.0/intersystems_iris-3.8.0-py3-none-any.whl file and I could use the IRIS functions for embedded python cls, execute, routine, gref, ref etc...
However, I got this ImportError: DLL load failed while importing pythonint: The specified module could not be found." error while executing the .py scripterror while executing my script
script is nothing but simple class method invocation.
import iris
def Execute_Classmethod():
print(iris.cls('MyLearn.EmbeddedPython').test1())
Execute_Classmethod()
anyway when I keep my native python scripts under "IRISinstalldirectory\mgr\python" and import my code as module and it's working because it's running inside the IRIS not using the python "driver"
ClassMethod CallPyscripts()
{
set ap = "mypyap"
set pyImport = ##class(%SYS.Python).Import(ap)
set builtin = $SYSTEM.Python.Builtins()
do builtin.help(pyImport)
write pyImport.irisversion,!
write pyImport."Execute_Classmethod1"()
}
#__init__.py
import iris
from .irisembdpyth2024 import *
irisversion = iris.execute('return $zv')
# irisembdpyth2024.py file
import iris
def Execute_Classmethod1():
print(iris.cls('MyLearn.EmbeddedPython').test1())
Hello Ashok, this is a great article, thanks for sharing it!
However, I would like to ask how to create an oref using a property index. For example, considering the class:
Class User.Test Extends %Persistent
{
Property Code As %String(MAXLEN = 50) [ Required ];
Index CodeIdx On CodeIdx [ Unique ];
}
In ObjectScript I can use the following syntax to open the oref using its ID:
set obj = ##class(User.Test).CodeIdxOpen(ID)
In the same way I can use the CodeIdxDelete or CodeIdxExists as well.
I was wondering how to obtain the same result in Embedded Python. Hello @Pietro.DiLeo
AFAIK, There is no direct execution of the IndexKeyOpen and other generated methods in python. We can write a wrapper method to run those methods.
Class pylearn.NewClass2 Extends %Persistent
{
Property Code As %String(MAXLEN = 50) [ Required ];
Index CodeIdx On Code [ Unique ];
ClassMethod RunCode() [ Language = python ]
{
import iris
iris_obj = iris.cls(__name__).GeObjByIdx("CodeIdx","A212")
print(iris_obj.Code)
}
ClassMethod GeObjByIdx(IndexName, ID)
{
Return $ClassMethod(,IndexName_"Open",ID)
}
} Thanks for the clarification Ashok! I solved in a similar way. It would be good in a future version to have the possibility of executing generated methods too.
Announcement
Danusa Calixto · Oct 14, 2024
Hello, Community!
It's time for the next InterSystems Developer Community contest!
✍️ InterSystems IRIS Technical Tutorial Contest ✍️
Create a Technical Tutorial** that can be considered a guide for InterSystems IRIS programmers of any level: beginner/intermediate/senior, from October 14th to November 24th. The tutorial can be in the form of an Article with text and images and/or a Demonstration Video.
Enjoy and let your creativity flow! Show how easy and fun it can be to create solutions with InterSystems IRIS.
🎁 Prizes for everyone: A special prize for each author participating in the competition!
Prizes
1. Everyone is a winner in the Tech Article Contest! Any member who writes an article during the competition period will receive a special prize:
🎁 InterSystems - Developer Community Thermos Bottle (300 ml)
2. Expert Awards – articles will be judged by InterSystems experts:
🥇 1st place: iPad Air de 11” Wi-Fi 128 GB
🥈 2nd place: Air Pods Pro 2nd gen
🥉 3rd place: Echo Show: Smart Display Full HD 15,6’’ com Alexa
3. Developer Community Award – article with the most likes:
🎁 Echo Dot - Alexa Echo Dot 5th gen
Note:
The author can only be awarded once per category (in total, the author will win two prizes: one for Expert and one for the Community)
In the event of a tie, the number of votes of the experts for the tied articles will be considered a tie-breaking criterion.
Who can participate?
Any Developer Community member, except for InterSystems employees. Create an account!
Contest period
📝 October 14th to November 10th: Publication of articles.
🗳️ November 11th to November 17th: Voting time.
🏅 November 18th: Winners announcement.
Publish an article(s) throughout this period. DC members can vote for published articles with Likes – votes in the Community award.
Note: The sooner you publish the article(s), the more time you will have to collect both Expert & Community votes.
What are the requirements?
❗️ Any article written during the contest period and satisfying the requirements below will automatically* enter the competition:
The article must be a tutorial** on the InterSystems IRIS topic. It can be either for beginners, middle or senior developers.
The article must be in Portuguese (incl. inserting code, screenshots, etc.).
The article must be 100% new (it can be a continuation of an existing article not in the contest).
The article cannot be a translation of an article already published in other communities.
The article should contain only correct and reliable information about InterSystems technology.
The article has to contain the Tutorial tag.
Article size: 400 words minimum (links and code are not counted towards the word limit).
Articles on the same topic but with dissimilar examples from different authors are allowed.
* Our experts will moderate articles. Only valid content will be eligible to enter the contest.
** Tutorial “is a method of transferring knowledge and may be used as a part of a learning process. More interactive and specific than a book or a lecture, a tutorial seeks to teach by example and provide the information to complete a certain task.”https://en.wikipedia.org/wiki/Tutorial
Tutorials provide step-by-step instructions that a developer can follow to complete a specific task or set of tasks.
🎯 EXTRA BONUSES
This time, we've decided to add additional bonuses that will help you to win the prize! Please welcome:
Bonus
Nominal
Details
Topic bonus
5
If your article is on the topic from the list of proposed topics (listed below), you will receive a bonus of 5 Expert votes.
Video bonus
3
Besides publishing the article, make an explanatory video.
Discussion bonus
1
Article with the most useful discussion, as decided by InterSystems experts. Only 1 article will get this bonus.
New participant bonus
3
If you haven't participated in the previous contests, your article(s) will get 3 Expert votes.
Programming bonus
5
Besides publishing the article, Publish your related application on InterSystems Open Exchange. And don't forget to reference it in the article.
Proposed topics
Here's a list of proposed topics that will give your article extra bonuses:
✔️ Using AI/ML/GenAI✔️ Using Vector Search✔️ Using FHIR SQL Builder
Note: Articles on the same topic from different authors are allowed.
It's time to show off your writing skills! Good luck ✨ Obrigado Por Compartilhar. 🤗🤗
Question
Yuhong Snyder · Nov 1, 2024
Hello,
Is there any document regarding the embedded sourceControl in HealthShare management portal GUI?
It has Status, Settings,GitWebUI,AddtoSC,Sync,NewBranch,SwitchBranch,Import, ImportForce buttons, I am pretty new to this and I am wondering what these buttons really do behind the scene and when I need to use them.
Thank you
@Yuhong.Snyder4826 - the following should be helpful to you:
https://github.com/intersystems/git-source-control/tree/main/docs
https://community.intersystems.com/post/video-git-gitlab-shared-development-environments (also the article prior and following)
https://community.intersystems.com/post/git-source-control-launches-release-240-new-basic-mode
Also, in the future we plan to create a new #EmbeddedGit tag to make it easier to follow news and Q&A for these tools
Thank you!