#Caché

30 Followers · 4.6K Posts

  

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

Documentation.

Article Mike Kadow · Oct 24, 2016 3m read

NewBie's Corner Session 21 Parameters  Part II

Welcome to NewBie's Corner, a weekly or biweekly post covering basic Caché Material.

Parameters

In the previous session we saw how to call RtnB from RtnA with Parameters.

We also defined Parameters as another name for Variables when used in passing data from one Routine to another, or, from one Label to another.

Calling a routine from a Label, or to a Label, from within a routine is very similar to calling a routine itself.

0
0 310
Announcement Stefan Wittmann · Oct 21, 2016

I am happy to share the news that Zen Mojo 1.1.2 has been released. This release includes a critical fix for Firefox that we had to get out as fast as possible. No other changes are included to allow easy upgrades. We recommend upgrading to this release if you are running on Zen Mojo 1.1.1.

All upcoming Caché and Ensemble releases will ship with Zen Mojo 1.1.2.

You can download Zen Mojo kits from the WRC distribution page: https://wrc.intersystems.com/wrc/Distribution.csp

Any fix or enhancement that was previously planned for Zen Mojo 1.1.2 will be included in the next upcoming release 1.1.3.

0
0 402
Question Jiri Svoboda · Oct 21, 2016

Hello,

does anybody know how to differentiate ZSOAP failures when using %SOAP.WebClient? I would need to know what error condition occurred, e.g. authorization failed, endpoint timeout etc.

All I get on failure is an ZSOAP exception which does not seem to explain anything specific.

Thanks

Jiri

2
0 458
Question Scott Beeson · Oct 18, 2016

This tells me that there is no timezone offset on this table/field:

Select TOP 1 GETDATE() as Now, TimeCreated FROM ens.messageheader ORDER BY TimeCreated DESC;
Now                 TimeCreated         
------------------- ------------------- 
2016-10-18 16:16:49 2016-10-18 16:16:31 

So why is TimeCreated in this resultset 4 hours less than OneMinuteAgo when I'm clearly requesting only records with a TimeCreated greater than OneMinuteAgo?

Select TOP 1 DATEADD(mi, -1, GETDATE()) as OneMinuteAgo, TimeCreated FROM ens.messageheader WHERE TimeCreated > DATEADD(mi, -1, GETDATE()) ORDER BY TimeCreated ASC;
13
0 934
Question Tirthankar Bachhar · Oct 20, 2016

Hi,

When we write unit test cases for cache object script code using %UnitTest.TestCase, what  is the best way to write code to identify code coverage?

So, let say my unit test case hit all 10 lines of code of a method for a given class. So, unit test coverage should be 100% for that. But, using line-by-line coverage [(%Monitor.System.LineByLine] getting wrong percentage, because it also includes code comment/documentation as part of code. So, practically we can not ever achieve 100% of code coverage by using this API.

I'm not sure, if am able to describe the problem properly here.

2
0 960
Question Paul Riker · Oct 17, 2016

I have a persistent class where I am logging each CCDA I receive. I want to store all of the providers associated to that CCDA (many to one). In a relational database, I would have a child table with a foreign key to the primary table. I'm guessing the equivalent to Cache would be 

1. Create a custom class (ProviderList) with the properties I want to store.

2. Add the class as a property of my CCDA persistent class.

Property Providers as Array of ProviderList (SQLProjection = "table/column";

Am I on the right track?

4
0 628
Question Laura Cavanaugh · Oct 17, 2016

Hello community; this may seem odd, but I need to know if there's any way we could be using callin functions from a C application without knowing?  e.g. if other developers created some C programs that call in to Caché that we don't realize are running.  Is that possible?  If so, where would I look to see these programs?  Perhaps the server's task manager? 

Thanks --Laura

2
0 435
Article Jose Ruperez · Oct 13, 2016 1m read

Here you have an easy way to write and execute COS code from your unix scripts. This way one does not need to write routines or even open Studio or Atelier. It can be an option for simple and small actions for instance things like installation tasks or compiling.

See sample bash script (compile.sh) to compile classes:

#!/bin/bash
#####################################################################
# Script to compile classes
# $1 = NAMESPACE
# $2 = ClassName
#
# For example:
# ./compile.sh "SAMPLES" "Sample.Person" 
#####################################################################
echo -n "username:"
read username
echo -n "password:"
read pwd

csession HSINSTANCE -U "$1" <<EOFF
$username
$pwd
set status = \$SYSTEM.OBJ.Compile("$2")
h
EOFF
2
0 1021
Article Jose Ruperez · Oct 12, 2016 1m read

With a routine like this one, you can quickly calculate how many lines of code you are working with. And it is not only for routines, it works for classes because remember that classes generate routines !

Here you have the routine source code:

LinesOfCode ;
    new SQLCODE,tRoutine
    set tTotalLOC = 0
    &sql(DECLARE ROUTINES CURSOR FOR
     SELECT NAME 
FROM %Library.RoutineIndex 
WHERE TYPE = 'MAC'
ORDER BY NAME)
    &sql(OPEN ROUTINES)
    &sql(FETCH ROUTINES INTO :tRoutine)
    while (SQLCODE=0)
    {
        write !,$j($i(tCount),5),": ",tRoutine
        set tLOC = $get(^rMAC(tRoutine,0,0))
        write "("_tLOC_")"
        set tTotalLOC = tTotalLOC + tLOC
        &sql(FETCH ROUTINES INTO :tRoutine)
    }
    &sql(CLOSE ROUTINES)
    write !!,"Total lines of code = "_tTotalLOC
4
0 937
InterSystems Official Steve Brunner · Oct 13, 2016

InterSystems is pleased to announce that Caché and Ensemble 2015.2.5 are now available as maintenance releases.

 

For a complete list of the corrections in 2015.2.5, please review the release notes .

 

Caché and Ensemble are available for the same platforms as 2015.2.4.  The complete set of supported platforms, including specific point releases and patches, is detailed in the Supported Platforms document .

 

The HealthShare team will announce availability of its products separately.

 

The build corresponding to this release is 2015.2.5.953.0

0
0 494
Article Elizabeth Harding · Oct 10, 2016 3m read

At Global Summit back in April, in his keynote speech, John Paladino mentioned that improvements to our documentation search were being made.  You might have wondered, since things seemed to go quiet, whether anything was really happening.  Well, we had an internal demo of some of the upcoming features recently, and the new capabilities look really cool – searching documentation has been frustrating for InterSystems staff too!  So, I thought it might be good to pass on a few details to give a taste of what is coming.

4
0 590
Article Alexander Koblov · Oct 12, 2016 1m read

Interesting anecdote I want to share. Not 100% Caché related, but I hope it would be useful.

When CSP Gateway is configured on IIS, opening CSP Gateway Configuration page is prohibited by default -- as IIS blocks URLs with '/bin' in it.

In our documentation we advise to add <remove segment="bin" /> to applicationHost.config file. That is correct.

Recently I had problem when manual editing file Windows\System32\inetsrv\config\applicationHost.config has absolutely no effect on IIS.

Turned out (http://serverfault.com/a/599865) IIS was 64-bit and notepad++ that I used for editing was 32-bit.

0
0 1099
Question Lisa Stieg · Oct 11, 2016

Very new to this side of cache.... 
So, currently in the habit of keeping all users forever, up to over 5000... ? is what if we decided to start deleting old users who have been gone from the company, how would it affect any account level information? notes, payments etc....  Is there any documentation anywhere that would answer this or describe this process or maybe best practices??
Sorry if this seems stupid but i am working on a proof theory for work.

7
0 500
Article Alexey Maslov · Oct 12, 2016 3m read

The goal of this writing was to illustrate how to restore backup before the patch would be applied. The alert notes that: 

The risk can be avoided by applying journals from the beginning of the journal file that was switched to at the start of the backup, rather than accepting the default of starting from the journal marker position.

Having non-patched Caché 2015.1.4, I ran sample database backup and restore just to get where I should answer "No".

0
0 442
Article Bill McCormick · Dec 4, 2015 3m read

A few people wrote to me asking about the infrastructure behind the Atelier Server implementation. Its neat and a worthwhile story to share so I am writing it up here as a post on the community. I want to go in to a little detail on why it was needed and then I will outline in detail how we went about implementing this.

So why did we need to give people a “server in the cloud”? Atelier is the new IDE for InterSystems products. It is Eclipse based and implemented in Java so it is cross platform. The communication between the Atelier client and the server is REST based over http.

24
0 1212
Article Marcel den Ouden · Mar 29, 2016 2m read

As some customers recently received new license keys, I received some questions why their new license does not seem to work, other than the expiration date being reached. So far I was able to solve all of them with this short list of things to look at.

1. Is the date on your laptop set properly?

2. For Europe (and possibly other regions): the expiration date in the cache.key file is in US format, MM/DD/YYY, while most people there are used to DD/MM/YYY. This is obvious if you have an expiration date like 11/30/2016, but not with dates like 3/12/2016 (expires in March, not December).

3.

5
0 2048
Article Dmitry Maslennikov · Oct 11, 2016 5m read

This text is a continuation of my article where I explained the structure a Caché database. In this article, I described the types of blocks, connections between them and their relation to globals. The article was purely theoretical. I made a project that helps visualize the block tree - and this article will explain how it works in great detail.

3
1 2319
Question Thomas Chericka · Oct 7, 2016

Hi,

Thanks a million for taking the time to read this.

I'm calling the functions $ZF(-`1, <path to EXE>) and $ZF(-2, <path to EXE>) from Cache code. The exact code I'm using in Cache Studio is given below.

/// Test the functionality of ZF(-1) and $ZF(-2), 
Class %SourceControl.UnitTest Extends %Persistent
{
Parameter PATH As %String = "E:\VCS\CommandExecutor\bin\Debug\WindowsApplication.exe";
ClassMethod Test()
{
Do $ZF(-2, ##Class(%SourceControl.UnitTest).#PATH)
}

Now when I run the command in the Cache Terminal, as given below,

>do $ZF(-2, "E:\VCS\CommandExecutor\bin\Debug\WindowsApplication.

6
0 960
Question Ray Hitchins · Oct 10, 2016

We have a very old green screen application which is currently producing PCL "documents". I want to update this to produce PDFs - are there any shortcuts / tips? I'm aware Zen Reports can allegedly do it, but I want to avoid that route if I can.

1
0 440
Question Sébastien Demoustiez · Oct 10, 2016

Hello,

First sorry for my english :)

I'm looking for a solution to reset the cursor of a query in a csp page.

In my code I do:

<csp:query name="users" classname="UserId" queryname="Find">
 <csp:while condition="users.Next()">
         ...
 </csp:while>

And 100 lines after I have to do exactly the same ...

Is it a way to do the while without do the query again ?

Something like users.Reset() ??

Thanks a lot for your help

Sébastien

2
0 756
Question Scott Beeson · Oct 6, 2016

I experience this constantly with Cache SQL.  Especially when querying the ATNA log.

SELECT TOP 400000 * FROM HS_IHE_ATNA_Repository.Aggregation ORDER BY ID DESC

That took 12 seconds.  I then upped the number to 500,000 and it took 185 seconds.

Shouldn't the execution time scale proportionately?

If I run the 500,00 query again it takes 2.4 seconds.

4
0 530
Article John Hotalen · Oct 4, 2016 1m read

How to parse a URL in Caché:

Let's pretend you are working on a project where you may be retrieving a URL for some purpose and you have the need to be easily able to parse apart that URL to get the various components that make up the URL.

Here's how to do that:

Note:  This example assumes you have a variable named sURL that contains some url (i.e. http://www.intersys.com/main.csp?QUERY=abc#anchor) and you will be creating an array of the URL component pieces, where the array will be named aComponents.

In your class/routine, add the following code:

Do ##class(%Net.URLParser).Parse(sURL,.

8
0 2050