Clear filter
Article
Deirdre Viau · Mar 16, 2022
Support is helping you troubleshoot a report. They want to reproduce a problem in their local system. Too bad they can't run your report, because the JDBC data source connection will fail. Or... is there a way?
There is a way to run a report offline, with no access to the source database. You must provide a cached query result exported from Designer. This is a file containing report source data. Support will use this to override the report's data source. When they run the report, it will get data from the file, rather than the JDBC connection.
Clarification
This has nothing to do with the IRIS BI query cache.
IRIS BI query cache
Globals used by the BI query engine to improve performance.
InterSystems Reports cached query result
A file that enables running a report offline, with no access to the source database. The report retrieves data from the file instead of the usual JDBC connection.
How to send a report with a cached query result
1. Zip and send the entire catalog folder. Indicate which report you are testing.
2. Open your report in Designer. In the Data panel on the left, right-click the dataset and choose Create Cached Query Result. If the report has multiple datasets, do this for each one. Send the exported files.
Disclaimer
Do not send a cached query result containing confidential data.
Documentation
Logi Cached Query documentation (v18) very useful tip ... thank you for writing this up!
Announcement
Anastasia Dyubaylo · Oct 12, 2022
Hi Community,
In this video you will learn about new features in InterSystems Healthshare Clinical Viewer and what's coming next:
⏯ Clinical Viewer & Navigation Application: New & Next 2022 @ Global Summit 2022
🗣 Presenter: @Julie.Smith, Clinical Product Manager, InterSystems
Stay tuned for more videos on InterSystems Developers YouTube!
Announcement
Anastasia Dyubaylo · Aug 4, 2022
Hey Community,
We're excited to announce that Community webinars are back!
Let us invite you all to @sween's webinar on Scaling InterSystems FHIR Server on Amazon Web Services with ECP.
Join this webinar to make a technical deep dive, see a demonstration, and benchmark horizontal scaling InterSystems FHIR Server on Amazon Web Services with Enterprise Cache Protocol (ECP).
⏱ Date & Time: Thursday, August 18, 8 AM ET | 2:00 PM CEST👨🏫 Speaker: @sween, Full Stack Architect at Integration Required
About Integration Required: We are a full-stack technical delivery team for your InterSystems® workloads, tailored to meet the requirements of your security posture and organizational deployment standards. With a decade of InterSystems® partnerships and rigorous adherence to customer satisfaction, we are trusted to best practice.
So...
Don't miss this opportunity to learn more about scaling FHIR, ECP and AWS and how to mix it all!
>> REGISTER HERE << Hi Devs,
Don't miss the upcoming webinar with @sween!
Already 27 registered people. 😎
Registration continues >> click here <<
Hurry, only a week left! 🔥 Developers,
The upcoming webinar will be tomorrow!
Don't miss this opportunity to learn more about scaling FHIR, ECP and AWS and how to mix it all!
For registration >> click here << Hey Community,
The webinar will start in 15 mins! Please join us in Zoom.
Or enjoy watching the live stream on YouTube: https://youtu.be/DBGvt0jd4yI Hi. I fell asleep before it started :)
Is there a recording available? do we hv replay for this? Thx! Hi Michael,
Anastasia mentioned rerun is at: https://youtu.be/DBGvt0jd4yI Hey everyone!
The recording of this webinar is available on DC YouTube:
▶️ [Webinar] Scaling InterSystems FHIR Server on Amazon Web Services with ECP
Big applause to our awesome speaker @sween 👏👏👏
And thanks everyone for joining! Really enjoyed the webinar @sween
Great content, insights and results, and thanks for the mentions
Article
Evgeniy Potapov · Mar 22, 2022
Let's assume that we have already connected a data source to Adaptive Analytics, created a project and added tables there.
Now we will prepare Adaptive Analytics for work. First, we need to select data from tables, to make it available for the future report. To do this, we need to create dimensions from the columns of the tables. Dimensions are usually created to break down our data into categories, such as what city the user lives in, or what month a purchase was made in. However nothing prevents us from creating dimensions from numerical data so that we could apply functions to them in Intersystems Reports Designer.
The tool for creating dimensions is located on the right side of the interface as shown in the image below. To create a new dimension, right-click on the hamburger button located to the right of the "Filter" line and select a "Create Dimension" line as indicated in the picture.
The following window will appear:
After having created a dimension, you can make it hierarchical. To do that, double-click the left mouse button on the dimension in the left table and get into the hierarchy editor.
By clicking on the three dots next to the hierarchy, we can create a new dimension within the hierarchy. In the menu, the dimensions can be moved up / down the hierarchy. Thanks to hierarchies, we can make different levels of data details. For example, we can specify how many people have visited the site from the country, region, city.You can use dimensions to create relationships between tables. To do that, you need to drag the desired field of the table using the left mouse button and drop it in the desired highlighted dimension.. The link creation window will appear. Click Save, and our connection will be ready.
In addition to the actual data from the table, in Adaptive Analytics we can create measures based on various operations applied to a specific column. Measures are always a numerical display of data - number of users, amount of purchases, average time spent watching a video, etc.
To create a measure, we apply the same principle as for dimensions but using the "Measures" tab.
By clicking on the hamburger button and selecting "Add measure", we call the following window:
‘Measure name’ is the name that will be displayed in the Adaptive Analytics interface.
‘Query name’ is the name that will be displayed in the Intersystems Reports Designer. It is generated automatically based on the column name, but you can also set it yourself.
‘Description’ is the description visible in Adaptive Analytics.
'Sources' define from which table and which column to take data for the measure.‘Aggregation Handling’ shows which function we apply to the data. The list of functions can be found below. By default the "Sum" is selected as a value:
‘Data Handling and Formatting’ determines what will happen to the measure if it is used in conjunction with a dimension for which the measure is not defined. You should leave it by default.
‘Visibility in Published Data Sources’ specifies whether this measure will be available in Intersystems Reports Designer.
You can split measures by dimensions. For example, we have a measure that shows the average check, which we have calculated employing the data of a column with daily data for one year. If we distribute the measure over a dimension containing months, we will get the average check for each month.
To find out what is in your data connected to Adaptive Analytics, you can use the Cube Data Preview tool. You can get into it by clicking on the tab in the upper left corner of the workspace.
By specifying a dimension on one axis and a measure on the other, we get the measure value for each dimension value. In this case, below you can see the number of records in the table for each date.
Having created all the measures, dimensions and relationships that we needed, now we must publish our project. To do that, go to the main page of the project on the tab in the upper left corner and click the "Publish" button, then click the "Next" button on all windows which will appear.
Now we can start paying attention to the left window, where we have 2 sections: "Draft", where we can edit our project, and "Publish", which displays the published versions of the project. By clicking on the "Published project", select the cube, and go to its "Connect" tab. Here we can see all the necessary data to connect Intersystems Reports Designer to our project.
We have learned everything we need to work with Adaptive Analytics. Now we can move on to working in InterSystems Reports Designer.
I need to mention that Intersystems Reports Designer version 17.1 requires JDK version 16 to work, and it will not run on later versions.
First, you need to install drivers for the JDBC connection to Adaptive Analytics.
Here are the links to the required JAR files. The JDBC driver itself must be compatible with the one used on the server. We use versions that are old enough so that we do not get an error caused by the older version of the Hive on the server compared to ours. For convenience, we have collected all the necessary libraries in one archive, which you can download from the link:
https://github.com/teccod/Logi-JDBC-drivers
These files must be placed in the lib folder, located along the path LogiReport\Designer\lib.
Launch Intersystems Reports Designer and close the "Start" page. Now you can find yourself in the workspace of Intersystems Reports Designer. By default, it opens the last catalog with which the user was working or the pre-installed catalog that was installed with Intersystems Reports Designer.
Go to the "File" section and click "New Catalog"; fill in the name of the catalog, the name of the data source and the location where the file should be saved.
Intersystems Reports Designer creates an empty data source for us. Right-click on it and select "New JDBC connection".
In the "Driver" line we write our driver - org.apache.hive.jdbc.HiveDriver.
We take the URL from the JDBC field of the "Connect" tab in Adaptive Analytics and fill in the username and password.
The connection is established, but no cubes from the project have been loaded into it yet. Right-click on "Tables", then "Add tables" and select the desired cubes; add them with the "Add button", then press "Done" to complete the process. If the tables are not displayed when you select a data scheme different from the one that opens by default, use the "Refresh" button.
After adding everything that we needed, we have the dimensions and measures available in the project, and we can almost start creating a report.
In order to use the available data, we must make a request. In this request, we can impose the necessary restrictions on the data (do not show canceled orders, do not display data for the current month, etc.) and take only the part of the data that we need.
To create a query on the "Home" or "File" tab, select "New" and choose "Query". We pick the data source, fill in the query name, open our source, "Tables" and add the necessary tables to the query using the arrow.
We get into the query editor window:
There, by setting the necessary checkboxes or by checking the box next to the * field, select the necessary ones or all fields of the table. In the "Menu" item, we see several functions, the most interesting one of which is data filtering.
Here we can add conditions that will be written in SQL in the "WHERE" section of the "SELECT" statement (or simply, conditions that cut off data for the specified expression). In our case, we could write that the date is less than a certain value, is in a range of values, etc.In the "Query Editor", we can also add calculated columns to enrich our data. The functions that you can use when creating them depend on what functions the data source provides. Adaptive Analytics does not provide any functions, so we are limited to the built-in Logi functions (which are the simplest mathematical and logical operators).
If there are several tables in the query, then you can set up links between them by dragging the link with the left mouse button from one field to another. In the SQL query code, these relationships will be displayed as WHERE table_name1.field_name = table_name2.field_name.
When you have finished editing the request, click the "ok" button. If necessary, you can create several more queries with different filters or fields in them.
Now you are ready to create the report. We will talk about the process of its creation in the next article.
Announcement
Angelo Bruno Braga · Apr 25, 2022
Hi Community,
Our 1st InterSystems Portuguese Tech Article Contest ended. We received several interesting content in: 6 amazing articles 🔥
A great thanks to all that participated on our competition !
And now it's time to announce the winners ....
Meet the winners of the 1st InterSystems Portuguese Tech Article Contest and their amazing articles:
⭐️ Expert Awards – winners selected by InterSystems experts:
🥇 1st place: Utilizando HealthShare para normalização de resultados de SARS-CoV-2/COVID-19 written by @Renan.Santos
🥈 2nd place: Introdução à análise de dados com IRIS e Pandas written by @henry
🥉 3rd place: HealthShare: criando o ecossistema de atendimento orientado a dados written by @Yuri Marx
⭐️ Community Award – winner selected by Community members, article with the most likes:
🎉 Winner: Utilizando HealthShare para normalização de resultados de SARS-CoV-2/COVID-19 written by @Renan.Santos
⭐️ And let's meet our new member who joined our competition:
@Julio.Esquerdo : 1 article 🤩
Wow! For their great contribution, we'd like to reward these authors with a 🎁 InterSystems Thermic Bottle 🎁!
⭐️ Let's congratulate all our heroes at the contest:
@Renan.Santos
@henry
@Yuri Marx
@Julio.Esquerdo
THANK YOU ALL! You have made an incredible contribution to our Dev Community!
P.S. The prizes are in production now. We will contact all the participants when they are ready to ship - stay in touch!
So,
Awesome our 1st InterSystems Portuguese Tech Article Contest, isn't it ?
Thanks to all the participants for the efforts you pay in our 1st InterSystems Portuguese Tech Article Contest!
And what's next.....?
Stay tuned !!!! 
Congratulations!! Congratulations to all of you!
I hope it's always helping the community! Congrats for all participants and thanks for this fantastic contest Congratulations to all of you! CONGRATULATIONS ALL!!!! 🎉
Announcement
Anastasia Dyubaylo · Nov 28, 2022
Hi Community,
It's voting time! Cast your votes for the best applications in our IRIS for Health Programming Contest focused on building FHIR solutions for Women's Health:
🔥 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. Please welcome our experts:
⭐️ @akoblov, Support Specialist⭐️ @Alex.Woodhead, Technical Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Alberto.Fuentes, Sales Engineer⭐️ @Dmitry.Zasypkin, Senior Sales Engineer⭐️ @Daniel.Kutac, Senior Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Nicholai.Mitchko, Manager, Solution Partner Sales Engineering⭐️ @Timothy.Leavitt, Development Manager⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Aya.Heshmat, Product Specialist⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations
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 changed 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! Hello everyone,
Check out the V2 of my application for the InterSystems FHIR contest !!
This time, we will see how to go from CSV to FHIR to SQL to JUPYTER all in one go and using only Python !!!
Check this out here : https://community.intersystems.com/post/incredible-csv-fhir-sql-jupyter-fhir-contest-v2 thanks for your contributions, Lucas! :) Hey, Developers!
Since the start of the contest, here are the top 5 apps!
Expert Nomination, Top 5
Pregnancy Symptoms Tracker by @José.Pereira
fhir-healthy-pregnancy by @Edmara.Francisco
FemTech Reminder by @KATSIARYNA.Shaustruk
FHIR Questionnaires by @Yuri.Gomes
Contest-FHIR by @Lucas.Enard2487
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José.Pereira
FHIR Questionnaires by @Yuri.Gomes
fhir-healthy-pregnancy by @Edmara.Francisco
FemTech Reminder by @KATSIARYNA.Shaustruk
Contest-FHIR by @Lucas.Enard2487
➡️ Voting is here.
Support the application you like! Devs!
Here are the results after two days of voting!
Expert Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
FemTech Reminder by @Katsiaryna Shaustruk
Beat Savior by @Jan.Skála
Contest-FHIR by @Lucas Enard
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
FemTech Reminder by @Katsiaryna Shaustruk
Contest-FHIR by @Lucas Enard
Beat Savior by @Jan.Skála
➡️ Voting is here. Hi Developers!
At the moment we can see the next results of the voting:
Expert Nomination, Top 5
FemTech Reminder by @Katsiaryna Shaustruk
Pregnancy Symptoms Tracker by @José Roberto Pereira
fhir-healthy-pregnancy by @Edmara Francisco
iris-fhir-app by @Oliver.Wilms
NeuraHeart by @Grzegorz.Koperwas
➡️ Voting is here.
Community Nomination, Top 5
Pregnancy Symptoms Tracker by @José Roberto Pereira
FemTech Reminder by @Katsiaryna Shaustruk
fhir-healthy-pregnancy by @Edmara Francisco
FHIR Questionnaires by @Yuri.Gomes
iris-fhir-app by @Oliver.Wilms
➡️ Voting is here.
Support participants with your votes! Developers!
Last call!Only a few hours left to the end of voting!
Cast your votes for applications you like!
Announcement
Anastasia Dyubaylo · Apr 28, 2020
Hi Community,
We're pleased to invite you to join the upcoming InterSystems IRIS 2020.1 Tech Talk: API-First Development on May 5 at 10:00 AM EDT!
In this week's InterSystems IRIS 2020.1 Tech Talk, we'll discuss API-first development and how InterSystems is embracing this industry trend with our API Manager, and specifically with our FHIR offerings. First, we'll talk about InterSystems API Manager. This tool controls your web-based API traffic in a single location. You can throttle throughput, configure payload sizes and whitelist/blacklist IPs, among many other features.
FHIR stands for Fast Healthcare Interoperability Resources. Release 4 brings this HL7 standard to maturity, and the FHIR R4 support in InterSystems IRIS for HealthTM is big. You'll learn how to work with FHIR data in InterSystems IRIS, and see our developer portal in action, where you can access FHIR resources using the OpenAPI specification.
Speakers:🗣 @Patrick.Jamieson3621, Product Manager, Health Informatics Platform🗣 @Craig.Lee, Product Specialist 🗣 @Stefan.Wittmann, Product Manager
Date: Tuesday, May 05, 2020Time: 10:00 AM EDT
➡️ JOIN THE TECH TALK!
Additional Resources:
What is InterSystems API Manager?
API Manager: Gummy Bear Factories
Using FHIR APIs to View Resources
Setting Up RESTful Services
Interoperability for Health Overview
Code sample:
samples-integration-FHIR
covid-19-challenge
Announcement
Anastasia Dyubaylo · May 12, 2020
Hi Community!
We are pleased to invite you to the upcoming webinar in Spanish: "How to implement integrations with .NET or Java on InterSystems IRIS" / "Cómo implementar integraciones con .NET o Java sobre InterSystems IRIS" on May 20 at 4:00 PM CEST!
What will you learn?
PEX (Production EXtension Framework), its architecture and its API, and how to develop an integration with Java or .NET, in order to rich the InterSystems IRIS pre-built components
Some simple examples in .NET
A more complex example, using PEX to add an existing client library and access to external services
Speaker: @Pierre-Yves.Duquesnoy, Sales Senior Engineer, InterSystems Iberia
Note: The language of the webinar is Spanish.
We are waiting for you at our webinar! ✌🏼
PLEASE REGISTER HERE! Is the video of this webinar available for viewing? Hi David,
This webinar recording is already available on InterSystems Developer Community en español.
Enjoy watching this video)
Announcement
Anastasia Dyubaylo · Jun 13, 2020
Hey Developers,
We're pleased to invite you to join the next InterSystems IRIS 2020.1 Tech Talk: Using Java and .NETon June 16 at 10:00 AM EDT!
In this installment of InterSystems IRIS 2020.1 Tech Talks, we put the spotlight on extending InterSystems IRIS with your own custom Java and .NET code. We will demo how to create a custom interoperability component with the new Productions Extensions (PEX) feature. Following that, we’ll demo how to call Java or .NET code from any ObjectScript code.
Speakers:🗣 @Robert.Kuszewski, InterSystems Product Manager - Developer Experience🗣 @Joshua.Goldman, InterSystems Senior Technical Writer
Date: Tuesday, June 16, 2020Time: 10:00 AM EDT
➡️ JOIN THE TECH TALK! Is this going to be made available for on-demand viewing, e.g. on youtube? Hi Wolf,
All Tech Talks are available for on-demand viewing here.
Announcement
Anastasia Dyubaylo · Jun 13, 2020
Hey Community,
We're pleased to invite all the developers to the upcoming InterSystems IRIS 2020.1 Tech Talk: Speed Under Pressure on July 14 at 10:00 AM EDT!
In this InterSystems IRIS 2020.1 Tech Talk, we'll learn about the open source Ingestion Speed Test. We will explain:
the architecture of the ingestion speed test
how we are leveraging Docker containers to run it on our PCs
how we are leveraging InterSystems Cloud Manager to easily run it on AWS so we can compare InterSystems IRIS with other databases, such as AWS Aurora
After this Tech Talk, you'll be able to use the Ingestion Speed Test on InterSystems Open Exchange for your own testing and benchmarking.
Speakers:🗣 @Joseph.Lichtenberg, InterSystems Director of Product & Industry Marketing🗣 @Amir.Samary, InterSystems Manager, Solution Architecture
Date: Tuesday, July 14, 2020Time: 10:00 AM EDT
➡️ REGISTER FOR THE TECH TALK TODAY! Tomorrow! Don't miss the last InterSystems IRIS Tech Talk webinar!
✅ PLEASE REGISTER HERE!
Announcement
Anastasia Dyubaylo · Sep 20, 2021
Hey Developers,
Get an introduction to Apache Kafka, a popular event-streaming platform, and see a demonstration of the upcoming Kafka integration with InterSystems IRIS Interoperability:
⏯ Kafka! Integrating the World's Favorite Stream Processor with InterSystems IRIS
🗣 Presenter: Helen Bang, Systems Developer, InterSystems
Subscribe to InterSystems Developers YouTube. Enjoy and stay tuned! can you post the source code for the kafka integration which you have done
Announcement
Pete Greskoff · Nov 19, 2021
November 19, 2021 - Advisory: Apache Web Server provided with InterSystems kits – Vulnerability reports
InterSystems kits include an Apache web server, which provides a convenient way for customers to interact with the Caché/IRIS Management Portal without needing to install an external web server; however, this web server should never be used for production instances, and customers must install a web server that fits their specific needs and security/risk requirements.
Recent tests have noted some security issues with the currently included Apache web server. Because this is a third-party technology that InterSystems does not control, InterSystems recommends installing a web server version directly obtained from Apache or another third party and disabling the included Apache web server. Our product documentation includes instructions on how to disable the web server provided with our kits. In addition, Apache also offers uninstall instructions that can be found on the Apache website.
InterSystems plans to include a more recent version of the Apache web server in upcoming releases. Similar to the current version, this version also cannot be used for production instances. In future releases of our products, InterSystems will not ship or install any web server; we will provide further updates with the specifics of our plans. We have always used independent web servers for production.
However, with the release of container deployment, can I get clarity on the webgateway container provided by ISC is NOT affected by the same vulnerabilities? I understood this to be a full apache instance with modules pre-installed.
If so, are there any recommended practices one should use for this container in a production environment? Hi @Trevor.Strong
The container image simply installs the standard Apache package in the container and adds the CSP add-on.
For any update on the Apache web server we should all keep an eye on https://www.cvedetails.com/product/66/Apache-Http-Server.html?vendor_id=45 and consider patching/upgrading/re-building as necessary and according to the security policies and best practices of the organizations we work for.
HTH
Article
Bob Schat · Feb 10, 2022
The InterSystems Iris Fhirserver running on a Raspberry Pi Raspberry running as a FHIRserver
Raspberry running as FHIRserver
About a year ago I wrote some articles about the installation of the HAPI FHIRserver on a Raspberry Pi. At that time, I only knew the basics of the FHIR standard, little about the technology behind FHIR-servers and not much more about the Raspberry. By trying, failing, giving up and trying again I learned a lot.More than a year later I’m still a “perseverant amateur”, but meanwhile I built up a full FHIR environment with Raspberries, a number of applications in HTML/JavaScript/jQuery/Bootstrap and some applications in PHP. I did some work with authentication- and authorization servers on the Raspberry and some experiments with SMART on FHIR.
Most of it works, although sometimes without me knowing what the difference is between the last non-working version and the success I obviously created. I ‘m still surprised daily. Looking back, I should properly have studied systems development (I’ve a degree in forestry and currently volunteer a lot in that area. But that is different story).
Please be aware that a Raspberry Pi is ok to experiment with, but is not suitable for productional situations. So don’t use the Raspberry as a productional system in healthcare or any other situation in which reliability, continuity, security, privacy etc is needed or expected. It’s a perfect and cheap computer to experiment and it exceeds my expectations time after time, but it isn’t of “industrial strength”.
The InterSystems FHIRserver
At the time I have chosen the HAPI FHIR server because of its availability and because I succeeded quite soon to get some results with it. A former colleague, who is working for InterSystems now already suggested to experiment with InterSystems’ FHIRserver too.
I know InterSystems quite well (or should I say “I.know”😉) and it sounded like fun, but at that time, more than a year ago, a suitable version of Iris wasn’t available for ARM -processors (the Raspberry runs on ARM). Apart from that is the community version of Iris distributed as a Docker-container and I knew less than nothing about Docker.
From Raspbian towards Ubuntu
Meanwhile a year has passed. There is a new and even more powerful Raspberry Pi available (while stocks last…). The new Raspberry 4, like the Raspberry 3, supports 64-bits Unix. The IRIS community version is available for ARM too and I learned somewhat more about containers and Docker.
With all these improvements, the nonsensical “lock down” we had in the Netherlands at the end of last year became an opportunity to start a new experiment in which I would try to get the community version of IRIS running on a Raspberry Pi .
Looking back this was quite easy. In fact, there are only three attention points:
You’ll need a Raspberry supporting 64 bits. This means either a Raspberry 3 or 4 .
I didn’t succeed with (64 bits) Raspbian (which is quite new by the way). But I succeeded with 64 bits Ubuntu.
The InterSystems FHIRserver seems to be more judgemental about the FHIR-calls than the HAPI FHIRserver. I will explain this later in an additional publication, but I don’t think this is bad. Being the central repository in an (health-)care environment you should be strict regarding the standards, otherwise it will be “garbage in – garbage out”.
It took however some time for me to understand while applications that ran ok with the HAPI FHIRserver failed running with IRIS. Spoiler alert: the problem was in my applications.
It is however fun and more than worthwhile to see a little computer like a Raspberry Pi, at costs less than 100 Euros, running the full InterSystems IRIS platform, complete with management portals, Ensemble, Caché and a FHIRserver.
In the next paragraph I’ll explain step-by-step what I did to get there. That will not be a lengthy story about the history of Ubuntu, the philosophy behind Docker etc. If you’re interested in that, please visit the Internet. I will focus on the “happy flow” and only when relevant mention where I firstly went wrong.
Installing the InterSystems FHIRserver
Phase 1. Ubuntu 64-bits
1. Format your SD-card and put the 64-bits version of Ubuntu for ARM-processors on it. The compressed version was named “ubuntu-20.04.3-preinstalled-server-arm64+raspi.img.xz” in my case and you’ll find it on http://cdimage.ubuntu.com . (Of course you have to decompress the .img file before putting it on the SD-card!).
Don’t use RaspberryPi-imager because that gives an incorrect version. I used Win32DiskImager.
2. Start your Raspberry with the new image. Change (and memorize!) the password for the ubuntu-account. wachtwoord van het ubuntu-account.
3. Your Raspberry is running Ubuntu now, but we are not ready yet.
Look at this:
This Ubuntu-version still is 32-bit !
We’re going to cure that now
1. Log in on your Pi
2. sudo rpi-update
3. sudo reboot now
5. sudo copy /boot/config.txt /boot/config-ok.txt (in case of errors we’ve got an escape)
6. sudo nano /boot/config.txt Add under [pi4] the text : arm_64bit=1
8. Save boot/config.txt (in nano: <ctr>O )
9. Exit from nano (<ctrl>X)
10. sudo reboot now
And now we’re running 64 bits. See for yourself:
Make a notation of your Pi’s IP-address (sudo hostname -I where I is the I from "Island") and you can put it away since in Ubuntu SSH is enabled by default.
Phase 2: Docker
1. sudo curl -fsSL https://get.docker.com -o get-docker.sh
2. sudo sh get-docker.sh
This will result (after a while) in an extensive notification of Docker about using it as a “non-priviliged user” .
3. sudo usermod -aG docker $USER
4. Log off and log on again
5. docker container run hello-world
Docker now looks for a “hello-world” image on your system. It will not find it there and than will download it from the Docker-repository. After that Docker puts the image in a container on the Pi and starts the “hello-world” image.
You can see that confirmed by another block of text from Docker, including the “Hello from Docker” welcome message.
Fase 3: The Docker image for InterSystems’ IRIS FHIRserver
1. Give the following command in one time:
sudo docker run --name my-iris -d --publish 9091:1972 --publish 9092:52773 containers.intersystems.com/intersystems/irishealth-community-arm64
Now a lot of events happen after eachother:
Docker will get the “community edition” from Irishealth and puts it in your local Docker repository.
Docker starts the community edition in a docker container named “my-iris”.
Docker maps port 1972 of IRIS, running in the container, to port 9091 of your Raspberry.
Following the same pattern, port 52773 of IRIS (in the container) becomes port 9092 on your Raspberry.
You can see what happened by:
2. sudo docker container ls But there is another, much more impressive way to experience it.
Phase 4. Start the InterSystems IRIS for Health Fhirserver
Start a webbrowser in your network, for example on your PC en go to:
<ip-address-of-your-Raspberry>:9092/csp/sys/UtilHome.csp .
You’ll see the managementportal of IRIShealth. The portal automatically adjusts to the language on your PC.
The standard account is _SYSTEM (with a leading underscore) and the initial password is SYS (without underscore). IRIS requires to change the password immediately.
Now you’re able to configure the IRIS for Health FHIRserver and start it up, following the instructions on: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=HXFHIR_server_install
You have to configure a “Foundation” and to define an “Endpoint” (FHIR 3 or 4).
The “endpoint” will result in the URI on which you can access the FHIRserver. In my case the “Patient” resource is on http://192.168.1.29:9092/csp/healthshare/fhironpi/fhir/r4/Patient (doesn’t work from outside!)
Conclusion
Has this been worth the trouble? Yes, more than that! To start with: there wasn't much trouble. I didn't succeed with Raspbian, but that was solved easily. And having the IRIS-for-health platform running on device like a Raspberry Pi is impressive. All the dashboards (DeepSee), dataconversion-tools, Ensemble (an Enterprise Service Bus plus a lot of extra tools), CSP-pages and Caché (a multi-dimensional database) seem to be available to experiment with and even I.know for natural language processing is visible in the management portal. The IRIS-for-health platform offers much more than a FHIRserver allone and far too much to describe in one article.
For me personally IRIS-for-health has an extra bonus since I worked (as an architect) with Ensemble almost as soon as it was there and apart from that IRIS-for-health's earliest start was in the second half of the 2-th century. The MUMPS development environment for healthcare applications (MUMPS: Massachusetts General Hospital Utility Multi-Programming System) ran mostly on VAX computer systems of Digital Corp. And my professional career in IT started at that time with VAXes.
MUMPS, Caché, Ensemble and today the IRIS-for-Health platform have great stability and require relatively modest support and maintenance. The documentation of the InterSystems products is extensive and easy to find.
I will experiment more with IRIS and the FHIRserver and I promise to at least publish one more article: about my "struggle" with a strict adherence to the FHIR-standard!
Stay healthy, keep thinking, play on!
Bob Nice article!
Thanks for sharing, Bob ;) very good attempt, genius idea. How stable is this scheme? Interesting article and well written. What could the potential use cases be? Can the functionality be stripped down to bear minimum to reduce the application foot print and enhance the integration capabilities for smart home devices? Hi Yankai, thank you. The InterSystems FHIR server as I wrote about is now running for 20 days without any interruption. It is -of course- not heavily used, only for my own testing purposes. A Raspberry Pi is IMHO not suitable for critical applications like airplane-control, critical healthcare systems etc and I don't think InterSystems will support "IRIS on Raspberry" . But the combination of the Raspberry Pi and IRIS appears to me, based on my modest usage, as to be pleasantly stable. Which is in line with my earlier experiences with Caché and Ensemble.
ubuntu@Ubuntu01:~$ uptime 15:26:47 up 20 days, 3:19, 1 user, load average: 0.02, 0.03, 0.00 Thank you Ravi. Some use cases could probably be found in (portable) healthcare devices that don't need 99.998% of 24x365 availability. I don't think stripping down functionallity would be necessary since this would require development and maintenance of a "special Raspberry" version of IRIS. The licensing part would be another story ;-). But because small computers like the Raspberry Pi (and Raspberry Zero) are so powerful today (and inexpensive) a lot of new applications can be thought of. If there are situations (I think mostly in the care/healthcare area) where FHIR and integration are needed in a small platform this certainly could be an option. I don't think however that for really critical applications, where health, lifes or welbeing can be dependant of this would be an advisable direction. And -from another perspective- we should take care not to desperately find a problem for this solution. Over all I'm already very happy with the opportunity to play around with IRIS and FHIR without big expenses. IRIS isn't suitable (nor meant to be) running on the edge or inside containers for that matter.As its name implies it is a Data *Platform* a framework on its own for running large-scale mission-critical applications.IRIS Agents or ECP Clients or whatever you will call them could extend IRIS to the realm of containers and edge applications.
Even in the global masters rewards where they have an RPi available with IRIS preinstalled, it's running on Ubuntu, not Raspbian, so that part didn't surprise me.
As python becomes more widely adopted in IRIS and word gets out about it, I won't be surprised if some of the RPi community shows up with some pretty cool projects using IRIS Community since a lot of them are python developers. InterSystems tends to lean into health care as the main thing, but there you've got a device that you can connect all kinds of sensors and gizmos to that may lend themselves well to other fields. Let's not be hasty dismissing it because it can't run an entire hospital.
Announcement
Janine Perkins · Nov 4, 2020
Get your hands on our technology with On-Demand Experience Labs available now through November 6th. Each lab is paired with an office hour session scheduled for this week. Learn more about how you can get hands-on with our technology.
Join the office hours to get answers your questions about the labs, talk about how the technology fits into your environment, and discuss implementation. Sign up for the Office Hours/On-Demand Experience Labs today. The labs have gotten great reviews so far!
Experience Lab Topics
InterSystems ObjectScript Development in Visual Studio Code
HealthShare Provider Directory: Sharing Clean Provider Data with FHIR
Getting Started with InterSystems Reports
Please complete the on-demand labs before arriving for office hours.
Article
Mihoko Iijima · Mar 5, 2021
**This article is a continuation of this post.**
In the previous article, we reviewed how to create and define messages used to send and receive data between components.
In this article, I will explain how to create a business operation from the component creation methods.
* Production
* Message(previous article)
* **Components**
* Business Services
* Business Processes
* **Business Operations**
We will quickly check the code by referring to the sample.。

| Component Name | Role |
|---|---|
| Start.FileBS | A business service that uses file inbound adapter to read files placed in a specified directory at regular intervals. |
| Start.NonAdapterBS | Business services that allow applications and users to input information directly without using an adapter. |
| Start.WS.WebServiceBS | Business services that allow people to enter information using web services. |
| Start.WeatherCheckProcess | A business process that controls the procedure for acquiring weather information and then registering it in a database. |
| Start.GetKionOperation | Business operation to pass the city name to the web service that provides weather information and sent back. |
| Start.SQLInsertOperation | Business operations using SQL outbound adapters to request registration of weather and purchase information into the database. |
| Start.InsertOperation | Business operations that perform updates to tables in InterSystems IRIS without the use of adapters. |
Note: BS stands for Business Services, BP for Business Processes, and BO for Business Operations.
You need to write ObjectScript in Business Services and Business Operations and can be created in VSCode or Studio. Business Processes can also be made in the Management Portal (see this article for more information on using VSCode).
There is no particular order of creation, but the external site to be connected to is a public site and can be used immediately in this sample. In this case, it is convenient to start with the business operation to make testing easier.
After creating the components, there are test page in the production for business processes and business operations.
However, testing is disabled by default in the production definition to avoid random testing in the production environment.
For details on how to allow "Testing Enables" in Production, use the following settings (the sample Production has been set to "Testing Enabled" in advance):

### 1) Business Operations
In the sample, two types of business operations are provided.
One operation is to pass the city’s name to an external Web API via REST and request the acquisition of weather information. The other operation is to give the weather information and the name of the purchased product to the InterSystems IRIS database and ask for the update process.
#### 1)-1 REST Business Operations
Let’s start by creating an operation that calls an external Web API via REST.
This operation starts the GetKion() method when a Start.Request message is entered, queries an external site, and returns the weather information in a Start.Response message.
See here for code details.
To create a business operation for REST, inherit from **EnsLib.REST.Operation** .
```objectscript
Class Start.GetKionOperation Extends EnsLib.REST.Operation
```
Inheritance of this class provides the following methods in IRIS that match the HTTP methods. Please refer to the documentation for details.
GetURL()— used for HTTP GET operations.
PostURL()— used in HTTP POST operations.
PutURL()— used in a HTTP PUT operations.
DeleteURL()— used in a HTTP DELETE operations.
For REST, use the adapter **EnsLib.HTTP.OutboundAdapter**. Set the adapter name to the **ADAPTER** parameter and the Adapter property, as shown in the example.
The INVOCATION parameter configures the **Queue**.
```objectscript
Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
Property Adapter As EnsLib.HTTP.OutboundAdapter;
Parameter INVOCATION = "Queue";
```
It is necessary to specify the OpenWeather API key to be obtained at runtime. There is a way to display settings that vary depending on the environment in the production settings.
The procedure is as follows:
1. Define the properties
2. Specify the name of the property you created in the SETTINGS parameter (if there are multiple properties, separate them with commas). Optionally, you can also specify a category (use “property name: category name”).
An example code is shown below.
```objectscript
/// APIキーを指定します
Property appid As %String;
/// specify lang option for OpenWeather API (default = ja = japanese)
Property lang As %String [ InitialExpression = "ja" ];
Parameter SETTINGS = "lang:OpenWeatherMap,appid:OpenWeatherMap";
```
The Production Settings page displays the following. The description in the line immediately before the property definition is also displayed in the production settings page, as shown in the figure.

Then, we will review the message map, which is an essential setting for business operations.
.png)
The above definition is defined so that the GetKion() method will work when the **Start.Request message** is **sent**.
In the GetKion() method, the city name can be obtained from the request message’s Area property passed as input information.
By setting the city name as a parameter of the URL published by the external Web API and calling it, you can obtain weather information.
The HTTP server and URL settings are configured in the Production page of the Management Portal. To obtain the settings, use the **Adapter** property provided by the HTTP outbound adapter.
Example) to specify a URL, use ..Adapter.URL
Use the GetURL() method provided by Business Operations for REST to call an external site. The first parameter is the URL to be executed (i.e., the URL specified in the required parameters such as city name). The second parameter is the HTTP response with parameters passed by reference.
Since the weather information is stored in JSON format in the HTTP response, the operation is complete when the data is registered in the response message (=pResponse).

The response message class’s name is specified in the second parameter of the created method by passing reference.
```objectscript
Method GetKion(pRequest As Start.Request, Output pResponse As Start.Response) As %Status
```
To return a response message to the caller, create an instance of the response message, store it in the second parameter variable (_**pResponse**_), and set the necessary information in the properties.
```objectscript
set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"
set pResponse.Area=weatherinfo.name
// this code is fit to Japan time because weatherinfo.dt is UTC
set unixEpochFormat=weatherinfo.dt+32400
set dt=$system.SQL.Functions.DATEADD("s",unixEpochFormat,"1970-01-01 00:00:00")
set pResponse.AreaPublicTime=dt
```
Since HTTP responses from external sites are returned in JSON format, the stream that could be obtained from the HTTP response is used to convert it into a dynamic object that is convenient for JSON operations within IRIS.
```objectscript
set weatherinfo={}.%FromJSON(tHttpResponse.Data)
```
An example of a returned JSON string is shown below:
```json
{
"coord": {
"lon": 135.5022,
"lat": 34.6937
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"base": "stations",
"main": {
"temp": 11.38,
"feels_like": 8.33,
"temp_min": 11,
"temp_max": 12.22,
"pressure": 1007,
"humidity": 62
},
"visibility": 10000,
"wind": {
"speed": 2.57,
"deg": 220
},
"clouds": {
"all": 75
},
"dt": 1611820991,
"sys": {
"type": 1,
"id": 8032,
"country": "JP",
"sunrise": 1611784750,
"sunset": 1611822143
},
"timezone": 32400,
"id": 1853909,
"name": "Osaka",
"cod": 200
}
```
The maximum temperature, minimum temperature, and weather can be obtained as follows:
```objectscript
set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"
```
If you would like to learn more about JSON manipulation in IRIS, please refer to this article and documentation.
Now, let’s use the production testing tool to see if we can get the weather information properly.
Open the Production page (**Management Portal> Interoperability> Configuration> Production**), click Start.GetKionOperation, and then click the **"Test" button** on the "**Action**" tab.
Specify a city name (Naha, Sapporo, Nagano, Shinjuku, etc.) for **Area**, and click the “**Run Test Service**” button.
You can see the test results below, with the maximum and minimum temperatures and the weather listed.

Continue to learn how to use the Trace page.

Selecting a horizontal rectangle such as  in the left screen causes the information, in the right screen, to change.
Messages sent and received during the system integration process are automatically saved in the database. Using the message Visual Trace page, you can see in detail what messages were passed to which components in chronological order and whether there was a response or not.
Besides, if an error occurs,
“An error occurred while sending/receiving/receiving □ message to the component from ○ to △.”
a red mark will appear where the error occurred so that you can see it. Of course, in addition to tracing, we also have an event log page.
**(Management Portal > [Interoperability] > [View] > [Event Log])**
Moving on, let’s check out the operation to request an update to the database.
#### 1)-2 Business operations that request updates to the database
The sample provides two types of operations: Start.SQLInsertOperation and Start.InsertOperation.
Each of them is an operation to request a database update, but Start.SQLInsertOperation uses the SQL outbound adapter, while Start.InsertOperation has no adapter.
The difference between the two is,
operation using the SQL outbound adapter is assumed to be accessed via ODBC/JDBC connections so that the database connection destination can be switched in the production settings.
For operations that do not use adapters, it is assumed that the DB update target is a database within the range of visibility from the production configuration and that no connection destination switching occurs.
The IRIS database can be used to store arbitrary data during system integration. However, suppose the system configuration changes for some reason a few years later, and the need to connect to a database on a different server arises. In that case, the operation without the adapter cannot be continued.
On the other hand, operations using the SQL outbound adapter can be operated if there are no changes processing the content of the destination specification (if there is no problem with the SQL statement to be executed, it can be connected to databases of different products).
During system integration, there may be cases where connection information changes due to external system reasons. Therefore it is vital to have a design that can flexibly respond to changes. For this reason, it is recommended to create components that support external connections in a loosely coupled manner.
However, suppose there is no change in the configuration in the future. In that case, you can access the database in IRIS without using the ODBC/JDBC connection, so you can choose to use the adapter or not, depending on your usage.
Let’s take a look at the Start.SQLInsertOperation code that uses the adapter.
The adapter used in the sample is an SQL outbound adapter, which allows you to request the database to execute SQL statements.
Different adapters provide different methods. Please refer to the documentation for details on the methods provided by the adapters.

Then review the code for Start.InsertOperation, without using the adapter.
Whether you use an adapter or not, the message map and method definitions for the operation are required. If you do not use an adapter, you do not need to define the “Paramter” and “Property” for the adapter.
.png)
Business operations without adapters: In Start.InsertOperation, SQL is executed using ObjectScript (the comment statement is the update process in object operations).
The implementation is satisfactory if the database to be updated is not detached from IRIS.
We found out that operations using adapters provide a reliable method to request processing from the destination. We also confirmed that it is possible to create operations without using adapters and freely write code for them.
Next, I would like to explain how to create a business process that calls the operations for getting weather information and updating the database in the correct order.