Search

Clear filter
Announcement
Carmen Logue · Aug 30, 2023

InterSystems Reports 23.2 Release Announcement

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

InterSystems Developer Ecosystem Summer News 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

Initializing InterSystems IRIS Docker Image with Python

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

Time to vote in the InterSystems Developer Tools Contest

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

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!
Announcement
Anastasia Dyubaylo · Sep 11, 2024

InterSystems Developer Ecosystem Summer News 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

20,000 members on the InterSystems Developer Community!

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

[Video] Exploring InterSystems Data Fabric Studio

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

InterSystems Platforms Update Q4-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

InterSystems IRIS for Health: A Comprehensive Onboarding Guide

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

Streamlining Interoperability with Embedded Python in InterSystems IRIS

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

Winner of the InterSystems Developer Community AI Sweepstakes

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

Embedded python in InterSystems IRIS Part-2

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

InterSystems IRIS Technical Tutorial Contest in Portuguese

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

SourceControl of InterSystems health IRIS cloud

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!