Clear filter
Article
Dmitry Maslennikov · Apr 19, 2021
Hello everyone, let me introduce, one of my latest projects. It is a DataSource plugin for Grafana, which can connect directly to InterSystems IRIS and gather any data (in the future).
Features
Can show SAM metrics with periodic update, with a history, the metrics gathered by Grafana directly and only when requested while displayed
Display messages.log and alerts.log
Application errors from ^ERRORS global
Features that can be added later
Any SQL SELECT query for tables with or without DateTime fields
View some data directly from any Global
Call for any custom SQL Query on the IRIS side
Even probably MDX Queries
So, if you have some custom logic for logging within your application, it would be possible to connect Grafana to these logs and display it there.
Testing
To test it by yourself, you can clone the repo, and start the environment with docker-compose. The docker-compose environment is configured on using ports 3000, 3081, 3082; if those ports already in use in your system, just change them in the docker-compose.yml file.
git clone https://github.com/caretdev/grafana-intersystems-datasource.git
cd grafana-intersystems-datasource
docker-compose up -d
After pulling images, it will start Grafana and IRIS in two containers.
Open Grafana by link http://localhost:3000/
Go to DataSources, it will have InterSystems IRIS connection, added by autoprovision.
Diving inside will give a simple form with basic settings, and the Test button, to check the connection. When IRIS will start it should show green OK.
Let's create some Dashboard and Panel
Select Query Type: Metrics
Let's select iris_db_latency for instance
By default update interval is depends on a selected time interval, but can be changed in Query options, field Min Interval
Log Files and Application Errors can be shown with Logs Vizualization and as a Table
Please vote for the project
You can contact me if you would like to get more functionality in the plugin. Btw, this project is written in Go, and uses a freshly developed go-irisnative project, as a connector to IRIS. With Go I can read and change data directly in globals, execute SQL, and work with objects. Some example of code in Go
package main
import (
"fmt"
"os"
"strings"
"github.com/caretdev/go-irisnative/src/connection"
)
func main() {
var addr = "localhost:1972"
var namespace = "%SYS"
var login = "_SYSTEM"
var password = "SYS"
connection, err := connection.Connect(addr, namespace, login, password)
if err != nil {
println("Connection failed:", err.Error())
os.Exit(1)
}
defer connection.Disconnect()
// Kill ^A
connection.GlobalKill("A")
// Set ^A(1) = 1
connection.GlobalSet("A", 1, 1)
// Set ^A(1, 2) = "test"
connection.GlobalSet("A", "test", 1, 1)
// Set ^A(1, "2", 3) = "123"
connection.GlobalSet("A", 123, 1, "a", 3)
// Set ^A(2, 1) = "21test"
connection.GlobalSet("A", "21test", 2, 1)
// Set ^A(3, 1) = "test31"
connection.GlobalSet("A", "test31", 3, 1)
var globalFull = func(global string, subs ...interface{}) string {
return fmt.Sprintf("^A(%v)", strings.Trim(strings.Join(strings.Split(fmt.Sprintf("%+v", subs), " "), ", "), "[]"))
}
var queryGlobal func(global string, subs ...interface{})
queryGlobal = func(global string, subs ...interface{}) {
for i := ""; ; {
if hasNext, _ := connection.GlobalNext("A", &i, subs...); !hasNext {
break
}
var allSubs = []interface{}{i}
allSubs = append(subs, allSubs...)
hasValue, hasSubNode := connection.GlobalIsDefined("A", allSubs...)
if hasValue {
var value string
connection.GlobalGet("A", &value, allSubs...)
fmt.Printf("%v = %#v\n", globalFull("A", allSubs...), value)
}
if hasSubNode {
queryGlobal("A", allSubs...)
}
}
}
queryGlobal("A")
}
Article
Eduard Lebedyuk · Jun 3, 2021
> InterSystems Reports is powered by Logi Report (formerly named JReport), a product of Logi Analytics. InterSystems Reports is supported by InterSystems IRIS and InterSystems IRIS for Health. It provides a robust modern reporting solution that includes:
>
> - Embedded operational reporting which can be customized by both report developers and end users.
> - Pixel-perfect formatting that lets you develop highly specific form grids or other special layout elements for invoices, documents, and forms.
> - Banded layouts that provide structure for aggregated and detailed data.
> - Exact positioning of headers, footers, aggregations, detailed data, images, and sub-reports.
> - A variety of page report types.
> - Large-scale dynamic report scheduling and distribution including export to PDF, XLS, HTML, XML, and other file formats, printing, and archiving for regulatory compliance.
>
> InterSystems Reports consists of:
>
> - A report designer, which provides Design and Preview Tabs that enable report developers to create and preview reports with live data.
> - A report server which provides end users browser-based access to run, schedule, filter, and modify reports.
From [InterSystems documentation](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GISR_intro).
This article focuses on the Server part of InterSystems Reports and provides a guide on running Report Server in containers while persisting all the data.
# Prerequisites
Before we start, this software must be available for the InterSystems Reports to work:
- [Docker](https://docs.docker.com/engine/install/) - while InterSystems Reports can work *without* Docker, this article focuses on Dockerised setup.
- (Optional) [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - to clone this repo, otherwise [download it as an archive](https://github.com/eduard93/reports/archive/refs/heads/master.zip).
- (Optional) [InterSystems Reports Designer](https://wrc.intersystems.com/) - to create new reports if desired.
Additionally, you'll need:
- Login on [containers.intersystems.com](https://containers.intersystems.com) Docker registry
- InterSystems Reports License (contact InterSystems for it)
# Configuration
Before we start, here's what we're going to do:
- First, we are starting Reports and IRIS in setup mode to setup IRIS as a database (not DataSource!) for Reports.
- After that, we are configuring Reports and persisting this configuration on the host.
- Finally, we are running Reports with persisted data.
# First start
Let's go. Note that all steps here - 1-8 use `docker-compose_setup.yml` as a docker-compose configuration file. All additional docker-compose commands during these steps must be run as `docker-compose -f docker-compose_setup.yml`.
1. Clone this repo: `git clone https://github.com/eduard93/reports.git` or download an [archive](https://github.com/eduard93/reports/archive/refs/heads/master.zip).
2. Edit `config.properties` and specify your InterSystems Reports Server license information (User and Key). If you don't have them - contact InterSystems. There are many other properties described in the [documentation](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GISR_server). Note that IRIS, in that case, refers to the database for Reports and not the data source for reports (which comes later).
3. Start InterSystems Reports Server with initialization: `docker-compose -f docker-compose_setup.yml up -d`
4. Wait for InterSystems Reports Server to start (check with `docker-compose -f docker-compose_setup.yml logs reports`). It can take 5-10 minutes. Reports Server is ready for work when logs show: `reports_1 | Logi Report Server is ready for service.`
5. Open [Reports Server](http://localhost:8888). (User/pass: `admin`/`admin`). In a case, it shows an expired window enter the same license info again. It should look like this:

# Persisting configuration
Now that Reports is running, we need to adjust configuration a little and persist it on a host (note that InterSystems IRIS part of a configuration is persisted using [Durable %SYS](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=ADOCK#ADOCK_iris_durable).
6. Check `Enable Resources from Real Paths` option in the `server console` > `Administration` > `Configuration` > `Advanced` page. [Docs](https://devnet.logianalytics.com/hc/en-us/articles/1500009750141-Getting-and-Using-Resources-from-a-Real-Path). It would allow us to publish reports as simple as copying them into the `reports` folder in the repository.

7. Copy persistent storage files to host ([docs](https://hub.docker.com/r/logianalytics/logireport-server)):
```
docker cp reports_reports_1:/opt/LogiReport/Server/bin .
docker cp reports_reports_1:/opt/LogiReport/Server/derby .
docker cp reports_reports_1:/opt/LogiReport/Server/font .
docker cp reports_reports_1:/opt/LogiReport/Server/history .
docker cp reports_reports_1:/opt/LogiReport/Server/style .
```
8. Shutdown InterSystems Reports Server: `docker-compose -f docker-compose_setup.yml down`
# Second start
Now we're ready to start Reports with persisted data storage - this is how it would run in production.
9. Start InterSystems Reports Server without initialization: `docker-compose up -d`
10. Create a new folder resource in `Public Reports` with Real Path: `/reports`. [Docs](https://devnet.logianalytics.com/hc/en-us/articles/1500009750141-Getting-and-Using-Resources-from-a-Real-Path). To do that open `Public Reports` and select `Publish` > `From Server Machine`:

Create a new folder pointing to `/reports`:


It should contain a catalog (which defines a connection to IRIS) and two reports (`reportset1` and `reportset2`). Run them (use `Run` button to see it in a browser and `Advanced Run` to choose between HTML, PDF, Excel, Text, RTF, XML, and PostScript formats). Here's what reports look like:


As you can see, Reports supports Unicode out of the box. In this example, I'm using the same IRIS as a data source, but in general, it can be any other IRIS instance - as defined in a catalog. This demo uses the `HoleFoods` dataset (installed with `zpm "install samples-bi"`). To add new connections, create a new catalog in Designer. After that, create new reports and export everything in a new subfolder in a `reports` folder. Of course Server container must have network access to any data source IRIS instance.
That's it! Now, if you want to stop Reports, execute: `docker-compose stop`. And to start Reports again execute: `docker-compose up -d`. Note that all reports are still available.
# Debugging
All logs are stored in `/opt/LogiReport/Server/logs` folder. In a case of errors, add it to volumes, restart Reports and reproduce the error.
Documentation describes how to adjust [log levels](https://documentation.logianalytics.com/rsg17u1/content/html/config/config_log.htm?Highlight=logging). If Reports doesn't exactly get to the UI adjust `LogConfig.properties` file located in the `bin` folder:
```
logger.Engine.level = TRIVIAL
logger.DHTML.level = TRIVIAL
logger.Designer.level = TRIVIAL
logger.Event.level = TRIVIAL
logger.Error.level = TRIVIAL
logger.Access.level = TRIVIAL
logger.Manage.level = TRIVIAL
logger.Debug.level = TRIVIAL
logger.Performance.level = TRIVIAL
logger.Dump.level = TRIVIAL
```
# Embedding and APIs
To embed reports in your web application, use [Embedded API](https://documentation.logianalytics.com/logiinfov12/content/embedded-reports-api.htm).
Other [available APIs](https://documentation.logianalytics.com/logireportserverguidev17/content/html/api/wkapi_srv.htm).
# Summary
InterSystems Reports provides a robust modern reporting solution with embedded operational reporting. InterSystems Reports Server provides end users browser-based access to run, schedule, filter, and modify reports. InterSystems Reports Server can be efficiently run in a Docker environment.
# Links
- [Repository](https://github.com/eduard93/reports)
- [Documentation](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GISR_server)
- [Logging](https://documentation.logianalytics.com/rsg17u1/content/html/config/config_log.htm?Highlight=logging) 💡 This article is considered as InterSystems Data Platform Best Practice. Thank you for taking the time to make such a clear tutorial!
Announcement
Anastasia Dyubaylo · Jul 12, 2021
Hey Developers,
Are you ready for the new challenge? We're pleased to announce the first InterSystems technical article writing competition:
🏆 InterSystems Tech Article Contest 🏆
Write an article on any topic related to InterSystems technology from July 15 to August 15 August 22 – extended!
Prizes for everyone: Everyone who publishes an article on DC during this period will receive a special prize pack!
Main Prize: Apple iPad
Join our new contest and your content will be seen by over 55K monthly readers! Details below.
Prizes
1. Everyone is a winner in InterSystems Tech Article Contest! Any user who writes an article during the competition period will receive special prizes:
🎁 unique Developer Community Hoody
🎁 InterSystems sticker
2. Expert Awards – articles will be judged by InterSystems experts:
🥇 1st place: Apple iPad 128GB
🥈 2nd place: Amazon Kindle 8G Paperwhite
🥉 3rd place: Nike Utility Speed Backpack
Or as an alternative: Raspberry Pi 4 8GB with InterSystems IRIS Community Edition ARM installed
3. Developer Community Award – article with the most likes. The winner will have an option to choose one from the following prizes:
🎁 Nike Utility Speed Backpack
🎁 Amazon Kindle 8G Paperwhite
🎁 Raspberry Pi 4 8GB with InterSystems IRIS Community Edition ARM installed
Who can participate?
Any Developer Community member, except for InterSystems employees. Create an account!
Contest Period
📝 July 15 - August 22: Publication of articles on the Community and voting time.
Publish an article(s) throughout this period. DC members can vote for published articles with Likes – votes in the Community award.
Note: The sooner you publish an article(s), the more time you will have to collect Likes.
🎉 August 23: Winners announcement.
What are the requirements?
❗️ Any article written during the contest period and satisfying the requirements below will automatically enter the competition:
The article must be related to InterSystems technology
The article must be in English
The article must be 100% new (it can be a continuation of an existing article)
The article should not be plagiarized or translated (translations of your own DC articles from another language are allowed)
Article size: >1,000 characters
Team size: individual (multiple entries from the same author are allowed)
What to write about?
❗️ You can choose any tech topic related to InterSystems technology.
Here're some possible fields for choosing the article topic. These are just examples, you have the liberty to choose anything you want.
#
Topic
Details
1
Embedded Python Introduction
Embedded Python is an exciting new feature of InterSystems IRIS allowing developers to write methods, SQL procedures and more in Python.
2
Embedded Python from Interoperability
Explore how Embedded Python can be leveraged from an Interoperability production.
3
Embedded Python: Translating by Language Constructs
While we aim for seamless Embedded Python integration there are some tips & tricks to smooth things over. Underscore methods, dictionaries, lists and others. What are the best ways of calling Python features from ObjectScript?
4
Intro to InterSystems Reports Designer
Continuation of this article. This article should cover:
Catalog creation
Creation of the basic report types, namely
Chart (bar, pie, line, gauge, heatmap, ...)
Table (summary and detailed)
Crosstab
Publishing Reports to Reports Server
Creating a schedule
A good tutorial to start with: Getting Started with InterSystems Reports
5
Calling Reports from Interoperability/IRIS
An article describing how to execute (and get) InterSystems Reports Report from IRIS on from Interoperability Production.
6
Map Reports with InterSystems
An article describing how to build InterSystems Reports Report with geospatial data. HoleFoods dataset contains locations for transactions which you can use.
7
How to do CI/CD with InterSystems IRIS
–
8
Change Data Capture with Kafka Connect
An example that shows how to set up Kafka Connect and export&import SQL data via the Kafal Connect JDBC connector.
9
Applying analytics / ML to the SQL Statement Index
–
10
My favourite maintenance tasks, automated
–
11
Leveraging the Audit database
–
12
The three steps to set up GitHub Actions that make your app invincible
–
13
OAuth2 authorization in IRIS instance
–
14
Setup mirroring on K8s
–
15
Using %MDX and %KPI instead of Subject Area in IRIS Analytics
–
16
Trying External Language Gateways / compare to the gateways of old
Example
17
Streaming events to Kafka from IAM
–
18
IntegratedML walkthrough
–
19
Exporting requests to Excel using Python
–
20
Integrating cloud services with productions
e.g. MS Azure Cognitive Services or Amazon Rekognition.
21
Working with IKO
–
22
IKO IRIS on AWS Kubernetes with Hugepages
–
23
Incorporating backups with IKO
–
24
IKO – Create a cluster with compute nodes, SAM, and no sharding
Include the CPF file to set up our best practices.
25
Data Science shared workgroup setup with ECP
There is a data server and each data scientist has a compute node on their desktop. Show the data is available when disconnected and syncs when you re-connec.
26
Article discussing storage options for cloud deployments (performance difference between local storage, block storage, etc) and trade-offs (you might not need mirrors if using block storage, etc.)
–
27
Building IRIS images with Docker Build Mounts
Details
28
InterSystems IRIS CUDA image
There's a way to use GPUs/CUDA from inside the container. Describe how to build an InterSystems IRIS image with CUDA support.
Note: Articles on the same topic from different authors are allowed.
Feel free to submit your topic ideas in the comments to this post.
So,
We're waiting for your great articles!
Good luck and let the power of Pulitzer be with you! ✨ Article idea: Building IRIS images with Docker Build Mounts
From the docs on Docker Build Mounts:
RUN --mount allows you to create mounts that process running as part of the build can access. This can be used to bind files from other part of the build without copying, accessing build secrets or ssh-agent sockets, or creating cache locations to speed up your build.
This is a recent Docker feature allowing users to build compact images (since we no longer need to COPY everything inside). Try it out and write an article about it? Article idea: InterSystems IRIS CUDA image
There's a way to use GPUs/CUDA from inside the container. Describe how to build an InterSystems IRIS image with CUDA support. Hey Developers,Each article will bring you points on Global Masters, and you also could earn some of related badges:✅ Badges for Number of Articles: 1st / 5 / 10 / 25 / 50 articles✅ Badges for Number of Votes (votes for all your DC posts in sum): 50 / 100 / 500 / 1000 votes✅ Badges for Number of Views: 750 / 2,000 / 5,000 / 15,000 viewsCheck these badges and how much points they can bring in this article. Hey DC members,
The InterSystems Tech Article Contest started today! 🤩🤩
Can't wait for your great articles!
📍 Start here: https://community.intersystems.com/contests/1 Hey Community,
We've implemented a new feature in our DC editor so that you can easily track the amount of content in your article! Please welcome:
Word & character counter
When you type any text on the post creation page, DC Editor reads all words and characters and automatically displays them in the lower right corner.
p.s. Counter works only for WYSIWYG format.
Enjoy! ✨ Hi Community!
If you do not have a topic to write an article on, you can view the topics that we offer above in this post.
Good luck and stay tuned! Hey Community!
We are waiting for your great articles!
Participate and win Apple iPad 128GB for the first place! Hey DC members,
The InterSystems Tech Article Contest сontinues!🚀
We look forward to your articles! Hey DC members,
5 new articles are already in the game! 🤩
Visit our contest page to support the participants with Likes = votes in the Community Award!
📍 https://community.intersystems.com/contests/1 Wow!! 👏👏I love this contest!! 😁 Yeah! A lot of new things to read 😊👍🏼 Hey Developers!
What great articles have already been made!🤩🤩
Who will be next? Hey Community,
Another alternative prize was added to the Community Award:
🎁 Raspberry Pi 4 8GB with InterSystems IRIS Community Edition ARM installed
Now the winner will have an option to choose one of 3 prizes! Hey Devs!
Don't forget, that DC members can vote for published articles with Likes – votes in the Community award.
So, the earlier you will write an article, the chance to get more likes is higher!🤩
Good luck and stay tuned! Hi, May I translate my article once I've publish in english? Kurro, translations of your own DC articles are also allowed, go ahead! ;) Hi Community!
Only two weeks left to the end InterSystems Tech Article Contest!
Don't be shy, publish your article and win the prize! Hey Devs!
Now 12 incredible articles are in the game!🤩
Visit our contest page to support the participants with Likes = votes in the Community Award!
📍 https://community.intersystems.com/contests/1 Hey DC members,
A new article by @Oliver.Wilms !
Check it out! Hi Comunity!
Almost one week left to the end of InterSystems Tech Article Contest!
Good luck and stay tuned! The prizes are waiting for you! Hi, Devs!
2 more articles are already in the game!😻
Only 6 days left to the end of the publication period!
Good luck to everybody!🤞💪 Hey Community,
❗️ We decided to extend the contest period until 22 August!
One more week to write an article and join our competition – don't miss your chance to win 😉
P.s. And don't forget about prizes for everyone who enters the contest ;)
______________
Yours, Anastasia Hey Community!2 more articles are being added to the contest!Interoperability with IRIS and Pharmacy Robotics by @Nigel.Salm5021 launch with the intelligent eco-system in InterSystems by @crys.su9670
Go check it out! And good luck to everybody! Hey Developers!
One more participant has joined the contest with some awesome articles!
Deploy to production module to convert query results to xlsx file based on python openpyxl library by @MikhailenkoSergey Hi Developers!
How many awesome articles are already been made!
Go check them out: https://community.intersystems.com/contests/1 Hi DC Members!
A new article is added to the competition!
Why I love ObjectScript and why I think I might love Python More by @Nigel.Salm5021
Take a look at it Hey Community!
One more new article has been added to the game!
GitHub Codespaces with IRIS by @Dmitry.Maslennikov
Only one day left to the end of the contest! I have just published my third and final Tech Article. This article describes how you can develop a single Interface Code Base and then using Package and Global Mappings generate a multitude of Interfaces that either have date PUSHED into them or PULL data from a Source Application or Database and in my example, transform that data into either HL7 or FHIR messages. I then use HTTP to send the message to a Target Server.
[12:15 AM]
I have attached the article as a PDF which might make it a bit easier to read and I will be releasing the actual software on OEX in the near future. Hey Developers!
3 more articles have been added to the competition!
Transferring Files via REST to Store in a Property, Part 3 by @Irene.Mikhaylova
How to develop an interoperability solution in one code base and then use it to generate many individual interfaces by @Nigel.Salm5021
My opinion: IRIS Mirror not as reliable as expected in AWS Elastic Container Service by @Oliver.Wilms
Last call Developers! Only 8 hours left to the end of the contest! great! thanks, Nigel
Article
Yuri Marx · Mar 5, 2021
Organizations around the world lose an estimated five percent of their annual revenues to fraud, according to a survey of Certified Fraud Examiners (CFEs) who investigated cases between January 2010 and December 2011. Applied to the estimated 2011 Gross World Product, this figure translates to a potential total fraud loss of more than $3.5 trillion (source: https://www.acfe.com/press-release.aspx?id=4294973129).
The most efficient way to reduce frauds is to collect and unify the transactions, assets and target data to identify patterns, produce anti fraud reports and algorithms to validate the next transactions. In summary, we have some this principles to be followed:
Ability to collect, enrich and unify data on targets and assets
Fluidity in the processing and exchange of data between systems, teams and internal and external information sources
Multiformat and multi-model corporate database on targets and assets
Intensive use of Artificial Intelligence applied to the business context
Collaborative work based on the findings identified by the automations
Rich composition of findings and dossiers based on flexible and well-grounded analytical artifacts
Before data platforms like InterSystems IRIS, the challenge was hard, see:
Expensive, closed and specialized Intelligence Systems
Few data sources and little variety
A lot of manual work
Low collaboration capacity
Low precision results
Only experts were able to work
Open systems (R and Python), more accessible and broad
Explosion of data sources and formats (Big Data)
Automation of 70% to 80% of Intelligence work
High collaboration capacity
High precision results (advanced use of statistics and AI algorithms)
Multidisciplinary and self-service team
InterSystems IRIS has a great data platform to do Anti fraud management, see:
The benefits are clear because with 1 product we can:
Collect data to analyze, create patterns and anti fraud algorithmns (R and Python) using IRIS Interoperability with BPL, DTL and Interoperability adapters and if something is special we can use Native API and PEX to do custom data adapters in Java, .NET or Python.
Apply rules and deduplicate the data using BPL, DTL, ObjectScript and Native API, with visual Interoperability orchestraction.
Store multimodel data and produce data results as networks, NLP, SQL, NoSQL and OLAP with InterSystems Database.
All this data can be consumed with AI algorithmns running with IRIS to predict and identify frauds. Is possible use IRIS IntegratedML (AutoML) to accelerate and improve anti fraud analysis.
Teams can produce dossiers and reports with the findings using IRIS Reports and IRIS BI and share all this with systems and people with User Portal, Report Server and IRIS API Management.
In other platforms you need to buy some products like SQL database, NoSQL database, Data Bus, ETL engine, Rules and Intelligence Server with Machine Learning support, NLP engine, Analytics, Report Server and API Management solution. The costs are high, but with IRIS is possible reduce these costs, because we have "all in one", see:
Interesting.
Also check out the Fraud Prevention Demo by @Amir.Samary. Great sample!
Announcement
Vadim Aniskin · Nov 16, 2022
Hello Community,
Welcome to our first InterSystems Ideas News!
The most important piece of news is the result of our very first and very successful Idea-A-Thon Contest. We've received 75 new interesting ideas.
Some general stats of the Ideas Portal:
✓ 42 new ideas published last month✓ 147 new users joined last month✓ 142 ideas posted all time✓ 273 users joined all time
The top 5 most voted for ideas of the month:
IRIS and ZPM(Open Exchange) integration
Move users, roles, resources, user tasks, Mappings (etc) to a seperate Database, other than %SYS, so these items can be mirrored
RPMShare - Database solution for remote patient monitoring (RPM) datasets of high density vitals
Create front-end package based on CSS and JS to be used in NodeJS and Angular projects
PM platform
And to round up this newsletter, here is a list of all ideas posted last month
Add IRIS as a supported database for Apache Superset
For community articles, let admins (and possibly article authors) pin particular comments to the top
Add address standardization to Normalization (using Project US@ standards)
PM platform
Tool to convert legacy dot syntax code to use bracket syntax
TTTC
PDF reports for IRIS BI
Sample code share opportunity
Add basic tutorial of Docker or point to a Docker tutorial in Documentation
The ability to export current settings to a %Installer Manifest
Move users, roles, resources, user tasks, Mappings (etc) to a seperate Database, other than %SYS, so these items can be mirrored
Common Data Modelling
CI/CD support
String format to numeric values in ZEN.proxyObject
Patient Initiated Follow Up - Adding a document to an ROPWL
I service Flags
Linking I service to JIRA system
Linux: iris session [command line] get commands from a file
Journal file analysis/visualization
Add the option to call class parameters in Embedded Python
Create query builder
Colour Background on Ward / Clinical Areas Floorplans
A Dynamic Cheat Sheet to lookup for Common Core Functions for Reusability
Version History for Classes
Add wizard to create class with its properties
RPMShare - Database solution for remote patient monitoring (RPM) datasets of high density vitals
Better handle whitespace in Management Portal Text entry
IRIS and ZPM(Open Exchange) integration
Visual programming language
Backup button before importing
Adapting tools for people with special needs and/or disabilities 🌐🔰🦽🦼♿
Reserve licenses
Interoperability Wizard
Improve journal display in IRIS admin portal
Create front-end package based on CSS and JS to be used in NodeJS and Angular projects
Mirror Async Member Time Delay in Applying Journals
Cache Journal Switch Schedule
Monitoring and Programatic way of Starting/Stoping Gateways
Embedded Python: Add a built-in variable to represent class
LDAP Authentication method by default on Web Applications
Please add google oauth authorization to login to the management portal
Data Analyzer
That's it for now.
Visit our InterSystems Ideas portal, suggest your ideas and vote for the existing ones!
Look out for the next announcement!
Announcement
Anastasia Dyubaylo · Mar 6, 2023
We're electrified to invite all our clients, partners, developers, and community members to our in-person InterSystems Global Summit 2023!
Our Global Summit user conference is your opportunity to connect with trailblazing product developers, fellow users pushing our technology into new frontiers, and the people whose out-of-box thinking is rocking our universities and board rooms. All in the same space. And registration is now open!
➡️ InterSystems Global Summit 2023
🗓 Dates: June 4-7, 2023
📍 Location: The Diplomat Beach Resort, Hollywood, Florida, USA
Join us this year for content on how customers like you use our technology for innovation and what trends affect our future innovations, including new and enhanced products and product offerings.
Here is a short glimpse at the agenda.
Sunday, June 4
Golf Outing or Morning Social ActivitiesBadge Pick-upTechnology BootcampCertification ExamsWomen's MeetupWelcome Reception
Monday, June 5
Welcome and KeynotesBreakout SessionsHealthcare Leadership ConferencePartner Pavilion 1:1 MeetingsCertification ExamsFocus GroupsTech ExchangeAffinity SessionsEvening Drinks & Demos
Tuesday, June 6
KeynotesBreakout SessionsPartner Pavilion 1:1 Meetings Certification Exams Focus GroupsTech ExchangeAffinity SessionsEvening Social Event
Wednesday, June 7
Keynotes Breakout Sessions Partner Pavilion 1:1 Meetings Certification ExamsFocus Groups Tech Exchange Farewell Reception
For more information on the agenda please visit this page.
We look forward to seeing you at the InterSystems Global Summit 2023!
Article
Muhammad Waseem · Mar 15, 2023
Hi Community,In this article I will demonstrate the usage of InterSystems Embedded Python, We will cover below topics:
1-Embedded Python Overview
2-Usage of Embedded Python
2.1- Using a Python Library from ObjectScript
2.2- Calling the InterSystems APIs from Python
2.3- Using ObjectScript and Python together
3-Using python Built-in Functions
4-Python Modules/Libraries
5-Embedded Python Use Cases
5.1- Printing PDF by using python Reportlab Library
5.2- Generating QR code by using Python Qrcode Library
5.3- Get GEO location by using Python Folium Library
5.4- Generate and mark locations on an interactive Map by using Python Folium Library
5.5- Data analytics by using Python Pandas Library
6-Summary
So let's start with an overview
1-Embedded Python Overview
Embedded Python is a feature of InterSystems IRIS data platform that allows Python developers to gain full and direct access to the data and functionality in InterSystems IRIS.
InterSystems IRIS comes with a powerful built-in programming language called ObjectScript that is interpreted, compiled, and run inside the data platform.
Because ObjectScript executes within the context of InterSystems IRIS, it has direct access to the memory and procedure calls of the data platform.
Embedded Python is an extension of the Python programming language that allows for the execution of Python code inside the InterSystems IRIS process context.
Because both ObjectScript and Python operate on the same object memory, it can be said that Python objects do not just emulate ObjectScript objects, they are ObjectScript objects.
This co-equality of these languages means you can choose the language most appropriate for the job, or the language you are most comfortable using to write applications.
2-Usage of Embedded Python
When using Embedded Python, you can write your code in three different modalities.
2.1 - Using a Python Library from ObjectScript
First, you can write an ordinary .py file and call it from the InterSystems IRIS context. In this case, the data platform will launch the Python process and allow you to import a module called IRIS, which automatically attaches the Python process to the IRIS kernel and provides you access to all the functionality of ObjectScript from the context of your Python code.
2.2 - Calling the InterSystems APIs from Python
Second, you can write ordinary ObjectScript code and instantiate a Python object using the %SYS.Python package. This ObjectScript package allows you to import Python modules and libraries, then work with that code base using ObjectScript syntax.The %SYS.Python package enables ObjectScript developers without any knowledge of Python to use the rich ecosystem of Python libraries in their ObjectScript code.
2.3 - Using ObjectScript and Python together
Third, you can create an InterSystems class definition and write methods in Python. Any call to that method will launch the Python interpreter. This method has the benefit of populating the self keyword of that block of Python code with a reference to the instance of the containing class. Additionally, by using Python to write class methods in InterSystems classes, you can easily implement methods that handle different data entry events in SQL such as a new row being added to a table.It also allows for the rapid development of custom stored procedures in Python.
As you can see, Embedded Python allows you to choose the programming language best suited to the job without sacrificing performance.
3-Using Python Built-in Functions
The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.
Built-in Functions
A
abs()
aiter()
all()
any()
anext()
ascii()
B
bin()
bool()
breakpoint()
bytearray()
bytes()
C
callable()
chr()
classmethod()
compile()
complex()
D
delattr()
dict()
dir()
divmod()
E
enumerate()
eval()
exec()
F
filter()
float()
format()
frozenset()
G
getattr()
globals()
H
hasattr()
hash()
help()
hex()
I
id()
input()
int()
isinstance()
issubclass()
iter()
L
len()
list()
locals()
M
map()
max()
memoryview()
min()
N
next()
O
object()
oct()
open()
ord()
P
pow()
print()
property()
R
range()
repr()
reversed()
round()
S
set()
setattr()
slice()
sorted()
staticmethod()
str()
sum()
super()
T
tuple()
type()
V
vars()
Z
zip()
_
__import__()
Using python Built-in FunctionsIn order to use python built-in function we have to import "builtins" then we can invoke the function
set builtins = ##class(%SYS.Python).Import("builtins")
The Python print() function is actually a method of the built-in module, so you can now use this function from ObjectScript:
USER>do builtins.print("hello world!")
hello world!
USER>set list = builtins.list()
USER>zwrite list
list=5@%SYS.Python ; [] ; <OREF>
Likewise, you can use the help() method to get help on the list object.
USER>do builtins.help(list)
Help on list object:
class list(object)
| list(iterable=(), /)
|
| Built-in mutable sequence.
|
| If no argument is given, the constructor creates a new empty list.
| The argument must be an iterable if specified.
|
| Methods defined here:
|
| __add__(self, value, /)
| Return self+value.
|
| __contains__(self, key, /)
| Return key in self.
|
| __delitem__(self, key, /)
| Delete self[key].
4-Python modules or libraries
Some python modules or libraries are installed by default and already available to use. By using the help("module" function we can view these modules:
Installing python module or library
Apart from these modules python has hundreds of modules or libraries, which can be viewed at pypi.org (The Python Package Index (PyPI) is a repository of software for the Python programming language)
If we need some other libraries, then we need to install the libraries using the intersystems irispip command
For example, Pandas is python Data Analysis Library. The following command uses the package installer irispip to install pandas on a Windows system:
C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python pandas
Please note C:\InterSystems will be replaced by Intersystems installation directory
5-Embedded Python Use Cases
5.1-Printing PDF by using python Reportlab Library
We need to install Reportlab library by using irispip command, then just create objectscript function.
Given a file location, the following ObjectScript method, CreateSamplePDF(), creates a sample PDF file and saves it to that location.
Class Demo.PDF
{
ClassMethod CreateSamplePDF(fileloc As %String) As %Status
{
set canvaslib = ##class(%SYS.Python).Import("reportlab.pdfgen.canvas")
set canvas = canvaslib.Canvas(fileloc)
do canvas.drawImage("C:\Sample\isc.png", 150, 600)
do canvas.drawImage("C:\Sample\python.png", 150, 200)
do canvas.setFont("Helvetica-Bold", 24)
do canvas.drawString(25, 450, "InterSystems IRIS & Python. Perfect Together.")
do canvas.save()
}
}
The first line of the method imports the canvas.py file from the pdfgen subpackage of ReportLab. The second line of code instantiates a Canvas object and then proceeds to call its methods, much the way it would call the methods of any InterSystems IRIS object.
You can then call the method in the usual way:
do ##class(Demo.PDF).CreateSamplePDF("C:\Sample\hello.pdf")
The following PDF is generated and saved at the specified location:
5.2-Generating QR code by using Python Qrcode Library
In order to generate qrcode, we need to install Qrcode library by using irispip command, then by using the below code we can generate QR Code:
5.3-Get GEO location by using Python Folium library
In order to get geographic data, we need to install Folium library by using irispip command, then create below object script function:
Class dc.IrisGeoMap.Folium Extends %SwizzleObject
{
// Function to print Latitude, Longitude and address details
ClassMethod GetGeoDetails(addr As %String) [ Language = python ]
{
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="IrisGeoApp")
try:
location = geolocator.geocode(addr)
print("Location:",location.point)
print("Address:",location.address)
point = location.point
print("Latitude:", point.latitude)
print("Longitude:", point.longitude)
except:
print("Not able to find location")
}
}
Connect to IRIS Terminal and run below code
do ##class(dc.IrisGeoMap.Folium).GetGeoDetails("Cambridge MA 02142")
Below will be the output:
5.4-Generate and mark locations on an interactive Map by using Python Folium library
We will use the same Python Folium library to generate and mark locations on an interactive Map, Below object script function will do the desired :
ClassMethod MarkGeoDetails(addr As %String, filepath As %String) As %Status [ Language = python ]
{
import folium
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="IrisGeoMap")
#split address in order to mark on the map
locs = addr.split(",")
if len(locs) == 0:
print("Please enter address")
elif len(locs) == 1:
location = geolocator.geocode(locs[0])
point = location.point
m = folium.Map(location=[point.latitude,point.longitude], tiles="OpenStreetMap", zoom_start=10)
else:
m = folium.Map(location=[20,0], tiles="OpenStreetMap", zoom_start=3)
for loc in locs:
try:
location = geolocator.geocode(loc)
point = location.point
folium.Marker(
location=[point.latitude,point.longitude],
popup=addr,
).add_to(m)
except:
print("Not able to find location : ",loc)
map_html = m._repr_html_()
iframe = m.get_root()._repr_html_()
fullHtml = """
<!DOCTYPE html>
<html>
<head></head>
<body> """
fullHtml = fullHtml + iframe
fullHtml = fullHtml + """
</body>
</html>
"""
try:
f = open(filepath, "w")
f.write(fullHtml)
f.close()
except:
print("Not able to write to a file")
}
Connect to IRIS Terminal and invoke MarkGeoDetails function
We will invoke MarkGeoDetails() function of dc.IrisGeoMap.Folium class.The function requires two parameters:
location/locations(We can pass multiple locations by adding "," in between)
HTML file path
Let us run the below command to mark Cambridge MA 02142, NY, London, UAE, Jeddah, Lahore, and Glasgow on the Map and save it as "irisgeomap_locations.html" file
do ##class(dc.IrisGeoMap.Folium).MarkGeoDetails("Cambridge MA 02142,NY,London,UAE,Jeddah,Lahore,Glasgow","d:\irisgeomap_locations.html")
The above code will generate below interactive HTML file:
5.5-Data analytics by using Python Pandas library
We need to install Pandas library by using irispip command, then we can use the below code to view the data
6-Summary
InterSystems Embedded Python (IEP) is a powerful feature that allows you to integrate Python code seamlessly with your InterSystems applications. With IEP, you can leverage the extensive libraries and frameworks available in Python to enhance the functionality of your InterSystems applications. In this article, we will explore the key features and benefits of IEP.
IEP is implemented as a set of libraries that enable you to interact with Python objects and execute Python code from within InterSystems applications. This provides a simple and effective way to integrate Python code into your InterSystems applications, allowing you to perform data analysis, machine learning, natural language processing, and other tasks that may be challenging to implement in InterSystems ObjectScript.
One of the primary advantages of using IEP is that it provides a way to bridge the gap between the worlds of Python and InterSystems. This makes it easy to use the strengths of both languages to create powerful applications that combine the best of both worlds.
IEP also provides a way to extend the functionality of your InterSystems applications by leveraging the capabilities of Python. This means that you can take advantage of the vast number of libraries and frameworks available in Python to perform tasks that may be challenging to implement in InterSystems ObjectScript.
InterSystems Embedded Python provides a powerful way to extend the functionality of your InterSystems applications by leveraging the capabilities of Python. By integrating Python code into your InterSystems applications, you can take advantage of the vast number of libraries and frameworks available in Python to perform complex tasks that may be challenging to implement in InterSystems ObjectScript.Thanks Nice Article. very informative .. thanks... Thanks @samseer.mannisseri3914 💡 This article is considered as InterSystems Data Platform Best Practice.
Announcement
Anastasia Dyubaylo · Sep 14, 2022
Hey Community,
We're thrilled to invite you to the next "InterSystems Iberia Summit 2022", which will be held in-person once again. Registration is already open!
Join us in this important event where we'll bring together InterSystems customers and partners and also employees and members of the Developer Community - to learn, inspire and share innovation challenges with each other:
➡️ InterSystems Iberia Summit 2022
🗓 November 16 – 17, 2022
📍Valencia. The Westin Valencia hotel
At the InterSystems Iberia Summit, you will be able to share challenges and priorities. And you will learn how InterSystems technology is making the digital transformation a reality while allowing and boosting innovation.
We'll publish the agenda with prominent speakers, topics, and workshops soon.
And there will be great surprises at the Developer Community Corner.
See you in Valencia!
➡️ Registration is open at: www.intersystems.com/es/iberia-summit-2022 worth to go! I wish I would go
Announcement
Olga Zavrazhnova · Sep 13, 2022
Fall Hackathon Season is ready now!
InterSystems will take part in HackMIT hackaton, a long-weekend hackaton organized by the MIT (Massachusetts Institute of Technology), where thousands of students come together to work on cool software and/or hardware projects. This year the HackMIT is in-person again, at the MIT campus, and will take place during the first weekend of October.This year the main tracks are Education, Sustainability, New Frontiers, and Entertainment.InterSystems challenge will be related to 1 or 2 of the main tracks and will be revealed on September 28.Stay tuned!
HackMIT it's a great event! I hope this year could be bigger than the last one. Agree - last year's event was so much fun! And it was so successful, with the help of our superb mentors! :)This year they do it fully in person, I also hope it will big and awesome!
Announcement
Anastasia Dyubaylo · Nov 13, 2022
Hi Developers,
We're pleased to announce that InterSystems is hosting its partner days in Germany – InterSystems Partnertage DACH 2022!
During this time you will be able to exchange product innovations and practical tips and tricks between InterSystems experts and your colleagues in Darmstadt. And of course, a lot of networking, because there is a lot to catch up on!
🗓 Dates: November 23-24, 2022
📍 Venue: Wissenschafts- und Kongresszentrum darmstadtium in Herzen DarmstadtsSchloßgraben 1, 64283 Darmstadt
The agenda of the two-day partner days consists of a mix of keynotes, informative sessions, and masterclasses. Read on for more details.
The agenda at a glance:
November 23 (focus on healthcare):
Innovations in healthcare
Transferring innovative ideas into concrete projects – with InterSystems technology
Outlook on the next development steps for InterSystems HealthShare and InterSystems IRIS for Health
Masterclass sessions with our Sales Engineering team (InterSystems SAM, Embedded Python for ObjectScript developers)
November 24:
Keynotes on the successful cross-industry use of InterSystems technologies
Our innovative data management concept „Smart Data Fabric“ – what is it all about?
Round Table „migration on InterSystems IRIS“ – our partners share their experiences
Presentations and live demos focusing on the following key topics: Columnar Storage, IntegratedML, Container-Support, InterSystems Reports
Masterclass sessions on „social selling“
✅ REGISTER HERE
We look forward to seeing you in Darmstadt!
Announcement
Anastasia Dyubaylo · Jan 13, 2023
Hey Developers,
We'd like to invite you to join our next contest dedicated to creating useful tools to make your fellow developers' lives easier:
🏆 InterSystems Developer Tools Contest 🏆
Submit an application that helps to develop faster, contributes more qualitative code, and helps in testing, deployment, support, or monitoring of your solution with InterSystems IRIS.
Duration: January 23 - February 12, 2023
Prize pool: $13,500
The topic
💡 InterSystems IRIS developer tools 💡
In this contest, we expect applications that improve developer experience with IRIS, help to develop faster, contribute more qualitative code, help to test, deploy, support, or monitor your solution with InterSystems IRIS.
General Requirements:
Accepted applications: new to Open Exchange apps or existing ones, but with a significant improvement. Our team will review all applications before approving them for the contest.
The application should work on InterSystems IRIS Community Edition.
Types of applications that match: UI-frameworks, IDE, Database management, monitoring, deployment tools, etc.
The application should be an Open Source application and published on GitHub.
The README file to the application should be in English, contain the installation steps, and contain either the video demo or/and a description of how the application works.
One developer can enter the competition with a maximum of 3 applications.
Prizes
1. Experts Nomination - a specially selected jury will determine the winners:
🥇 1st place - $5,000
🥈 2nd place - $3,000
🥉 3rd place - $1,500
🏅 4th place - $750
🏅 5th place - $500
🌟 6-10th places - $100
2. Community winners - an application that will receive the most votes in total:
🥇 1st place - $1000
🥈 2nd place - $750
🥉 3rd place - $500
If several participants score the same amount of votes, they all are considered winners, and the money prize is shared among the winners.
Important Deadlines:
🛠 Application development and registration phase:
January 23, 2023 (00:00 EST): Contest begins.
February 5, 2023 (23:59 EST): Deadline for submissions.
✅ Voting period:
February 6, 2023 (00:00 EST): Voting begins.
February 12, 2023 (23:59 EST): Voting ends.
Note: Developers can improve their apps throughout the entire registration and voting period.
Who can participate?
Any Developer Community member, except for InterSystems employees. Create an account!
👥 Developers can team up to create a collaborative application. Allowed from 2 to 5 developers in one team.
Do not forget to highlight your team members in the README of your application – DC user profiles.
Helpful resources
✓ Example applications:
iris-rad-studio - RAD for UI
cmPurgeBackup - backup tool
errors-global-analytics - errors visualization
objectscript-openapi-definition - open API generator
Test Coverage Tool - test coverage helper
and many more.
✓ Templates we suggest to start from:
iris-dev-template
rest-api-contest-template
native-api-contest-template
iris-fhir-template
iris-fullstack-template
iris-interoperability-template
iris-analytics-template
✓ For beginners with IRIS:
Build a Server-Side Application with InterSystems IRIS
Learning Path for beginners
✓ For beginners with ObjectScript Package Manager (ZPM):
How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS
Package First Development Approach with InterSystems IRIS and ZPM
✓ How to submit your app to the contest:
How to publish an application on Open Exchange
How to submit an application for the contest
Need Help?
Join the contest channel on InterSystems' Discord server or talk with us in the comment to this post.
We can't wait to see your projects! Good luck 👍
By participating in this contest, you agree to the competition terms laid out here. Please read them carefully before proceeding.
What a contest!
It'd be great if someone could implement the tool to export Interoperability components into a local folder with every changes saved in the interoperability UI?
Currently git-source-control can do the job, but it is not complete. Some Interoperability components (e.g. business rules) are not being exported. And lookup tables are exported in an not importable format.
I published and idea regarding it.
For your inspiration see also the ideas with the "Community Opportunity" status on the Ideas Portal. Here're more ideas for your inspiration by @Guillaume.Rongier7183: https://community.intersystems.com/post/kick-webinar-intersystems-developer-tools-contest#comment-212426 @Evgeny.Shvarov as we've covered in GitHub issues, the business rule issue is a product-level issue (in the new Angular rule editor only, not the old Zen rule editor). I clarified https://github.com/intersystems/git-source-control/issues/225 re: the importable format.
The non-"wrapped" XML export format is importable by git-source-control and, I believe, IPM itself, although not by $System.OBJ.Load. It's just a matter of preference/readability. In a package manager context being loadable by $System.OBJ.Load isn't as important, and while the enclosing <Export> and <Document> tags aren't as annoying for XML files as for XML-exported classes/routines/etc., they're still annoying and distract from the true content of the document. Also - git-source-control 2.1.0 fixes issues with import of its own export format. You should try it out. ;) nice job Tim! Thank you for continuing to improve this :) Hey Developers,
Watch the recording of the Kick-off Webinar on InterSystems Developers YouTube:
⏯ [Kick-off Webinar] InterSystems Developer Tools Contest
Community!
There are 5 apps that have been added to the contest already!
GlobalStreams-to-SQL by @Robert.Cemper1003 helper-for-objectscript-language-extensions by @Robert.Cemper1003 gateway-sql by @MikhailenkoSergeyxml-to-udl by @Tommy.Heyding iris-persistent-class-audit by @Stefan.Cronje1399
Who's the application going to be next?! Dear Developers!
Please use technology bonuses to collect more votes and get closer to victory. 🥳
Happy coding!✌ I am now in the running with DX Jetpack for VS Code Hi Evgeny,
The ompare tool has a Schedule option that happily exports classes, routines, productions, lookup tables, HL7 schemas. It can be configured to traverse multiple namespaces in a single run, generating an export file for each namespace.
Wonder if this is useful for your case. A periodic export / snapshot of some components.
Cheers,
Alex Devs!
Four more applications have been uploaded to the contest!
DX Jetpack for VS Code by @John.Murray JSONfile-to-Global by @Robert.Cemper1003 apptools-admin by @MikhailenkoSergey irissqlcli by @Dmitry.Maslennikov
Check them out! I just uploaded my app... It is the first time that I participate in one of the programming contests... I hope you like it. my helper was eliminated today by censorshelper-for-objectscript-language-extensionsTag version: 0.0.3 Released: 2023-01-26 22:33:33
Question
Evgeny Shvarov · May 13, 2023
Hi folks!
Those who actively use unittests with ObjectScript know that they are methods of instance but not classmethods.
Sometimes this is not very convenient. What I do now if I face that some test method fails I COPY(!) this method somewhere else as classmethod and run/debug it.
Is there a handy way to call the particular unittest method in terminal? And what is more important, a handy way to debug the test method?
Why do we have unittest methods as instance methods?
VSCode has a way to help with running tests, but it requires implementing from our side A handy way to call UnitTest Case method in a terminal
Do ##class(%UnitTest.Manager).DebugRunTestCase("", "[ClassName]", "", "[MethodName]")
Run all Test methods for a TestCase:
Do ##class(%UnitTest.Manager).DebugRunTestCase("", "[ClassName]", "", "")
Placing a "break" line within a method can be useful when iterating creating the test. See the variables. Run other code and then type "g"+ [Enter] to continue.
The instance gives context to current test run, when raising assertions and other functionality. Thanks, Dima! Is there a listed related issue? Thanks Alex.
See the following:
USER>Do ##class(%UnitTest.Manager).DebugRunTestCase("", "dc.irisbi.unittests.TestBI", "", "TestPivots")
(root) begins ...LogStateStatus:0:Finding directories: ERROR #5007: Directory name '/usr/irissys/mgr/user/u:/internal/testing/unit_tests/' is invalid <<==== **FAILED** (root)::
In fact there is a handy way to run all the tests via:
zpm "test module-name"
But, I'd love to see debugging of it @Alexander.Woodhead , do you know by a chance why unittest methods are instance methods but not classmethods? Could it be converted to classmethods or provided the option to do that? Hi Evgeny,
The global ^UnitTestRoot needs to be set to a real directory to satisfy the CORE UnitTest Runner.
As the first argument "Suite" is not specified, then no sub-directories are needed.
Set ^UnitTestRoot="\tmp\"
... may be sufficient for your purposes. It is common to need to run unit tests for other modules that have overlapping / breaking functionality.
This is where the value of loading and running multiple TestSuites comes into its own. There are no reasons for them to be ClassMethods, UnitTests is quite a complex thing, and it's there are use-cases where it needs to be this way. with zpm you can use additional parameter for it
zpm "test module-name -only -D UnitTest.Case=Test.PM.Unit.CLI:TestParser"
Use class name only to run all tests there, or add Method name to test only that method in the class Thanks! this is helpful. @Evgeny.Shvarov I have a detailed writeup here (although Dmitry already hit the important point re: IPM): https://community.intersystems.com/post/unit-tests-and-test-coverage-objectscript-package-manager
A few other notes:
Unit test class instances have a property (..Manager) that refers to the %UnitTest.Manager instance, and may be helpful for referencing the folder from which unit tests were loaded (e.g., to load additional supporting data or do file comparisons without assuming an absolute path) or "user parameters" / "user fields" that were passed in the call to run tests (e.g., to support running a subset of tests defined in unit test code). Sure, you could do the same thing with PPGs or % variables, but using OO features is much better.
I'll also often write unit tests that do setup in OnBeforeAllTests and cleanup in %OnClose, so that even if something goes very horribly wrong it'll have the best chance of actually running. Properties of the unit test are useful to store state relevant to this setup - the initial $TLevel (although that should always be 0), device settings, global configuration flags, etc. Thanks Tim! How do you debug a particular unit test in VSCode? Unit testing from within VS Code is now possible. Please see https://community.intersystems.com/post/intersystems-testing-manager-new-vs-code-extension-unittest-framework thanks, @John.Murray ! Will give it a try! Why are unit test methods instance methods? Since a running unit test is an instantiated object (%RegisteredObject), the unit test class itself can have custom properties, and the instance methods can use those properties as a way to share information. For example, initialize the properties in %OnBeforeAllTests(), and then access/change the properties in the test methods. 💡 This question is considered a Key Question. More details here. @Evgeny.Shvarov my hacky way of doing this is to create an untracked mac file with ROUTINE debug defined.
I just swap in the suite or method I want to run per Alex's instructions, set my breakpoints in VS code and make sure the debug configuration is in my VSCode settings:
"launch": {
"version": "0.2.0",
"configurations": [
{
"type": "objectscript",
"request": "launch",
"name": "debugRoutine",
"program": "^debug"
}
]
} That's indeed hacky! Thanks @Michael.Davidovich! Thanks @Joel.Solon!
But all this could be achieved without instance methods, right? Anyway, I'm struggling to find an easy way to debug a failed unittest. @Michael.Davidovich suggested the closest way to achieve it but I still want to find something really handy, e.g. an additional "clickable button" in VSCode above the test method that invites "debug this test method". Similar what we have for class methods now - debug this classmethod and copy invocation.
That'd be ideal. That's one of the things the new extension is designed to achieve. I am utilizing properties on class methods to good effect.
I would not use a classmethod only approach for normal development.
There is nothing stopping a community parallel UnitTest.Manager re-implementation that follows a ClassMethod pattern.
Some have reimplemented UnitTest.Manager:
1) Without Deleteing the test classes at end of run (With Run instead of DebugRun)
2) Not needed ^UnitTestRoot to be defined. Looking forward! Anything can be achieved without instance methods. The point here is that instance methods exist in object-oriented systems because they are considered a good, straightforward way to achieve certain things. In the case of unit tests sharing information using properties, that approach saves you from having to pass info around as method arguments, or declaring a list of public variables. I understand the argumentation, makes sense. Just curious how do you debug those unittests that fail?
Announcement
Andreas Dieckow · Oct 24, 2019
InterSystems Atelier has been tested with OpenJDK 8. The InterSystems Eclipse plug-in is currently available for Eclipse Photon (4.8), which requires and works with Java 8.
Article
Evgeny Shvarov · Jul 22, 2019
Hi Community!
We've introduced Direct Messages on InterSystems Community.
What's that?
Direct message(DM) is a Developer Community feature which lets you to send a direct message to InterSystems community member you want.
How to send it?
Open member's page, and click "Send Direct Message". Like here:
Or, open your account page and open the section "Direct Messages":
In Direct Messages you can see all the conversations and start the new one with Write new message:
The conversation could be between two or more people.
How a member will know about the message?
DC sends an email notification to a member if he has a new DM. Of course, you can setup if you want to receive DM email notifications.
Privacy
Attention! Direct messages are not private messages. Direct messages are pretty much the same as posts and comments but with the difference that you can alter the visibility of the message to certain people.
E.g. if John sends DM to Paul this DM is visible to John, Paul and to Developer Community admin. But this DM is hidden from other community members and public access, e.g. from search crawlers.
So it is safe to send contact data to each other which you consider possible to share with your recipient and DC admin.
What About Spam?
Only registered members who have postings can send direct messages.
Any registered members can receive and answer messages.
So, there is no spam expected.
Please report on any issues on Developers Issue Tracker or on Community Feedback track.
Stay tuned!
Question
Joaquin Montero · Mar 2, 2020
Hi Everyone,
I've been working on deploying an IRIS for Health environment in EKS. There is a video session in the InterSystems learning portal about this feature but I have not succeeded in finding the proper documentation and resources to use this in my Kubernetes cluster.
Has this been deprecated/discontinued? Any idea where can I find the resources? Should I stick to StatefulSets instead of using the IrisCluster resource type provided by this operator? Tagging @Luca.Ravazzolo and @Steven.LeBlanc I cannot find any real information about the Kubernetes operator either. They said in the video that it's ready and working, but it does not seem that way. Hi Guys
Thank you for your interest on the InterSystems Kubernetes Operator.
We are working hard at preparing it to be available for 2020.2 timeframe.
Stay tuned.