Clear filter
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 discussed the development of business processes, which are part of the components required for system integration and serve as a production coordinator.
This article will discuss creating a business service, which is the information input window for production.
* Production
* Message
* **Components**
* **Business services**
* Business processes(previous post)
* Business operation
And finally, the last component of “Let's Use Interoperability!”
The business service provides a window of input for information sent from outside IRIS, with or without using the adapter for external I/F.
There are three types of business services in the sample (links in parentheses are links to the sample code):
1. [Business services for files using inbound adapters](#fileinboundadapter)(Start.FileBS)
2. [Business services for Web services using the SOAP inbound adapter](#soapinboundadapter)(Start.WS.WebServiceBS)
3. [Business service called by stored procedure or REST without using an adapter](#nonadapter)(Start.NonAdapterBS)
Different connection methods used for inputting information will only increase the number of business services; however, the processing done within a business service is
Create a request message to be sentusing externally inputted information and simply call the business component
It's effortless.
Now, let's outline how to create components that use file-inbound adapters.
Business services are written in scripts, which can be created in VSCode or Studio (see this article on using VSCode).
### 1. Business services for files using inbound adapters(Start.FileBS)
If you create a class in VSCode, you should create a class that inherits from Ens.BusinessService. As for adapters, you can use the **ADAPTER** parameter as ADAPTER class name (e.g., specify a file-inbound adapter class).
If you do not use the adapter, no configuration is required.
```objectscript
Class Start.FileBS Extends Ens.BusinessService
{
Parameter ADAPTER = "EnsLib.File.InboundAdapter";
```
In the file-inbound adapter, you can specify the directory to be monitored in Settings→File Path for the production's business service.

If the file located in the "File Path" matches the information specified in the "File Spec," it opens the file as a stream object. It defines it as the first variable when calling the business service **ProcessInput()**.
When **ProcessInput()** is started, **OnProcessInput()** is automatically called. OnProcessInput() is passed directly to **OnProcessInput()** with the parameters passed to ProcessInput().

In **OnProcessInput()** the initial statement gets the information from the file stream object, which is passed as the first parameter, then creates a message to be given to the next component, writes the process of calling the next component, and completes the basic logic.
* * *
【Memo】For Studio, launch the Business Services Wizard in the New Creation menu, select the adapter and press the Finish button.
* * *
The **OnProcessInput()** method definition is as follows:
```objectscript
Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %RegisteredObject) As %Status
```
**pInput** is provided with an instance of the **%Stream.FileCharacter** class for text files or the **%Stream.FileBinary** class for binary files.
In the sample, a file in text format will be inputted, and we have written it to accept multi-line requests and one request per line.
**AtEnd property** is set to 1 when EndOfFile is deteced. You can use this property to stop loop.
In a loop, we read the lines using the **ReadLine()** method, which enables us to obtain information about the contents of the file one line at a time (see the documentation for file adapter details).
Compose the message, retrieving information line by line. Then, we execute the ..SendRequestAsync() method, which calls the other components.
When executing the method, the first parameter should be the name of the component you want to call as a string, and the second parameter should be the request message you have created.
Note that the ..SendRequestAsync() is an asynchronous call and does not wait for a response.
Memo:There is also SendRequestSync() for synchronous calls.。
The sample code is as follows:

Reference:explanation of the usage of the $piece() function in the above example text
$piece(“string”, ”delimiter mark”, ”position number”)
The function to set/get a string with a delimiter, in the sample, to get the first and second value of comma-separated data, is written with the following syntax:
```objectscript
set request.Product=$piece(record,",",1)
set request.Area=$piece(record,",",2)
```
Now, let's check the function of Start.FileBS as it appeared in the above description.
In the sample production, the "File Path" was set to **/irisdev/src**, and the "File Spec" was set to **check.txt**. Either prepare the same directory or change it to a different directory and register the sample data in the check.txt file using the following format: purchased product name, name of the city.
※If you are using the sample container, please rename [Test-check.txt] in the src directory under the directory created by the git clone.


### 2. Business services for Web services using the SOAP inbound adapter (Start.WS.WebServiceBS)
Next, we will outline the creation of business services for Web services.
The Business Service Class for Web Services acts as a Web Service Provider = Web Service Server.
In the sample, we have two parameters in the Web service method for this sample production to have information sent from the Web service client. The web method uses the data entered in the parameters to create a message class and call other components.

When you define a Web service class, a test screen is created. However, it is not shown by default.
Log in to IRIS (or start a terminal), go to the namespace where the production is located and do the following:
For your reference:Access to the Catalog and Test Pages
Here is a sample code configuration in the setting where the container was started with docker-compose up -d (run in the %SYS namespace)
set $namespace="%SYS"
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInfo")=1
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInvoke")=1
【Attention】Please note that the sentence is case-sensitive and should be written with care. Also, depending on the namespace in which the product is used, the specified script changes. The example sentence is written on the assumption that the sample is imported into the USER namespace.If you import the sample code into the ABC namespace, the fourth subscript should be "/csp/abc/."
Once the configuration is complete, go to the following URL:
http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls

If you want to provide the WSDL to your Web services client, specify WSDL=1 at the end of the following URL
http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls?WSDL
### 3. Business services called by stored procedures or REST without using adapters(Start.NonAdapterBS)
Next, we will introduce the Business Service without adapters (Start.NonAdapterBS).

For business services that use adapters, the adapter calls the business service's ProcessInput() method to detect the information.
If you don't use adapters, you can still call the ProcessInput() method, but this method is not public. Therefore, if you implement a business service that does not use adapters, you will need to consider ProcessInput().
The sample utilizes the following two methods:
* Stored procedures(Start.Utils)
* Dispatch Class for REST(Start.REST)→This is the service we ran in this article.
Now, here's an example of a stored procedure.

After adding a business service (Start.NonAdapterBS) that does not use adapters to the production (state added in the sample), run the following stored procedure
call Start.Utils_CallProduction('piroshki','Russia')

A resulting trace of the running result is as follows:

Next, here is an example of creating a dispatch class for REST:

The XML described in the XData Url Map defines which methods are called in response to the URL at the time of the REST call.
The example describes a definition that calls the **WeatherCheck()** method when the URL of the **/weather/first parameter (purchased product name)/ second parameter (name of the city)** are provided in the **GET request**.
```objectscript
```
Then, define the base URL for the above URL in the Management Portal's Web Application Path Settings screen, and it is complete.
See this article for more details on the configuration.
Once it is ready, try to run the information using a business service that allows you to send the REST information.
Example)http://localhost:52773/start/weather/Takoyaki/Osaka


If you do not use an adapter, as ProcessInput() cannot be called directly from outside, we have created an object for the business service in the logic executed through REST or stored procedures (using the CreateBusinessService() method of the Ens.Director class) and called ProcessInput()
If you use an adapter, the adapter detects the input and stores the information in a unique object and passes it to the business service. In contrast, if you don't use an adapter, the rest is pretty much the same, only the difference is in the above-mentioned part of the process.
The business service is simply designed to use the information entered outside IRIS to create request messages and call business components.
Throughout the sample production, we were able to see the following:
Different components play different roles in making a production run (business services, business processes, business operations).
To transmit information between components, use the message.
Messages are stored in the database unless deleted and thus can be traced at any time.
Some adapters simplify the process of around the connection.
These are the basic operations on how to use Interoperability in IRIS.
There are also record maps (see: FAQ TOPIC) and data conversion tools that are useful for input and output of CSV files and other format-specific files.
As well as this series, there is also an article on simple IoT applications developed with InterSystems IRIS using Interoperability. Please check it out.
Besides, IRIS for Health also supports FHIR and HL7 (including SS-MIX2) transmissions.
I would be pleased to explain it in another post. If you have something of interest to share, please leave a comment!
Finally, training courses are also available to learn how to use Interoperability.
If you'd like to take the time to try it out with an instructor, please consider joining one of our training courses!
Announcement
Anastasia Dyubaylo · Dec 12, 2020
Hey Developers,
Please welcome the new video by @Ron.Sweeney1582 on InterSystems Developers YouTube:
⏯ InterSystems IRIS Native Python API in AWS Lambda
In this video, you will learn the seamless InterSystems IRIS functionality in the AWS Serverless ecosystem.
Leave your questions in the comments to this post.
Enjoy and stay tuned!
Announcement
Olga Zavrazhnova · Dec 14, 2020
Hi Developers,
We invite you to take a few minutes and leave a review about your experience with InterSystems IRIS on the TrustRadius. Submitting a review requires time and effort, so we'll be glad to reward you with a $25 VISA Gift Card for a published review! UPDATE: this promotion ended in 2021.
To get a $25 VISA card from InterSystems follow these steps:
✅ #1: Follow → this link ← to submit a review (click on the "Start My Review" button).
✅ #2: Your review will have a title (headline). Copy the text of the headline of your review and paste it in this challenge on Global Masters.
✅ #3: After your review is published you will get the $25 VISA Cards and 3000 points on Global Masters.
Please note:
TrustRadius must approve the survey to qualify for the gift card. TrustRadius will not approve reviews from resellers, systems integrators, or MSP/ISV’s of InterSystems.
TrustRadius does not approve the reviews that have been previously published online.
Done? Awesome! Your gift card is on the way!
Hmm. The link to GM says:
Ooops!
Sorry friend, looks like this challenge is no longer available.
My title: " Never say IMPOSSIBLE with IRIS "
Hi Robert, thank you for submitting a review for us! I made some corrections to the challenge, so the link should work for you now. THX. Just verified it. Hi, the GM link is broken. It says:
Ooops!
Sorry friend, looks like this challenge is no longer available. here it is:https://www.trustradius.com/reviews/intersystems-iris-2020-12-15-16-53-48 Hi Akshay,I see you registered recently - welcome to Global Masters! Could you please complete this challenge first? After it's done the TrustRadius challenge will be unlocked for you. Thank you, Robert! Your gift card is already opened for you on GM Thanks for your help. Here's the published review! https://www.trustradius.com/reviews/intersystems-iris-2020-12-23-14-00-04 Hi Akshay! So great, thank you! Your reward is opened for you on Global Masters. Happy New Year! There seems to be some error. I clicked on Redeem, and my card just disappeared. It is not showing in the Rewards section either! That's the way it works. You consume it once.You'll get a mail once processed. But probably not this year Ah no issues, I'll wait until next year. I've got nothing but time. Thanks though!! I can't see any challenges... What do I do now? Great Unable to paste in challenge on Global Master
Announcement
Anastasia Dyubaylo · Jan 20, 2021
Hi Community,
We are pleased to invite you to the upcoming webinar in Spanish:
➡️ Developing a chatbot with Google Dialogflow, Telegram and InterSystems IRIS
Date & Time: February 2, 4:00 PM (CET)
During the webinar:
you will learn how to develop a chatbot that will permit users to interact with an appointment system. We will coordinate the appointment system's backend and the Google Dialogflow and Telegram services with InterSystems IRIS.
you will know how to consider adding a chatbot to help users to use your services in a smarter way.
we will go over the required concepts to implement a chatbot, what is needed and how you can coordinate the external services.
Speaker: @Alberto.Fuentes, Sales Engineer, InterSystems Iberia
Note: The language of the webinar is Spanish.
We are waiting for you at our webinar!
➡️ Please register here!
Article
Botai Zhang · Jan 25, 2021
Built in multi model integration using InterSystems iris data platform
Solution of hospital information inquiry business
Integration of hospital information query business solutions using InterSystems IRIS data platform with built-in multiple models
### Summary:
With the gradual improvement of hospital information construction, there are more and more hospital subsystems, and more and more interfaces between systems. At the same time, the interface cost is increasing, and the management work is becoming more and more complex. Among them, the number of query business interfaces is gradually increasing according to the business type differentiation, which brings problems such as large amount of interfaces, heavy development work, code redundancy, difficult maintenance and so on. In view of this dilemma, we use InterSystems IRIS data platform built-in multi model integration of hospital information query business solutions. The application can be configured to complete the query business interface implementation, greatly reducing the key operation cycle of development, maintenance, implementation and other projects.Key applications: IRIS, Rest API, ObjectScript, Globals, SQL, data lookup tables
### Application model and Application Introduction:
1. Using the model 1. Globals (key-value) Globals is a sparse multidimensional array that can be stored and managed in IRIS database. You can use ObjectScript and native APIs to work with globals. **Tools:** https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_MANAGING **Application:** According to the key value pair of globals, the application program has the characteristics of fast access speed. It is applied in the rest dispatch class and BP process management of this program, which solves the problem of frequent value taking, slow speed and configuration operation on the front page of the lookup table, such as storing SQL model, service configuration information and so on. 2. SQL access InterSystems iris provides SQL access to data through ObjectScript, rest API and JDBC **Tools:** https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GSQL_smp **Application:** In the query business, the three-party system does not cooperate with the interface transformation, which leads to the difficulty of interface implementation. At this time, we use iris embedded model ObjectScript, rest API and JDBC to realize SQL access to data and establish business interface. 3. Object access Through ObjectScript and rest API, InterSystems iris provides a way to store and change object instances in globals. **File:** https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_multimodel_object **Application:** During the whole interaction process, the InterSystems iris object is manipulated directly. ObjectScript class definitions are often used as templates for creating objects such as patients, departments, or healthcare workers. 2. Establish application cases (this application takes patients as an example) 1. application construction: 1. basic environment Iris version information: iris for windows (x86-64) 2020.1 (build 215u) mon Mar 30 2020 20:14:33 EDT \[Health Connect:2.1.0] Iris has java and JDBC environment Postman can be used for testing 2. installation steps ① Establish rest Service New web application → configure dispatch class → configure permission. This step can be seen in the following pictures: application running / webreplication (query). PNG and webreplication (role). PNG ② Configure sql-jdbc Establish SQL connection, connect to test database mysql, import test jhip_ patient_ info.sql ③ Configuration lookup table Global-^ Ens.LookupTable Look up table file import in ④ Import code Import the code in applicationcode, compile and open production, Note: modify Bo configuration information (DNS), configure Java gateway, etc 2. application process Omitted (see PDF) 3. Application Test The postman tool (or other tools) can be used for test verification Postman can import Query.postman_ collection.json , change IP, port number information and URL for testing. 4. application summary This application takes patient service query as a case, which can be configured with inbound and outbound protocols, query conditions and business types to solve the problem of query business interface.
Finally, if you agree with this solution, please vote for the application in the inter systems multi model database contest.
Voting links
Application name:HealthInfoQueryLayer
Thank you very much for your support!
Announcement
Shane Nowack · Apr 11, 2022
Get certified on InterSystems CCR!
Hello Community,
After beta testing the new CCR Technical Implementation Specialist exam, the Certification Team of InterSystems Learning Services has performed the necessary calibration and adjustments to release it to our community. It is now ready for purchase and scheduling in the InterSystems certification exam catalog. Potential candidates can review the exam topics and the practice questions to help orient them to exam question approaches and content. Passing the exam allows you to claim an electronic certification badge that can be embedded in social media accounts such as Linkedin.
If you are new to InterSystems Certification, please review our program pages that include information on taking exams, exam policies, FAQ and more. Also, check out our Organizational Certification that can help your organization access valuable business opportunities and establish your organization as a solid provider of InterSystems solutions in our marketplace.
The Certification Team of InterSystems Learning Services is excited about this new exam and we are also looking forward to working with you to create new certifications that can help you advance your career. We are always open to ideas and suggestions at certification@intersystems.com.
One final note: The Certification Team will be proctoring free certification exams ($150 value) at Global Summit 2022. All of the products in our exam catalog will be available. The summit will be in Seattle, WA from June 20-23. All individuals registered for the Summit will be eligible for one free certification exam (that must be taken during the Summit at one of the live proctoring sessions).
Looking forward to celebrating your success,
Shane Nowack - Certification Exam Developer, InterSystems @Shane.Nowack - thank you for this tremendous news!! A hearty congratulations to you and to everyone who helped to get to this moment of full certification exam launch!
@Evgeny.Shvarov / @DC.Administration - Does the D.C. provide a way to display / share InterSystems Professional Certifications in a member's profile? If so I would love to see the instructions, and if not then perhaps we could consider it an enhancement request?
A second request would be to see a list of everyone who has publicly listed a specific certification (e.g. a catalog of experts). Has any thought been put into that? @Evgeny.Shvarov / @DC.Administration - THANK YOU for the feature that allows you to display your professional certifications in your profile, as well as the check-mark on your profile pic .... love it!
Has any thought been given to the second idea of being able to see a list of people who publicly listed a specific certification? That would make the experts more discoverable. Hi Ben,
Glad to hear you enjoyed our latest updates ;)
It seems worth implementing smth special to highlight the list of our certified members on one page.
p.s. To make your ideas more visible, feel free to submit them to our InterSystems Ideas portal. We constantly review ideas from this portal and try to follow the feedback of our users.
And thanks for your constant feedback and ideas!
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.HamonPereira
🥉 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.HamonPereira
@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!!!! 🎉
Question
Oleksandr Kyrylov · Mar 3, 2022
Hello dear community
I tried to run windows command from an intersystems terminal using objectscript routine.
routine :
Zpipe quit ; CPIPE example to run host console command
cmd(command="",test=0) ;
if command="" set command="dir"
quit $$execute(command,test) execute(cmd,test) Public {
set dev="|CPIPE|1"
set $zt="cls"
set empty=0
open dev:cmd:0
write:test $test,!
else write "pipe failed",! quit 0
while empty<3 {
use dev read line
set empty=$s($l(line):0,1:$i(empty))
use 0 write line,! ;;; or do any kind of analysis of the line
} cls ;
set $zt="" use 0
close dev
if $ze'["<ENDOFFILE>" w $ze,!
quit $t
}
In InterSystems terminal:
do cmd^pipe("cmd /c ""cd /d E:\repos\twilio-video-app-react && call npm run build""")
When i run the command directly in windows shell with admin privileges it works.
The routine runs the command without admin privileges and that causes error:
question:
Is there way to add admin privileges to intersystems?
Thanks! I believe the privilege comes from the OS user that is launching Terminal.
Have you tried running Terminal as an Admin and seeing if runs as expected?
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.
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 · Mar 18, 2022
Hi Community,
We're pleased to invite you to the upcoming webinar in Spanish called "Exploring the new Embedded Python feature of InterSystems IRIS"
Date & Time: March 30, 4:00 PM CEST
Speaker: @Eduardo.Anglada, Sales Engineer, InterSystems Iberia
The webinar is aimed at any Python developer or data scientist.
At the webinar, we'll discover the potential of Python, the new programming language added to IRIS. Python is at its peak, increasing its popularity every year. It is now used by +1.5M developers around the world, and has thousands of libraries to perform almost any function needed. It is also the most widely used language in data science.
During the webinar, we'll explain how to create anonymous data and to develop interactive dashboards.
If you are using Python, don't miss it! You'll have no excuses to avoid trying InterSystems IRIS.
👉 Register today and enjoy!
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
Anastasia Dyubaylo · Dec 15, 2021
Hey Developers,
Learn about the InterSystems Partner Directory, its value to partners, and how to join:
⏯ Partner Directory New Services for InterSystems Partners & End Users
🗣 Presenter: Elizabeth Zaylor, Partnerships & Alliances, InterSystems
See you at https://partner.intersystems.com!
Announcement
Olga Zavrazhnova · Dec 5, 2021
Hey Community,
This is the time to show our passion for the InterSystems Developer Community! We're so proud to announce that InterSystems Global Masters is a finalist for an Influitive BAMMIE Award for Most Passionate Community🤩🤩🤩
Certainly, this is because of you, our great community members!
BUT, for us to win, we'll need to get more votes than other finalists - so we need your votes!
🚀 PLEASE press "You've got my vote" > in this challenge <
Vote every day till December 9 to show that we have the most engaged community!
Let's WIN together!
3-days left! Video from Olga :)
Hey Community, only 3 days are left to vote for Global Masters! Community!
We really need your support!!! Please vote for us 🙏🏼 Vote Community! Vote, please! We have to support our dev community! Today is the last voting day! Please press the button for us in this challenge https://globalmasters.intersystems.com/challenges/2982Thank you, Community, for support! Fingers crossed!