#Caché

30 Followers · 4.5K Posts

  

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

Documentation.

Question Roberto Cahanap · Apr 13, 2018

We are going to start using Git within Cache.

One question came up - if the branch that you checked out does not have the class or mac file, what is the correct thing to do?

Should we delete from Cache or should we just keep it?

I'm leaning more towards deleting it because Cache should reflect what is in your work folder in git. But other team members are saying to keep it.

16
0 699
Question Fernando Zañartu · Mar 3, 2021

Where can I download the Cache ODBC drivers?

Where can I download the Cache ODBC drivers for Windows?

I need to connect to a cache database by odbc but the FPTs that I have found do not work, 
could you tell me where to download the ODBC drivers

16
0 10888
Question Marc Alcala · Jan 24, 2017

Hi all!

I'm developing a mini-framework to implement annotations in Cache. I want to support two kind of annotations: metadata and method decorators. I've got stuck trying to implement the second one.

Metadata

With metadata annotations I can add metadata to any kind of target. A target can be a method/classmethod, parameter, property and class.

For example:

Class cache.TestClass Extends lib.Annotations
{

/// @Author(UserName = "me")
ClassMethod Test()
{
Write "Test!",!
}

}

Then, after compiling the class "cache.

16
0 811
Question Nikita Savchenko · Jun 14, 2016

Hello!

In Caché there is a way to print all current variables using write command without arguments:

USER>set Einstein = 1879
USER>set Mozart = 1756
USER>write
Einstein=1879
Mozart=1756

But is there a way to get a list of this variables? I am looking for something that would return value like $LB("Einstein", "Mozart") for this case.

Thanks!

16
0 1796
Question Sébastien Demoustiez · Sep 24, 2019

Hello, everyone,

I'm trying to find solutions to a problem that's becoming quite boring.
On only one namespace, the sudio is very slow.
The studio freezes completely for 5-10 seconds when I save or compile a class. Sometimes it also freezes for no apparent reason at a random time...
It stops when I change namespace...

Do you have any idea what that could be?

Thank you in advance

15
0 615
Article Brendan Bannon · Dec 27, 2016 8m read

Mapping Examples

 

Clearly if you have a fourth article in the trilogy you need to go for the money grab and write the fifth, so here it is!

Note:  Many years ago Dan Shusman told me that mapping globals is an art form.  There is no right or wrong way of doing it.  The way you interpret the data leads you to the type of mapping you do.  As always there is more than one way to get to a final answer.  As you look through my samples you will see there are some examples that map the same type of data in different ways.

15
1 2782
Question Evgeny Shvarov · May 26, 2017

Hi!

I'm saving object instance using RestForms.

RESTFormsUI calls %Save() for me, which is great. But I want to set the property CreationDate with the current date for every new record being inserted.

So  object callback implementation seems as a reasonable option. I did the following:

Method %OnBeforeSave(insert as %Boolean) As %Status [ Private, ServerOnly = 1 ] 
{

 if insert s ..CreationDate=$H

 q $$$OK

}

And it works fine.

But Documentation says I'd better use %OnAddToSaveSet()

What are you using for the callbacks in similar cases?

15
0 1075
Question Anna Golitsyna · Aug 7, 2025

For example, you start debugging the AAA function, which calls the BBB function, then goes to the CCC^ABC function in a different routine and ends up while executing XXX^XYZ. No other routines or functions are visited in this example. What I would like is to get the record of AAA -> BBB -> CCC^ABC -> XXX^XYZ. No marking each function with recording code should be involved: too time consuming, too many functions in real code.

UPD: Iris has built in %SYS.Trace for this purpose but this class is apparently absent in Cache 2017. Did not find any substitutes yet.

15
0 164
Question Pedro Borges · Aug 14, 2017

Hello -- Is there a way to load a JSON from a file.

I have a "JSON" file which has a sting 1035164 long with the following format: 

[
    {
        "id": "12345",
        "title": "John Smith",
        "image_uri": "https://<some URL>",
        "image_timestamp": "1496781334",
        "image_url":"https://<some URL>",
        "is_restricted_under_18_only": false,
        "is_restricted_adult_only": false
    },
.
15
0 2798
Article Paul Gomez · Apr 20, 2016 1m read

We are in the process of putting a new UI on the existing product documentation, including a mobile-optimized view. We also plan on releasing additional "solution based" documentation that is targeted at common usage scenarios or important configuration tasks.

We are interested in your feedback on our current product documentation - what you like and dislike and especially what changes you would expect to see to make it as useful as possible.

15
0 982
Question Eduard Lebedyuk · Apr 5, 2018

Hello, Community!

Here's an interesting task I found on the Internet.

Problem description

Write a method that would draw a box of a specified size.

The goal is to write the shortest method.

Here's a method signature (it can't be modified):

ClassMethod main(s As %Integer = 10)

And call sample:

>do ##class(ITPlanet.Task4).main(5)
#####
## ##
# # #
## ##
#####

>do ##class(ITPlanet.Task4).main(10)
##########
##      ##
# #    # #
#  #  #  #
#   ##   #
#   ##   #
#  #  #  #
# #    # #
##      ##
##########
 
>do ##class(ITPlanet.Task4).main(20)
####################
##                ##
# #              # #
#  #            #  #
#   #          #   #
#    #        #    #
#     #      #     #
#      #    #      #
#       #  #       #
#        ##        #
#        ##        #
#       #  #       #
#      #    #      #
#     #      #     #
#    #        #    #
#   #          #   #
#  #            #  #
# #              # #
##                ##
####################
15
0 724
Article Vachan C Rannore · Sep 15, 2025 2m read

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.


15
2 363
Article Robert Cemper · Aug 26, 2017 3m read

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.

15
2 2223
Question Wesley West · May 20, 2022

I am looking to separate out a variable into 3 other variables

Basically

S REC="CANTON,TX.,75103"

S ZIP= $ZSTRIP(REC,"*","AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz,.")   RETURNS "75103"

S STA=

S CTY=

I am having trouble stripping the other info, any help would be greatly appreciated and I do realize there is a better way to strip the zip, I just haven't found it yet.

 

Thanks in Advance!

15
0 695
Question Maks Atygaev · Sep 13, 2017

(Photo by Jeremy Thomas on Unsplash)


Dear Developer Community!

My name is Maks.

I developed DeclarativeCOS framework for declarative programming on COS.

Today I want to ask you about New Programming Language.

I have an idea to create new programming language which could be translated to COS classes / routines or even to int-files.

So, lets suppose it is happened. What do you want to see in such language?

Please feel free to say your minds. It is open discussion.

15
0 1539
Question Michoel Reach · Mar 31, 2021

We have a background job that keeps an eye on our ongoing CSP sessions, counts licenses used and some other tasks. Question: If I know the session ID (something like "wuuZ2Gwgxw"), how do I (find and) end that particular session programmatically in ObjectScript - i.e., the equivalent of %session.EndSession=1 in the csp page code?

Thanks!

Michael Reach

15
2 1073
Question Matheus Augusto · Jun 13, 2024

Is there any way to include a CSP page within a CLS?
Example: #Include file.csp 

Context: I work with a legacy that most screens are built using only CLS. I'm trying to change this by separating the frontend layers to be built only with CSP and backend layers using CLS. I improvised a method that injects an iframe to render the CSP in CLS through that iframe, but I'm still not happy. I need to know if there is any way to include this CSP using some specific resource for this.

15
0 249
Article Sean Connelly · Mar 28, 2017 2m read

Inspired by the article "Declarative development in Caché" that's still trending  on the dev com. The OP explored a functional style of iterating over a collection. A comment today suggested "Caché would need syntax support for anonymous functions".

With Macros you can kind of get anonymous like syntax using dot notation.

This is not production code, but it does work. First the macros...

#Define foreach(%c,%l) for i=1:1:%c.Size set %l=%c.GetAt(i) do
#Define map(%oc,%nc,%l) set %nc=##class(%ListOfDataTypes).%New() for i=1:1:%oc.Size set %l=%oc.
15
0 814
Discussion Dmitry Maslennikov · Nov 9, 2020

Let's imagine you have to implement a method with a definition

/// Set value to %session.Data
ClassMethod setValue(params...) As %Status
{
}

How it should work

do ..setValue("key1", "val")

is equal to

set %session.Data("key1") = "val"

and 

do ..setValue("key1", "key2", "key3", "key4", "val")

is equal to 

set %session.Data("key1", "key2", "key3", "key4") = "val"

so, quite simple, any amount of arguments, while the latest one is a value, and any previous is an index, should accept at least 2 arguments.

 

How would you implement this method?

15
0 359
Article Rizmaan Marikar · Dec 25, 2021 13m read

There are many ways to generate excel files using Intersystems, some of them are ZEN reports, IRIS reports ( Logi reports or formally known as JReports), or we can use third party Java libraries, the possibilities are almost endless.

But, what if you want to create a simple spreadsheet with only Caché ObjectScript?

15
10 2312
Question Smythe Smythee · Sep 28, 2022

Hi ,

I am Converting HL7 message into SDA3 format by using  Ens.DataTransform Class but transformation is not happening while using this class and throwing the below error

ERROR <Ens>ErrException: <UNDEFINED>zTransform+1^Hosiptal.SDA3.DataTrans.1 *target -- logged as '-' number - @' Set target.Patient.Name=source.GetValueAt("PID:5")'

Let me know if any mistake please refer the below code

Class Hosiptal.SDA3.DataTrans Extends Ens.DataTransform
{

ClassMethod Transform(source As EnsLib.HL7.Message, target As HS.SDA3.Container) As %Status
{
 
   Set target.Patient.Name=source.

15
0 658
Question Pedro Lopes · Aug 9, 2023

Class Contatos.Amiguinho Extends %Persistent
{
Property Moradia As Cidade;

Relationship Trabalho As Contatos.Empresa [ Cardinality = one, Inverse = Nomedaempresa ];
}

------------------------Routine-----------------------------------
Set objcontato=##class(Contatos.Amiguinho).%New()
Set IDm=3,IDt=2
Set objcontato.Moradia=##class(Contatos.Cidade).%OpenId(IDm)    ;<-- it works for "Property Moradia As Cidade"
Set objcontato.Trabalho=##class(Contatos.Empresa).%OpenId(IDt)  ;<-- it doesn't works for "Relationship Trabalho As Contatos.Empresa"
Set ret=objcontato.

15
0 288
Question Aaron Smith · Aug 12, 2020

Is there an InterSystems supported dotnet core library or community contributed repo on the horizon?  At this time we are exploring installing the ODBC driver in our containers but would rather use more robust solution.

15
0 1445
Question Scott Beeson · Feb 4, 2016

I'm working on a proposal for a deployment tool development project and I was wondering if anyone had any experience with such a thing.  

We use Healthshare and implementations for new clients are tedius and lengthy.  Lots of ensemble service, registry value, lookup tables, namespaces and other things have to be created and configured. 

I would like to create a Zen or CSP page based deployment tool that can do all this with a few parameters and some custom code.

Has anyone done this?  What are some pitfalls you ran into?  Any unique ideas you included?  Other general thoughts?

15
0 1044
Question Nikita Savchenko · Jun 1, 2016

Hello!
Are there any short ways of serializing COS entity to the string? I am searching for something like .$toJSON() , but I need Caché 2013.* support.

The one way I supposed to work is to use $listbuild:

 

set str = $LISTTOSTRING($LB(1,2,3,",",5))
set list = $LISTFROMSTRING(str,",")
zw list
list=$lb("1","2","3","","","5")

 

But the problem is that $listbuild does not escape delimiters, and it is not possible to deserialize serialized string. The structure I need to serialize may contain any characters.

Are there any short ways to do this in Caché to avoid writing custom parser?

15
0 3388
Question Asel Asel · Jun 8, 2022

Hello! Need help...
Please tell a newbie how to connect to a remote database.
OS Centos 7, WebServer type Apache, version cache - cache-2014.1.5.851.1-lnxrhx64,
license:
[ConfigFile]
FileType=License 5.1

[License]
LicenseCapacity=Cache 5.0 Entree - Concurrent Users for Intel (Linux):40, Multi-Server
CustomerName=...
OrderNumber=2010...
ExpirationDate=4/26/2036
AuthorizationKey=...
MachineID=

Tried to connect to a remote database through the ECP server. Writes that - The Cache license does not support ECP. I understand that there must be another cache.

15
1 564
Article Tani Frankel · May 6, 2020 2m read

While reviewing our documentation for our ^pButtons (in IRIS renamed as ^SystemPerformance) performance monitoring utility, a customer told me: "I understand all of this, but I wish it could be simpler… easier to define profiles, manage them etc.".

After this session I thought it would be a nice exercise to try and provide some easier human interface for this.

The first step in this was to wrap a class-based API to the existing pButtons routine.

I was also able to add some more "features" like showing what profiles are currently running, their time remaining to run, previously running processes and more.

The next step was to add on top of this API, a REST API class.

With this artifact (a pButtons REST API) in hand, one can go ahead and build a modern UI on top of that.

For example -

15
4 1362