tried commands on separate lines with nothing being executed then tried the one line as shown above without luck
InterSystems Caché is a multi-model DBMS and application server. See more details here.
InterSystems Caché is a multi-model DBMS and application server. See more details here.
tried commands on separate lines with nothing being executed then tried the one line as shown above without luck
Hi all,
I am in need to use SCIM rest Api in cache class, could you please pour me some samples to use SCIM.
Actually, I need to form the JSON request for SCIM request for User Provision.
Could you please help me on this?
Thanks in advance,
Meenakshi M
We are looking at what we need to do to migrate from our current usage of Zen reports to InterSystems Reports. One of the hurdles for us is figuring out ways to interact with InterSystems reports programmatically from ObjectScript routines. There is a Java API for it, but it is possible to generate a report from InterSystems reports to a stream object in ObjectScript without diving into Java by using a %Net.HttpRequest.
Hello community,
I wanted to share my experience about working on Large Data projects. Over the years, I have had the opportunity to handle massive patient data, payor data and transactional logs while working in an hospital industry. I have had the chance to build huge reports which had to be written using advanced logics fetching data across multiple tables whose indexing was not helping me write efficient code.
Here is what I have learned about managing large data efficiently.
Choosing the right data access method.
As we all here in the community are aware of, IRIS provides multiple ways to access data. Choosing the right method, depends on the requirement.
Set ToDate=+H
Set FromDate=+$H-1 For Set FromDate=$O(^PatientD("Date",FromDate)) Quit:FromDate>ToDate Do
. Set PatId="" For Set PatId=$Order(^PatientD("Date",FromDate,PatID)) Quit:PatId="" Do
. . Write $Get(^PatientD("Date",FromDate,PatID)),!Hello!!!
Data migration often sounds like a simple "move data from A to B task" until you actually do it. In reality, it is a complex process that blends planning, validation, testing, and technical precision.
Over several projects where I handled data migration into a HIS which runs on IRIS (TrakCare), I realized that success comes from a mix of discipline and automation.
Here are a few points which I want to highlight.
I'm running a shell script and the q isn't exiting the screen. this is RHEL 7.9 I used to issue in VMS just fine but we have found that Linux scripts behave different. after these run I search the file for the status and depending on what it comes back with it will send an email.
if someone has anything better I'm listening
thanks
Paul
#!/bin/bash
TO_DAY=$(date +%A)
echo "Today is $TO_DAY"
#
touch /temp/CHECK_MIRROR_RPT.TXT
#
exec > /temp/CHECK_MIRROR_RPT.TXT
#
cache -U "%SYS" "Monitor^MIRROR"
q
#
to dismount/mount a database, use Dismount() and Mount() methods in SYS.Database class available in %SYS namespace.
NB: the database ID is its Directory
You'll find some examples of how to dismount/mount and check if a database is mounted (Mounted=1) or not (Mounted=0), and quickly see all the attributes of a database (via zwrite)
%SYS>set db="/opt/irisapp/data"
%SYS>w ##class(SYS.Database).%OpenId(db).Mounted
1
%SYS>w ##class(SYS.Database).%OpenId(db).Dismount()
1
%SYS>w ##class(SYS.Database).%OpenId(db).Mounted
0
%SYS>w ##class(SYS.Database).%OpenId(db).Mount()
1
%SYS>w ##class(SYS.Database).%OpenId(db).Mounted
1
%SYS>zw ##class(SYS.Database).%OpenId(db)
+----------------- general information ---------------
| oref value: 3
| class name: SYS.Database
| %%OID: $lb("/opt/irisapp/data","SYS.Database")
| reference count: 2
+----------------- attribute values ------------------
| %Concurrency = 0 <Set>
| BlockFormat = 2
| BlockSize = 8192 <Set>
| Blocks = 780288
| BlocksPerMap = 62464
| ClusterMountMode = 0 <Set>
| ClusterMounted = 0 <Set>
| CurrentMaps = 13
| Directory = "/opt/irisapp/data/" <Set>
| DirectoryBlock = 3
| EncryptedDB = 0 <Set>
| EncryptionKeyID = ""
| Expanding = 0
| ExpansionSize = 0 <Set>
| Full = 0
| GlobalJournalState = 3 <Get,Set>
| InActiveMirror = 0
| LastExpansionTime = "09/06/2023 20:00:01"
| MaxSize = 0 <Set>
|MirrorActivationRequired = 0
| MirrorDBCatchup = 0
| MirrorDBCreatedNew = 0
| MirrorDBName = ""
| MirrorDBPaused = 0
| MirrorFailoverDB = 0
| MirrorNoWrite = 0
| MirrorObsolete = 0
| MirrorSetName = ""
| Mirrored = 0
| Mounted = 1
| NewGlobalCollation = 5 <Set>
|NewGlobalGrowthBlock = 50 <Set>
| NewGlobalIsKeep = 0 <Set>
|NewGlobalPointerBlock = 16 <Set>
| NumberOfConfigDB = 0
| ROReasonCode = 0
| ROReasonText = ""
| ReCreate = 0
| ReadOnly = 0 <Set>
| ReadOnlyMounted = 0
| Reinitialize = 0
| RequestSize = 0
| ResourceName = "%DB_IRISAPP-DATA"
|RunCatchupDBOnCreate = 1
| SFN = 6
| Size = 6096 <Set>
| Skeleton = 0
| SparseDB = 0
+-----------------------------------------------------
%SYS>
Hi,
I'm doing a query in SQL and I need to sort my data by some non-repeated field.
Unfortunately, my data is grouped in a way that I cannot guarantee that any column will not have repeated data, so one solution would be to take the row number.
Also, the Cache is not accepting Row_Number () in my querry and I would like to know if there is another solution to return line numbers or some way to add this function to the Cache.
Best regards.
This is a rather personal view of the history before Caché.
It is in no sense meant to compete with the excellent books from Mike Kadow discussed in an earlier article.
We have different histories and so this is meant to create a different perspective of the past.
The whole story started in 1966 at MGH (Mass.General Hospital) on a PDP-7 Ser.#103
with 8K of memory (18-bit words) [today = 18K byte ] as a spare system.
"Serial Number 103 - was located in the basement of the now demolished Thayer Building,
currently [2014] the site of the Cox Cancer Center at MGH.
How many times have we migrated an IRIS Instance to another machine, maybe even another version, and after a few days realized we forgot that one SSL Configuration critical for a Business Operations to work? Or maybe a credential, or a lonely class in a package by itself?
The simple solution is to make a checklist¹. A checklist of the entities we have to move. But simple checklists on Word documents are often forgotten, or just ignored.
What tools or techniques do you use to debug a Production during development? I know the Management Portal shows the message queue and event log, but I'm wondering if there are better ways to trace a message through the full BS > BP > BO flow without relying only on logs.
I'm connecting to Intersystems Cache database using Intersystems JDBC Driver. There are several network interfaces on client host. I need to make all the Cache traffic to go through a particular interface. Is there a way to choose which network interface to use for Cache connection via JDBC Driver API or somehow via Java code? The approach to use ip route add is suitable but I'm looking for a Java-way like setLocalAddress() on some APIs or something.
I am working on a cache database query. Since the cache database doesn't support CTE I am using joins to calculate data. The issue is that aggregated data is only calculated for one where the condition for each row in the union. For eg. only the 'Prop decisioned' row is calculated others are always 0. There are many more case conditions.

Neuschwanstein Castle
Tabular data storages based on what is formally known as the relational data model will be celebrating their 50th anniversary in June 2020. Here is an official document – that very famous article. Many thanks for it to Doctor Edgar Frank Codd. By the way, the relational data model is on the list of the most important global innovations of the past 100 years published by Forbes.
On the other hand, oddly enough, Codd viewed relational databases and SQL as a distorted implementation of his theory. For general guidance, he created 12 rules that any relational database management system must comply with (there are actually 13 rules). Honestly speaking, there is zero DBMS's on the market that observes at least Rule 0. Therefore, no one can call their DBMS 100% relational :) If you know any exceptions, please let me know.
UPDATE: since version 0.0.4 of the extension was published on 2025-11-23 it is now possible to use gj :: configExplorer directly in VS Code on Windows.
In my previous article introducing gj :: configExplorer I flagged up how an apparent bug in the Windows elements of the Native API for Node.js means it's not currently available to run in VS Code on a Windows desktop. In a comment on that article I offered a workaround, but this requires a Docker-equipped Linux host you can SSH to.
If you don't have a suitable target it's now possible to leverage your local Windows Docker Desktop.
For those who learned Caché ObjectScript from scratch: what kind of personal or practice projects did you build to get comfortable with the language? I come from a C# background and I'm looking for project ideas that are small enough to be feasible but meaningful enough to actually teach the core COS concepts.
I want to develop a REST API for uploading PDF files. I started with OPENAPI spec file. When I test, I get error 8727 referencing missing required parameter file.
"{"$c(13,10,9)"""errors"":[ {"$c(13,10,9,9,9)"""code"":8727,"$c(13,10,9,9,9)"""domain"":""%ObjectErrors"","$c(13,10,9,9,9)"""error"":""ERROR #8727: Parameter required: file."","$c(13,10,9,9,9)"""id"":""RESTRequired"","$c(13,10,9,9,9)"""params"":[""file"""$c(13,10,9,9,9)"]"$c(13,10,9,9)"}"$c(13,10,9)"],"$c(13,10,9)"""summary"":""ERROR #8727: Parameter required: file.
When we need to integrate Caché/IRIS with other relational databases, one common question arises: “How do I set up the JDBC connection?”.
The official documentation doesn’t always provide a straightforward step-by-step guide, which can be frustrating, especially for beginners.
In this article, I’ll walk you through the entire process of configuring a JDBC connection with MySQL, from downloading the connector to linking tables in Caché/IRIS.
Note: JDBC connections in Caché/IRIS have some limitations, especially regarding caching and the use of ResultSet
I still remember the very first code I wrote in Object Script
Coming from Python, it felt so strange at first, but over time I started to see why the language was built the way it is.
If you’re just starting out, keep in mind that ObjectScript might feel a bit niche and mostly tied to IRIS products, but the way you work with it can really pay off - fast development, a powerful database, and a solid platform to learn on.
Sometimes it feels like you’ve stepped into a world that’s both familiar and different.
Many organizations that operate systems built on legacy technology stacks are facing significant support and maintenance complexities. They are eager to modernize, but the transition is usually prohibitively complex and expensive. These challenges apply to virtually any legacy tech, while InterSystems-based systems have their own unique nuances.
Key modernization challenges include:
Hello, community.
I've been working with Intersystem Caché for two years, and right away I was excited about the rich ecosystem that Caché provides. However, I was disappointed with calls using #call, and I understand that it was a limitation of the time. Well, the frustration is that #call returns null by default, meaning an AJAX request is executed, but there's no hook to retrieve the return from that request. The only way to retrieve the data from that request is by building a callback on the server side using &js<>.
Hi everyone,
I'm working on a requirement to generate and export medical reports to PDF using Logi Reports. The core requirement is that each generated PDF must be encrypted (password-protected), and the password needs to be dynamically set to the specific Patient's Date of Birth (DOB).
Currently, the report is populated using a Stored Procedure as its data source.
My questions are:
Patient_DOB column from the Stored Procedure)?Was wondering if anyone had a Dynamic way to see if a Global is still being used by a Class File.
We have been monitoring our Global Size recently, and I am trying to find problematic Class files that are not being cleaned up or used appropriately. I have come across some globals that do not seem to have a Class attached to them anymore, and instead of deleting globals 1 by 1, I was looking for a way that we could dynamically do this since the globals have data that is stale in them.
Thanks
Scott
Starting out with ObjectScript, it is really exciting, but it can also feel a little unusual if you're used to other languages. Many beginners trip over the same hurdles, so here are a few "gotchas" you'll want to watch out for. (Also few friendly tips to avoid them)
NAMING THINGS RANDOMLY
We have all been guilty of naming something Test1 or MyClass just to move on quickly. But once your project grows, these names become a nightmare.
➡ Pick clear, consistent names from the start. Think of it as leaving breadcrumbs for your future self and your teammates.
The Interoperability user interface now includes modernized user experiences for the DTL Editor and Production Configuration applications that are available for opt-in in all interoperability products. You can switch between the modernized and standard views. All other Interoperability screens remain in the Standard user interface. Please note that changes are limited to these two applications and we identify below the functionality that is currently available.
To try out the new screens prior to upgrading, you can download the 2025.
I am regularly contacted by customers about memory sizing when they get alerts that free memory is below a threshold, or they observe that free memory has dropped suddenly. Is there a problem? Will their application stop working because it has run out of memory for running system and application processes? Nearly always, the answer is no, there is nothing to worry about. But that simple answer is usually not enough. What's going on?
Consider the chart below. It is showing the output of the free metric in vmstat
In this series of articles, I'd like to present and discuss several possible approaches toward software development with InterSystems technologies and GitLab. I will cover such topics as:
In the first article, we covered Git basics, why a high-level understanding of Git concepts is important for modern software development, and how Git can be used to develop software.
I am connecting to an intersystems cache database via C# and I need to obtain a list of all available namespaces.
I am using code like this:
// Source - https://stackoverflow.com/q/79393836
// Posted by Tony Valenti, modified by community. See post 'Timeline' for change history
// Retrieved 2026-04-21, License - CC BY-SA 4.0
namespace ConsoleApp13
{
internal class Program
{
static void Main(string[] args)
{
var CS = "Server=XXXXX;User=system;Password=sys;";
var C = new InterSystems.Data.CacheClient.CacheConnection(CS);
C.Open();
var Command = C.CreateCommand();
Command.CommandText = $@"
select * from %SYS.Namespace_List()
";
var Values = Command.ExecuteReader();
while (Values.Read()) {
}
}
}
}Hi Team,
We are currently running InterSystems Caché 2018 on an IBM AIX server and would like to configure the Cache instance to start automatically when the server boots or is rebooted.
Could you please provide the recommended steps or any official scripts/guidelines to enable auto-start for the Cache instance (QA2018) on AIX?
Additionally, if there are any best practices or prerequisites (such as filesystem mount options, service dependencies, or startup order) that we should consider, please share those as well.
Thanks,
Ganesh
Is there a way to omit or skip rollback of some data changes during a transaction rollback? Maybe some sort of "autonomous transaction"?
The issue is with error logging in transaction. For example we may have in nested calls the following structure:
TS
<some code>
<error happens>
TRO 1
<error log to database>
but if this code is in another transaction, and that rolls back we lose error data.
Is there a way to do something like
TS
<some code>
<error happens>
TRO 1
<autonomous transaction start\flag>
<error log to database>
so error log will be stored anyway?