#Caché

30 Followers · 4.5K Posts

  

InterSystems Caché is a multi-model DBMS and application server. See more details here.

Documentation.

Question Colin Brough · Jun 26, 2025

I am attempting to follow the tutorial at Publishing Web Services Using Caché | Caché Web Services QuickStart Tutorial | Caché & Ensemble 2018.1.4 – 2018.1.11 to build a toy SOAP web-service using Cache but am running into what I suspect are permissions issues, or perhaps setting up the "plumbing" to get an incoming request to call the web-service methods.

Ensemble instance running on local laptop. Only the Ensemble private web-server installed on the machine (no IIS or Apache).

Working through the tutorial, when I get to testing the service using the terminal (Testing the Service from the

0
0 74
Article Tomoko Furuzono · Aug 29, 2024 1m read

InterSystems FAQ rubric

This can be achieved by using the CSV() procedure of the %SQL.Util.Procedures class.
Below is an example of usage code. (Assuming that the file test.csv is in c:\temp.)

 Set rowtype="Name VARCHAR(50),UID VARCHAR(50), PHONE VARCHAR(50)"
 Set filename="c:\temp\test.csv"
 Set result=##class(%SQL.Statement).%ExecDirect(,"call %SQL_Util.CSV(,?,?)",.rowtype,.filename)
 Set rset =result.%NextResult()
 
 // To display all results, use do rset.%Display()
 While rset.%Next() {
     Write "Name:",rset.%GetData(1)," UID:",rset.%GetData(2)," PHONE:",rset.%GetData(3),!
     }

 Set rset="",result
8
7 586
Question Pietro Di Leo · Jun 21, 2025

Hi everyone,

I'm preparing to move to a new PC soon and I'm trying to migrate the server connections I use in IRIS Studio to the new environment.

I’ve followed without success an old procedure I've found on a post on the community that involves exporting the registry key from:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Intersystems\Cache\Servers

But I’ve realized that this only includes the entries from the Server Manager and not the actual server connections used within IRIS Studio and shown within the "Server Connections" menu.

As I've done to copy other software configurations, I also checked the

2
0 168
Question Eduard Lebedyuk · May 24, 2017

How do I write DDL script for collection properties?

For example I want to create the following class:

Class SQLUser.Person {

Property Name As %String;

Property FavoriteColors As list Of %String;

}

My DDL script looks like this:

CREATE TABLE Person (Name varchar(50), FavoriteColors ???)
5
0 461
Question Vladimir Vodicka · Jun 20, 2025

Hello,

I have a problem generating QR code in Caché now.

After executing the code

set Status=##Class(%SYS.QRCode).GenerateImage(P0,,.DataURI)

(variable P0 contains data for QR code)

an error is displayed now:

"<NOTOPEN>zGenerate+27^%SYS.QRCode.1",,,,,,,,

("$^zGenerate+27^%SYS.QRCode.1 +1","$^zGenerateImage+4^%SYS.QRCode.1 +1"

This error occurs only on two servers, on the others the code works fine.

When calling the method, I do not specify any external file that should be opened.

Thank you for the answers.

1
0 93
Job Coral Montero · May 16, 2025

Hello InterSystems community!

We have an amazing opportunity for 3 experienced Caché developers to join our team in building an innovative platform in the MedTech sector.

What we offer:

  • Hybrid work (Barcelona or Madrid)
  • Be part of a team from the ground up, with a direct impact on creating cutting-edge medical solutions!
  • Great professional growth opportunity

If you have experience with Caché and are ready for an exciting challenge with a forward-thinking company, this is your chance!

Looking forward to hearing from you and having you join this incredible project! 🚀

Feel free to reach out to

1
0 206
Question Ryan VanSlyke · Jun 18, 2025

I'm using a %Net.HttpRequest which had been successful in the past, but started failing at some point with a SSL/TLS protocol error.

ERROR #6085: Unable to write to socket with SSL/TLS configuration 'groundca', error reported 'SSL/TLS error in SSL_connect(), SSL_ERROR_SSL: protocol error, error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol'

The SSL/TLS configuration:

The request's SSLConfig is set to the "groundca" config when making the request.

A request using the same URL, API key, and CA file through Curl receives the desired response from the API at

3
0 255
Question Justin Ruggles · Jun 17, 2025

I am trying to add a value to my concatenation string and the value is not being inserted in the right place. I am adding onto this code from another developer and cannot seem to get it to work. The only code I have added is underlined in bold red.

This is how the translated HL7 message looks:

OBX|1|CE|CDX^History||Specimen 1 Clinical History: CLINICAL HISTORY\.br\\.br\Specimen 2 Clinical History: CLINICAL HISTORY 2\.br\Specimen 1 Suspected Clinical Diagnosis\.br\Specimen 3 Clinical History: HISTORY 3\.br\Specimen 2 Suspected Clinical Diagnosis

This is how it should look:

OBX|1|CE|CDX^History||Spe

0
0 91
Question Alexey Maslov · Jun 10, 2025

Having been inspired with Shared code execution speed question/discussion, I dare to ask another one which is annoying me and my colleagues for several weeks.

We have a routine called Lib that comprises 200 $$-functions of 1500 code lines total. It was noticed that after calling _any_ function of another rather big routine (1900 functions, 32000 lines) the next call of $$someFunction^Lib(x) is getting 10-20% slower than previous call of the same function. This effect doesn't depend on: 

  • which one specific function is being called between two calls of $$someFunction^Lib(x),
  • which one specific
16
0 293
Discussion Harshitha · May 30, 2025

Hey everyone,

I'm diving deeper into Caché ObjectScript and would love to open a discussion around the most useful tips, tricks, and best practices you’ve learned or discovered while working with it.

Whether you're an experienced developer or just getting started, ObjectScript has its own set of quirks and powerful features—some well-documented, others hidden gems. I’m looking to compile a helpful set of ideas from the community.

Some areas I’m especially interested in:

  • 💡 Clever use of %INCLUDE, macros, and preprocessor directives
  • ⚙️ Best practices in class-based development using %Persistent,
3
4 215
Article Harry Tong · Jun 6, 2025 2m read

If you're migrating from Oracle to InterSystems IRIS—like many of my customers—you may run into Oracle-specific SQL patterns that need translation.

Take this example:

SELECT (TO_DATE('2023-05-12','YYYY-MM-DD') - LEVEL + 1) AS gap_date
FROM dual
CONNECT BY LEVEL <= (TO_DATE('2023-05-12','YYYY-MM-DD') - TO_DATE('2023-05-02','YYYY-MM-DD') + 1);

In Oracle:

  • LEVEL is a pseudo-column used in hierarchical queries (CONNECT BY). It starts at 1 and increments by 1.
  • CONNECT BY LEVEL <= (...) determines how many rows to generate.
  • The difference between the two dates plus one gives 11, so the query
1
0 219
Question Anna Golitsyna · Jun 6, 2025

Let's suppose two different routines use one and the same chunk of code. From the object-oriented POV, a good decision is to have this chunk of code in a separate class and have both routines call it. However, whenever you call code outside of the routine as opposed to calling code in the same routine, some execution speed is lost. For reports churning through millions of transactions this lost speed might be noticeable. Any advice how to optimize specifically speed?
P.S.Whenever someone is talking about the best choice for whatever, I am always tempted to ask: "What are we optimizing?".

14
0 216
Question Andrew McCrevan · Jun 5, 2025

How would you go about creating an SQL Stored Procedure that would result in the same output as "IN LIKE"?
For example...
CustomersTable

RecordId CustomerName
123 Mark Stevens
456 Betty Johnson
789 John Stevens
321 Brian Smith
654 John Markson
987 Tom Obrian
select *
from CustomersTable
where inLike('%Mark%', '%John%')

Would return:

123 Mark Stevens
456 Betty Johnson
789 John Stevens
654 John Markson
5
0 120
Announcement Laurel James (GJS) · Jun 5, 2025

George James Software is excited to share a new release of Deltanji source control, version 8.1. This new release introduces a Git Location Driver along with several other functionality and usability improvements. 

Highlights of this release include: 

  • Git Location Driver, which enables Deltanji to integrate directly with Git repositories.
  • Additional signing methods for Task Server II.
  • DATA Component Driver proxy classes.
  • Add or remove from Work Lists incrementally. 
  • %ALL system definitions.
  • New Installation defaults. 
  • Improved file type classification for better granularity and
0
1 128
Question Satya Prasad Kalam · May 30, 2025

We're planning to use Production Validator for validating our system upgrade (2016.2.3 to 2024.2) , and we are trying to understand what kind of benchmarking or performance metrics others have observed during similar efforts.

Specifically, we are looking for a case study or real-world example that includes details like:

  • How many messages were validated?
  • How long did it take to create the temporary database from the source system?
  • How long did it take to run the comparison on the destination system?

If anyone has done this recently and can share some stats or lessons learned, that would be

2
0 127
Question Kim Jiyong · May 15, 2025

Hello. Currently, we are developing using Cache 2018 version.
Our team is working on improving an existing legacy program so that it can also be used on the web.

Before asking my question, here is the development environment.

  • IDE: IntelliJ
  • Framework: Spring Boot, MyBatis
  • DB Connection: JDBC (using the library provided by InterSystems)

Currently, we are successfully mapping global data through the %PERSISTENT class and able to query it with SQL.However, the problem is that the retrieved "Korean" data is all broken.

8
0 283
Question Anil Mathew · May 18, 2025

I have a rest API Class used for getting data from Cache 2018 version.
I have single route '/callfuntions'
I send the following parameters to the API :-  className, methodName, params
I use $CLASSMETHODto execute and send the result back to the client.

If I make more that 10 to 12 requests in quick succession, then it stops sending data.

if I wait for over 10 seconds it allows me to send more requests to the API.  How do I resolve this?

3
0 131
Article Tani Frankel · Feb 25, 2016 2m read

Question:

How can I create, change etc. Security entities (like Users and Roles) programmatically?

Answer:

You can use the Security package classes in the %SYS namespace. For example Security.Roles or Security.Users.

Of course in order to perform these actions the user will require the needed authorization.

Here's a small example using Security.Roles:

// Create a Role
%SYS>Set status = ##class(Security.Roles).Create("testRole","a test Role","%Development:U,%DB_USER:R")
 

// Creation was successful
%SYS>Write status
1

// Now lets examine the Role created
%SYS>Set status =
1
0 832
Discussion Aleksandar Kovacevic · Apr 26, 2020

So far, I found there are some interesting ways to search in global structure:

  • through Query %Library.Global.Find
  • through Query %Library.Global.Get

%Library.Global.Find

ObjectScript

setstatement=##class(%SQL.Statement).%New()
  setstatus=statement.%PrepareClassQuery("%Library.Global","Find")
  setresultset=statement.%Execute("USER","^Persons","Email") // <Namespace>,<Global>,<Keyword>whileresultset.%Next() {
    write !, resultset.%Get("Name"),", "writeresultset.%Get("Value"),", "writeresultset.%Get("Name Format"),", "writeresultset.%Get("Valu
5
1 1304
Question Flávio Lúcio Naves Júnior · Nov 7, 2023

Hello everyone,

I am attempting to implement continuous integration using Docker with Caché 2018.1, and I am in the process of creating an image for our client. I have already installed Caché 2018.1 on the RedHat server, but I am working on a script to create the database and namespace. For the database, I used the following code:

do ##class(SYS.Database).CreateDatabase("/usr/cachepoc/cache2018/mgr/poc/")

However, I have encountered some issues with this code. For instance, I am unable to view this local database in the portal's list:

In the end, I have tried various approaches to create the

4
0 592
Question Tony Alexander · Nov 22, 2021

Hi Community,

I recently needed to interrogate some folders/sub-folders to retrieve filenames using cache object script(COS) and I implemented it in the following way.

ClassMethod ListDir(path = "",wildchar = "*",recursive As %String(VALUELIST=",y,n") = "y",ByRef dirlist){i path'=""{i ##class(%File).DirectoryExists(path){s rs=##class(%ResultSet).%New("%File:FileSet")s sc=rs.Execute(path
9
0 1484
Article Padmaja Konduru · May 6, 2025 3m read

It helps to remove special characters, such as non-utf-8 characters either control characters or unicode characters from text that is not printable or can't be parsed by downstream systems.

There is also $C(32) in this condition; sometimes NBSP appears in the text and it will not be recognized by TIE, but downstream it displays as "?".

In order to avoid the NBSP issue, the if condition is replaced with a space in order to prevent the error.

Unicode characters only Remove:

Class Test.Utility.FunctionSet Extends %RegisteredObject
{ 
ClassMethod ConvertTextToAscii(text As %String) As %String
{
 Set (str

4
1 377
Question MARK PONGONIS · Jul 17, 2018

Would like to know if there is an alternative or better way to paginate through a dataset using dynamic SQL than what I am using below. The problem is that as the potential pool of data gets larger, this code slows down to the point of not being useable. In analyzing each line of code below, it appears the slow down is related to the initial rset.%Next() iteration. Is there anything available which does not require a subquery/%VID such as a simple LIMIT/OFFSET?

My code is similar to :

s sql=##class(%SQL.Statement).%New()

s query="SELECT *,%VID FROM (SELECT prop FROM table WHERE prop=x) WHERE

31
3 3730
Question Paul Coviello · Nov 6, 2023

We have a machine that serves 4 instances of Cache on VMS systems, one of them is password protected and works fine as they all do. we decided we wanted something beefier and copied it to a server, well all but the one you have to login to works so 3 of the 4 do.  and the odd part is I can no longer get to the management page from anywhere on any machine, http://localhost/csp/bin/Systems/Module.cxw  I get a 404.8 error, I have tried adjusting security and same thing. and a server availability error.

I think it something on the new machine/server that is missing but why only 1 of the 4.

5
0 390
Question Ganesh Jagtap · May 1, 2025

Hi all,

I'm reviewing an older Cache routine and came across this line of code: from file ^ZDBKCRON

S $ZT="^%ETSDK"

Error trap

/home/oper/script/cache_db_backup -t        # Daily CacheDB Backup

 produced the following output:

 <NOROUTINE> *%ETSDK
<ERRTRAP>

-----------

From what I understand, this is setting up an error trap, but I'm not entirely clear on how it works, especially in modern InterSystems IRIS environments.

Could someone please help explain:

  1. What exactly does this line do?
  2. Is %ETSDK a standard system routine? I can't find it in our environment.
  3. What is the best practice for error
2
0 142