I have a XML enabled persistent class and a XML representation of some object of this class (object ID is available).
How can I use XML Reader (or some other mechanism) to automatically update this object?
Do you think our editor has too many unused features?
I propose removing some, so it would look nice & clean!
Here's some buttons that I think we really can let go.

What do you think?
InterSystems products (IRIS, Caché, Ensemble) already include a built-in Apache web server. But the built-in server is designed for the development and administration tasks and thus has certain limitations. Though you may find some useful workarounds for these limitations, the more common approach is to deploy a full-scale web server for your production environment. This article describes how to set up Apache to work with InterSystems products and how to provide HTTPS access. We will be using Ubuntu, but the configuration process is almost the same for all Linux distributions.
InterSystems IRIS supports publish and subscribe message delivery. Publish and subscribe refers to the technique of routing a message to one or more subscribers based on the fact that those subscribers have previously registered to be notified about messages on a specific topic.
This article demonstrates how several InterSystems IRIS capabilities can work together:
- Publish/Subscribe
- Workflow
- Alerts
- PPG (that's general capability though)
In this article we would send emails about:
- New workflow tasks
- Unassigned workflow tasks
- Uncompleted workflow tasks
- Ensemble alerts
Email recipients would be determined using Publish/Subscribe operation and each user would receive only digest email whenever possible.
Generally speaking, InterSystems products supported dynamic objects and JSON for a long while, but version 2016.2 came with a completely new implementation of these features, and the corresponding code was moved from the ObjectScript level to the kernel/C level, which made for a substantial performance boost in these areas. This article is about innovations in the new version and the migration process (including the ways of preserving backward compatibility).
I have a list
set list=$lb(1,$c(0),2)
How do I replace $c(0) with an empty element?
My list should look like this:
set list=$lb(1,,2)
I tried using $list but it either replaces the element with an empty string:
set $list(list,2)="" zw list
Resulting in:
list=$lb(1,"",2)
Or removes the element altogether:
set $list(list,2,2)="" zw list
Resulting in:
list=$lb(1,2)
Let's say I have a list structure:
set list = $lb("stri,ng", $c(0), 2)I want to replace all $c(0) elements with empty elements, so my list would look like:
set list = $lb("stri,ng", , 2)What's the fastest way to do that?
I want to call java method and return $lb structure from it.
JDBC jar seems to contain relevant class - com.intersys.jdbc.CacheListBuilder, but so far I only managed to return a string that looks like a list.
Here's my java code:
package isc.poi;
import com.intersys.jdbc.CacheListBuilder;
import java.sql.SQLException;
public class Test {
public static String Test() throws SQLException
{
CacheListBuilder list = new CacheListBuilder("UTF8");
list.set(123);
list.set(456);
list.set("\"abc\"");
return list.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:
- Git 101
- Git flow (development process)
- GitLab installation
- GitLab Workflow
- Continuous Delivery
- GitLab installation and configuration
- GitLab CI/CD
- Why containers?
- Containers infrastructure
- CD using containers
- CD using ICM
- Container architecture
In this article, we would talk about building your own container and deploying it.
I have a class (to be deployed) and I want to forbid anyone from extending it.
Is there any way to do that?
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:
- Git 101
- Git flow (development process)
- GitLab installation
- GitLab Workflow
- Continuous Delivery
- GitLab installation and configuration
- GitLab CI/CD
- Why containers?
- Containers infrastructure
- CD using containers
- CD using ICM
In this article, we'll build Continuous Delivery with InterSystems Cloud Manager. ICM is a cloud provisioning and deployment solution for applications based on InterSystems IRIS. It allows you to define the desired deployment configuration and ICM would provision it automatically. For more information take a look at First Look: ICM.
Let's say I have this simple script file try.script
write 1 write 0
I can execute it in a terminal (csession) by calling:
csession cache < try.script
And I get the following output:
%SYS> 1 %SYS> 0
However I want to use a try catch block in my script:
try {
write 1/0
catch {}
haltBut as script is executed line by line, it's interpreted like this:
%SYS>
TRY {
^
<SYNTAX>
%SYS>
WRITE 1/0
^
<DIVIDE>
%SYS>
CATCH {}
^
<SYNTAX>
%SYS>I know that I can write it all in 1 line, but I'd rather not do that. Is there a way to feed multiline statement into Cache?
How do I get non latin text in PDF mode for ZEN reports?
Currently cyrillic test is rendered as ####:
Class Test.Zen Extends %ZEN.Report.reportPage
{
Parameter DEFAULTMODE = "pdf";
/// ReportDefinition is a placeholder.
XData ReportDefinition [ XMLNamespace = "http://www.intersystems.com/zen/report/definition" ]
{
<report xmlns="http://www.intersystems.com/zen/report/definition"
name="MyReport" runonce="true">
</report>
}
XData ReportDisplay [ XMLNamespace = "http://www.intersystems.com/zen/report/display" ]
{
<report xmlns="http://www.intersystems.I have this local, containing a list of books of arbitrary length:
set books=2 set books(1, "author") = "Alice" set books(1, "title") = "Hello" set books(1, "pages") = "123" set books(2, "author") = "Bob" set books(2, "title") = "World" set books(2, "pages") = "456"
And I want to generate this PDF (there could be more than two tables), each book is a separate table:

The header is always the same (Author, Title, Page) but the number of tables would be different.
ZEN reports sounds relevant, but I'm not sure how to pass data from local there and how to draw a separate table for each result.
I have iKnow domain with 1 source, 1 data and 1 metadata fields. Source is a table.
Let's say individual rows are immutable, but new rows are added after the domain is built.
How do I add them to domain?
In %SYSTEM.iKnow class IndexTable method is available:
classmethod IndexTable(pDomainName As %String, pTableName As %String, pIdField As %String, pGroupField As %String, pDataField As %String, pMetaFields As %List = "", pWhereClause As %String = "", pConfig As %String = "") as %Status
Assuming I have a table App.
Has anyone built tag cloud from iKnow domain?
If so, any advice on how to do that?

I have iKnow domain of forum posts, their full text is an iKnow data, and each post also has a number of views as a metadata field.
I want to get a sum of views by concept. Let's say I have a concept called "TESTEST" and there are 10 sources that have this concept. Each source has some views. I want to get views total - impact of this concept so to say.
What's the best iKnow architecture for this use case?
So far I got this:
ClassMethod Views(id As %Integer) As %Integer
{
#dim domainid As %Integer = .#DomainId
#dim sourceid As %String = ##class(%iKnow.Queries.Let's say I have a user-generated document template with placeholders and I want to replace them with actual values.
Values could be:
- scalars
- tables
- ...?
So far I wrote a simple find/replace tool that works with RTF format (because it's not a binary format), here's how it works:
set template = "D:\Cache\RTF\template.rtf"
set var("%title") = "Hello"
set var("%table") = $lb("Utils.RTF", "TestFunc")
set result = "D:\Cache\RTF\out.rtf"
set sc = ##class(Utils.RTF).I have an iKnow domain and a blacklist called Ads.
I want to get all sources that do not contain entities from Ads list.
Currently I'm doing it like this:
ClassMethod NoAds()
{
#dim domainid As %Integer = 1
set filterNot = ##class(%iKnow.Filters.GroupFilter).%New(domainid,, $$$YES)
#dim blackListId As %Integer = ##class(%iKnow.Utils.MaintenanceAPI).GetBlackListId(domainid, "Ads")
set sc = ##class(%iKnow.Utils.MaintenanceAPI).GetBlackListElements(.blackList,.#DomainId, blackListId)
set filterAds = ##class(%iKnow.Filters.ContainsEntityFilter).Note: with support for Overlay storage driver for InterSystems IRIS containers this article is no longer relevant. The article is left here for archive purposes.
Application licensing enables InterSystems application partners to take advantage of Caché’s licensing capabilities for their own licensing purposes.
Caché manages customer application licenses just as it does Caché/Ensemble and InterSystems application licenses, maintaining usage counts and acquiring and returning user licenses as needed.
Application licenses consumed by a process or a CSP session are automatically released along with the Caché license consumed by the process or session when a process exits, halts or is deleted from the process table, or when a CSP session times out or is deleted.
More in docs.
Do you use this feature? If so, how?
I'm especially interested in license validation and general workflows?
I have a server with rusw locale but in my cube the time dimension shows dates such as "JAN-2018". Is there a way to either localize that (preferably) or just output numbers like "01-2018"?
Architect:

Analyzer:

Also in architect, in level settings there is a "Time Format" property, what's that? Tried setting it to 3 but it didn't help.
User calls my REST service. I need:
- Redirect him to a POST url
- Provide request body
Is it possible? How?
The code I'm researching loosely follows this flow:
- My first callback
- Black box
- My second callback
I can modify 1 and 3 no problem but modifying 2 is difficult.
However I think that step 2 has some optimization problems, namely:
- instantiates lots of objects
- throws/catches lots of exceptions (not logged)
Is there a way to count these two metrics?
Managed File Transfer (MFT) feature of InterSystems IRIS enables easy inclusion of a third-party file transfer service directly into an InterSystems IRIS production. Currently, DropBox, Box, and Kiteworks cloud disks are available.
In this article, I'd like to describe how to add more cloud storage platforms.
Here's what we're going to talk about:
- What is MFT
- Reference: Dropbox
- Connection
- Interoperability
- Direct access
- Interfaces you need to implement
- Connection
- Logic
- Installation
In this series of articles, I'd like to present and discuss several possible approaches toward software development with InterSystems technologies and GitLab.
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:
- Git 101
- Git flow (development process)
- GitLab installation
- GitLab Workflow
- Continuous Delivery
- GitLab installation and configuration
- GitLab CI/CD
- Why containers?
- Containers infrastructure
- CD using containers
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.
In the second article, we covered GitLab Workflow - a complete software life cycle process and Continuous Delivery.
In the third article, we covered GitLab installation and configuration and connecting your environments to GitLab
In the fourth article, we wrote a CD configuration.
In the fifth article, we talked about containers and how (and why) they can be used.
In the sixth article let's discuss main components you'll need to run a continuous delivery pipeline with containers and how they all work together.
In this article, we'll build Continuous Delivery configuration discussed in the previous articles.
I need to redirect user to a url, which is 5000+ characters long.
To do that I set:
set %response.Redirect = url
However, in the browser I receive this header:
LOCATION: <First 3972 characters of the 'url' variable>
In WriteHTTPHeader method of %CSP.Response, where the LOCATION header is
written:
Write "Location: ", <Redirect>,!
After I added a buffer flush, after the above-mentioned line:
Write *-3
Then in browser I received full, correct value of a LOCATION header.
Is there a better solution?
It's a rest API, so maybe there's some callback method I can override to flush the output buffer?
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:
- Git 101
- Git flow (development process)
- GitLab installation
- GitLab Workflow
- Continuous Delivery
- GitLab installation and configuration
- GitLab CI/CD
- Why containers?
- Containers infrastructure
- GitLab CI/CD using containers
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.
In the second article, we covered GitLab Workflow - a complete software life cycle process and Continuous Delivery.
In the third article, we covered GitLab installation and configuration and connecting your environments to GitLab
In the fourth article, we wrote a CD configuration.
In the fifth article, we talked about containers and how (and why) they can be used.
In this article let's discuss main components you'll need to run a continuous delivery pipeline with containers and how they all work together.
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) #################### ## ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## ## ####################