Search

Clear filter
Article
Dmitry Maslennikov · Apr 19, 2021

Grafana support for InterSystems IRIS

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

Running InterSystems Reports in containers

> 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: ![image](https://user-images.githubusercontent.com/5127457/120627117-04bded00-c46c-11eb-99ad-5bc89e3bfb76.png) # 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. ![image](https://user-images.githubusercontent.com/5127457/120627668-90377e00-c46c-11eb-87c4-9745665c1857.png) 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`: ![image](https://user-images.githubusercontent.com/5127457/120638494-da266100-c478-11eb-80a0-b89ba4e345db.png) Create a new folder pointing to `/reports`: ![image](https://user-images.githubusercontent.com/5127457/120638907-6fc1f080-c479-11eb-965d-8346d603ada2.png) ![image](https://user-images.githubusercontent.com/5127457/120638753-34bfbd00-c479-11eb-893f-0980ebe4f569.png) 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: ![image](https://user-images.githubusercontent.com/5127457/120632926-333ec680-c472-11eb-8367-c1769fc344ce.png) ![image](https://user-images.githubusercontent.com/5127457/120632973-42257900-c472-11eb-870f-9af4f77a5161.png) 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

InterSystems Tech Article Contest

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

Fraud Management with InterSystems IRIS

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

InterSystems Ideas News #1

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

InterSystems Global Summit 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

InterSystems Embedded Python in glance

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

InterSystems Iberia Summit 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

InterSystems at HackMIT hackathon

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

InterSystems Partnertage DACH 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

InterSystems Developer Tools Contest

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

Debugging Unittests in InterSystems IRIS

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

Open JDK with InterSystems Atelier

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

Direct Messages on InterSystems Developers

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

InterSystems Kubernetes Operator documentation

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.