#Documentation

6 Followers · 81 Posts

This tag relates to any discussions about InterSystems Data Platform documentation.

InterSystems Documentation

InterSystems Official Daniel Palevski · Mar 26, 2025

The 2025.1 release of InterSystems IRIS® data platform, InterSystems IRIS® for Health, and HealthShare® Health ConnectTMis now Generally Available (GA). This is an Extended Maintenance (EM) release.

Release Highlights

In this exciting release, users can expect several new features and enhancements, including:

  1. Advanced Vector Search Capabilities
    • A new disk-based Approximate Nearest Neighbor (ANN) index significantly accelerates vector search queries, yielding sub-second responses across millions of vectors.
0
1 400
Archive
Announcement Michelle Spisak · Mar 25, 2025

Are you a developer, data engineer, integration engineer, or data scientist who works hands-on with InterSystems products? 

We are conducting 30-45 minute interviews to understand your experience — how you started with InterSystems products, where you find helpful code samples, and how we can improve our products to better support your journey. 

If you’re interested, fill out a quick survey to share your contact info and experience.

If you're selected, we will schedule a session at your convenience between April 2 and May 8 for an interview based on the information you provide.

🎁 As a thank-you, interview participants will receive 10,000 Global Masters points!

Your feedback will directly help us improve your experience using InterSystems products and services.

Kindly note that the spots are limited. 

0
0 156
Article Colin Langella · Mar 11, 2025 2m read

Intro

In the process of trying to get more familiar with Objectscript I decided to try to build a general priority queue since I wasn't able to find an implementation anywhere. My though process for implementing this followed this general path.

Binary Heap

My first though to try to make this work quickly was to implement a binary heap and my first attempt at this used a multidimensional to build it. This version was relatively efficient, worked for strings/numbers natively, and worked for objects be letting the user override the comparitor.

Class pqueue.Queue Extends %RegisteredObject
{

Property Data As %Any [ MultiDimensional ];

Property Size As %Integer [ InitialExpression = 0 ];

Property Comparitor As %String [ InitialExpression = "(a,b) return a < b" ];
    
    Method Swap(i As %Integer, j As %Integer) As %Status [ Private ]
    {
    set temp = ..Data(i)
    set ..Data(i) = ..Data(j)
    set ..Data(j) = temp
    }
    
    Method Comp(x As %Any, y As %Any) As %Boolean [ Private ]
    {
    return $XECUTE(..Comparitor, x, y)
    }
    
    Method PercolateUp(idx As %Integer) [ Private ]
    {
    while idx > 0 {
    set newidx = (idx-1)\2

    if ..Comp( ..Data(idx), ..Data(newidx) ) do ..Swap( idx, newidx )
    else                                     Quit

    set idx = newidx
}
}

Method PercolateDown() [ Private ]
{
set idx = 0

while ((idx+1)*2) < ..Size {
        if ..Comp( ..Data(idx*2+2), ..Data(idx*2+1) ) set newidx = idx*2+2
        else                                          set newidx = idx*2+1
    
        if ..Comp( ..Data(idx), ..Data(newidx) ) Quit
    
        do ..Swap( idx, newidx )
        set idx = newidx
    }
    
    if ( (idx*2+1 < ..Size) && ..Comp( ..Data(idx*2+1), ..Data(idx) ) ) do ..Swap( idx, idx*2+1 )
    }
    
    Method IsEmpty() As %Boolean
    {
    return ..Size = 0
    }
    
    Method Top() As %Any
    {
    if ..IsEmpty() return ""
    return ..Data(0)
    }
    
    Method Put(inp As %Any) As %Status
    {
    set sts = $$$OK
    
    set ..Data( ..Size ) = inp
    do ..PercolateUp( ..Size )
    set ..Size = ..Size + 1
    
    return sts
    }
    
    Method Get(Output obj As %Any) As %Status
    {
    set sts = $$$OK
    if ..IsEmpty() {
        set obj = ""
        return $$$ERROR( "Cannot Get() from empty Queue" )
    }
    
    set obj = ..Data( 0 )
    set ..Size = ..Size - 1
    set ..Data( 0 ) = ..Data( ..Size )
    do ..PercolateDown()
    kill ..Data( ..Size )
    return sts
    }
    
    Method GenerateComparitor(operator As %String = "<", transform As %String = "") As %Status
    {
    set ..Comparitor = "(a,b) return a" _ transform _ " " _ operator _ " b" _ transform
    return $$$OK
    }
    
    }

After getting this working I wanted to try out different internal arrays since I assumed multidimensional arrays must be slower than a simple integer indexed array. So I modified the above code to use

*   `Property Data As list Of %Any;` : This works OK but it is about 3-4 times slower than using a multidimensional making it pointless.
*   `Property Data As %DynamicArray;` : I assumed this would be relatively fast but proved to be slow to the point of absurdity. When the amount of data stored in the queue is small it is around as fast as the `list of %Any`, but as the data grows the time it takes to make inserts and gets grows linearly which makes it pointless to build a heap on top of.

## Using the Multidimensional Array's Self-sorting

On its face this idea seems pretty simple, use the fact that the multidimensional array is always sorted to grab the lowest cost (highest priority) item. A problem with this are that indexing by an object simply uses the string representation of that object which isn't useful. To handle this a customer `evaluator` function is needed to return the integer or string evaluation of an object which is then sorted, it is then stored as `data( evaluation, obj_str_rep ) = object` which ensures that objects are correctly sorted even when two objects evaluate to the same value.

    Class pqueue.SparseQueue Extends %RegisteredObject
    {
    
    // Parameter Comp(a,b) As $XECUTE(..Comparitor, a, b);
    
    Property Data As %Any [ MultiDimensional ];
    
    Property Size As %Integer [ InitialExpression = 0 ];
    
    Property Evaluator As %String [ InitialExpression = "(a) return a" ];
    
    Method IsEmpty() As %Boolean
    {
        return ..Size = 0
    }
    
    Method Top() As %Any
    {
        if ..IsEmpty() return ""
        return $Order( ..Data("") )
    }
    
    Method Put(inp As %Any) As %Status
    {
        set sts = $$$OK
    
        set ..Data( $XECUTE(..Evaluator, inp), inp ) = inp
        set ..Size = ..Size + 1
    
        return sts
    }
    
    Method Get(Output obj As %Any) As %Status
    {
        set sts = $$$OK
        if ..IsEmpty() {
            set obj = ""
            return $$$ERROR( "Cannot Get() from empty Queue" )
        }
    
        set loc = $ORDER( ..Data("") )
        set obj = ..Data(loc, $ORDER( ..Data(loc, "")))
    
        set ..Size = ..Size - 1
        kill ..Data( loc, obj )
        return sts
    }
    
    Method GenerateEvaluator(transform As %String = "") As %Status
    {
        set ..Evaluator = "(a) return a" _ transform
        return $$$OK
    }
    
    }

This method proved to be by far the fastest. It has some slight disadvantages in that it can be harder to write an evaluator than a comparitor and, in the form given above, it cannot hold the same object at the same value twice (this is a rare case but could theoretically be a problem or a benefit).

## Speed Test

To test these out I wrote a simple script that generates a large randomized weighted directed graph and runs [Dijkstra's shortest path algorithm](https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-greedy-algo-7/) using a given queue object. Using a graph with `150000` vertices where each has `10` neighbors, the output is printed below. Here while the algorithm is running an update is printed every `10000` edges checked, where the time since the last 10 thousand and size of the priority queue is printed, with some final stats at the end. The order they are run in is

*   Self-sorting Multidimensional

*   Heap Multidimensional

*   Heap Dynamic Array

*   Heap List of Object

> Generated Random Graph
0
0 271
InterSystems Official Daniel Palevski · Mar 4, 2025

As of InterSystems IRIS® data platform version 2025.1, InterSystems is officially deprecating MultiValue and including it in the Deprecated and Discontinued Features list. While InterSystems will continue to support existing customers using MultiValue, it is not recommended for new applications.

What This Means for You:

  • Continued Support: Support for MultiValue will still be available through the Worldwide Response Center (WRC) on a "best effort" basis, as is provided for releases older than our Minimum Supported Versions.
0
0 255
InterSystems Official Daniel Palevski · Dec 12, 2024

The first developer previews of InterSystems IRIS® data platform, InterSystems IRIS® for Health, and HealthShare® Health Connect 2025.1 have been posted to the WRC developer preview site.  Containers can be found on our container registry and are tagged latest-preview.

These developer previews include the feature to migrate to IBM "Open XL C/C++ for AIX" 17.x compiler ensuring compatibility with future AIX builds as older compilers approach end-of-support. This migration focuses on the aixopenssl30 target, supporting SSL3 on AIX 7.2 and 7.3.

13
0 581
Article Ariel Glikman · Mar 8, 2024 3m read

The IKO will dynamically provision storage in the form of persistent volumes and pods will claim them via persistent volume claims.

But storage can come in different shapes and sizes. The blueprint to the details about the persistent volumes comes in the form of the storage class.

This raises the question: we've deployed the IrisCluster, and haven't specified a storage class yet. So what's going on?

You'll notice that with a simple

kubectl get storageclass

you'll find the storage classes that exist in your cluster.

1
1 493
InterSystems Official Daniel Palevski · Feb 19, 2025

February 19, 2025 – Alert: SQL Queries Returning Wrong Results

InterSystems has corrected two issues that can cause a small number of SQL queries to return incorrect results. In addition, InterSystems has corrected an inconsistency in date/time datatype handling that may lead to different, unexpected – yet correct – results for existing applications that rely on the earlier, inconsistent behavior.

0
1 204
Article Ariel Glikman · Mar 6, 2024 3m read

The IKO allows for sidecars. The idea behind them is to have direct access to a specific instance of IRIS. If we have mirrored data nodes, the web gateway will (correctly) only give us access to the primary node. But perhaps we need access to a specific instance. The sidecar is the solution.

Building on the example from the previous article, we introduce the sidecar by using a mirrored data node and of course arbiter.

apiVersion: intersystems.com/v1alpha1
kind: IrisCluster
metadata:
  name: simple
spec:
  licenseKeySecret:
    #
1
1 502
Article Ariel Glikman · Feb 2, 2025 3m read

All pods are assigned a Quality of Service (QoS). These are 3 levels of priority pods are assigned within a node.

The levels are as following:

1) Guaranteed: High Priority

2) Burstable: Medium Priority

3) BestEffort: Low Priority

It is a way of telling the kubelet what your priorities are on a certain node if resources need to be reclaimed. This great GIF below by Anvesh Muppeda explains it.

If resources need to be freed, firstly pods with Best Effort QoS will be evicted, then those with Burstable, and finally those with Guaranteed.

0
2 434
Article Ariel Glikman · Mar 4, 2024 4m read

We now get to make use of the IKO.

Below we define the environment we will be creating via a Custom Resource Definition (CRD). It lets us define something outside the realm of what the Kubernetes standard knows (this is objects such as your pods, services, persistent volumes (and claims), configmaps, secrets, and lots more). We are building a new kind of object, an IrisCluster object.

apiVersion: intersystems.com/v1alpha1
kind: IrisCluster
metadata:
  name: simple
spec:
  licenseKeySecret:
    #
1
2 710
InterSystems Official Daniel Palevski · Jan 24, 2025

The latest extended maintenance releases of InterSystems IRISInterSystems IRIS for Health, and HealthShare Health Connect are now available.

✅ 2024.1.3

Release 2024.1.3 provides bug fixes for any of the previous 2024.1.x releases, including the fix for the following alert recently issued - Alert: Invalid Data Introduced to Database and Journal files with Specific...

0
1 244
InterSystems Official Daniel Palevski · Jan 14, 2025

InterSystems has corrected a defect that causes invalid database and journal records to be introduced when using a specific $LIST syntax. The likelihood of encountering this defect is very low but the operational impacts can be significant.

Products Affected

  • InterSystems IRIS® data platform: Versions 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2, 2024.3
  • InterSystems IRIS® for Health: Versions 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2, 2024.3
  • HealthShare® Health Connect: Versions 2023.3.0, 2024.1, 2024.1.1, 2024.1.2, 2024.2, 2024.3
  • HealthShare® Unified Care Record and Suite: Version 2024.
0
0 245
Announcement John Murray · Dec 16, 2024

The InterSystems platforms have always offered dynamic documentation of the packages and classes in a namespace, a feature known informally as Documatic. But what if you need to publish this class reference information on a website without requiring the site to be connected to an IRIS server containing the actual classes?

For my entry to the December 2024 Developer Community “Bringing Ideas to Reality” contest I decided to implement the idea of a generator that produces a static set of class reference pages

1
2 270
Question Scott Roth · Nov 20, 2024

Who do we report Documentation issues to?

Since moving to the new format, when searching for things within the documentation I get a blank screen with no results.

When I type in my search criteria, I can see it trying to find results but does not return results.

This does not seem like it is limited to a certain Web Browser, as I have seen this happen in Chrome and Edge

Thanks

Scott

25
0 377
InterSystems Official Daniel Palevski · Nov 27, 2024

InterSystems announces General Availability of InterSystems IRIS, InterSystems IRIS for Health, and HealthShare Health Connect 2024.3

The 2024.3 release of InterSystems IRIS® data platform,InterSystems IRIS® for Health, and HealthShare® Health Connect is now Generally Available (GA).

Release Highlights

In this release, you can expect a host of exciting updates, including:

  1. Much faster extension of database and WIJ files
  2. Ability to resend messages from Visual Trace
  3. Enhanced Rule Editor capabilities
  4. Vector search enhancements
  5. and more.
0
0 456
Article Murray Oldfield · Sep 24, 2024 7m read

Problems with Strings

I am accessing IRIS databases with JDBC (or ODBC) using Python. I want to fetch the data into a pandas dataframe to manipulate the data and create charts from it. I ran into a problem with string handling while using JDBC. This post is to help if anyone else has the same issues. Or, if there is an easier way to solve this, let me know in the comments!

I am using OSX, so I am unsure how unique my problem is. I am using Jupyter Notebooks, although the code would generally be the same if you used any other Python program or framework.

0
0 648
Announcement Raj Singh · Feb 14, 2023

For those of you who still use the Studio IDE for ObjectScript programming and are going through the process of migrating to VS Code, did you know there's a section in the VS Code documentation just for you? Have a look at the Migrating from Studio chapter. It covers:

  • Server-side editing and source control
  • Studio projects
  • Importing server definitions from the Windows Registry
  • Loading Studio snippets and syntax colors

And now there's a new section, Keyboard Shortcuts, that shows you the VS Code equivalent for shortcuts you may be used to, so your hands never have to leave the keyboard.

6
0 585
Article Ariel Glikman · Sep 2, 2024 1m read

Say I want to uninstall the IKO - all I need to do is:

> helm uninstall intersystems

What happens behind the scenes is that helm will uninstall what was installed when you ran :

> helm install intersystems <relative/path/to/iris-operator>

In some sense - this is symmetric to when we ran install - however with a different image.

You'll notice that when you install, it knows what image to take from:

operator:
  registry: containers.intersystems.com
  repository: intersystems/iris-operator-amd
  tag: 3.7
0
0 285
Article Alex Woodhead · Jan 26, 2024 8m read

Considering new business interest in applying Generative-AI to local commercially sensitive private data and information, without exposure to public clouds. Like a match needs the energy of striking to ignite, the Tech lead new "activation energy" challenge is to reveal how investing in GPU hardware could support novel competitive capabilities. The capability can reveal the use-cases that provide new value and savings.

Sharpening this axe begins with a functional protocol for running LLMs on a local laptop.

My local Mac has an M1 processor.

3
8 1759
InterSystems Official Timothy Leavitt · Nov 29, 2023

We are excited to announce a new part of InterSystems documentation that makes it easier to upgrade InterSystems IRIS® data platform, InterSystems IRIS® for Health™, or HealthShare® Health Connect. The Upgrade Impact Checklist at https://docs.intersystems.com/upgrade shows you all the things you need to consider – and only the things you need to consider – in an upgrade between any two versions.

8
3 794
Article Ariel Glikman · Aug 28, 2023 3m read

With the world (as well as our own technology) moving to the cloud at such a fast pace it is easy (at least for myself) to get caught up in the little details. One thing I, and some clients of ours, had run into a couple of times was the necessity to specify the version of the images one plans to use with the IKO.

For example, one issue that often gets overlooked is the compatibilityVersion field for the IKO. Depending on which IKO you are using there is a default value (for IKO 3.6 this happens to be 2023.2.0, and for IKO 3.5 this is 2022.3.0).

4
1 584
Question Scott Roth · Jul 6, 2023

I had attempted to create a REST Operation before but did not have success. As I am going through the Tutorials and Documentation everything references REST services, but I have a case where I want to create a REST Operation that makes Epic API calls against Interconnect. I have done SOAP operations before and we currently have one in our Production Namespace, but from what I understand SOAP has the wsdl which defines al the structures and etc, where REST does not. 

So how does one go about creating a REST Operation if Learning Tutorials and Documentation always talks about REST services?

1
1 379
Article Alex Woodhead · Jun 16, 2023 2m read

An interim idea to bring more dark to the docs with different font.

Process:

  • In Firefox web browser address bar navigate to: "about:support"
  • Look for label "Profile Folder", and click on the corresponding "Open Folder" button.
  • Drill-down / Open sub-folder called Chrome.
  • Create file here called: userContent.css

Content of file:

@-moz-document domain(docs.intersystems.com) {
:root {
 --iscbluelightest:#0c0405 !important;
 --iscbluelight:#91331f !important;
 --iscblue:#ccc96a !important;
 --iscbluedark:#c6bbb1 !important;
 --iscbluedarker:#dddacc !important;
 --iscbluedarkest:#e5e3d8 !important;
 --iscgreen:#fe5f63 !important;
 --iscgreenlight:#401b1c !important;
 --iscturquoise:#482bc2 !important;
 --iscyellow:#034db6 !important;
 --iscyellowdark:#00197f !important;
 --iscred:#35ffff !important;
 --iscredlightest:#060d0b !important;
 --iscwhite:#000000 !important;
 --iscoffwhite:#040404 !important;
 --iscwhiteporcelain:#130f0e !important;
 --iscgraylightest:#100f0e !important;
 --iscgraylighter:#1f1f1f !important;
 --iscgraylight:#343434 !important;
 --iscgray:#a1939e !important;
 --iscgraydark:#a19688 !important;
 --iscgraydarker:#bcb7b2 !important;
 --iscgraydarkest:#cccccc !important;
 --textcolor:#fff !important;
 --linkcolor:var(--iscgraydarker) !important;
 --font-family-default:Comic Sans !important;
 --font-family-heading:Comic Sans !important;
 --font-weight-default:400;
 --font-size-default:16px
}
div.caution {
 color:#ffffff !important;
}
span.caution {
 color:#ffffff !important;
}
/*
div.programlisting {
    background-color:#002200 !important;
    color:#00ca00 !important;
}
span.COS20 {
    color:#c0b733 !important;
}
span.COS24 {
 color:#d4ca76
}
span.COS11 {
    color:#d4ca76 !important;
}
span.COS06 {
    color:#ffffff !important;
}
span.COS03 {
    color:#00ffff !important;
} */
}
0
0 240
Question Marcelo Witt · Mar 29, 2023

Looking at the documentation, I see that the global ^ROUTINE brings the information and code of the .INT version of the routines. However, I would like to know where the equivalent information of the .MAC version is, as I did not find any reference to this in the documentation.
Some information in the .MAC version are hidden or already converted into the .INT version, and I would like to have access to this information through the system, and not just opening the routine in the studio.

2
0 429