7 Followers · 249 Posts

Zen is a school of Mahayana Buddhism that originated in China during the Tang dynasty as Zen Buddhism. Zen school was strongly influenced by Taoism and developed as a distinct school of Chinese Buddhism.

In InterSystems Data Platform Zen is a name for MVC web application framework for rapid software development.

Documentation.

Article David Hockenbroch · Jul 10, 2025 16m read

Dear community, I have a confession to make. I have not gotten over Zen yet. Alas, all good things must come to an EOF, so I am currently learning about Angular. I am working on proving to myself that with the right back end and Angular components, I can deliver to myself and my team a very Zen-like experience in this environment. Since this is my first attempt, here is a fair warning: I will be providing some rather large code samples before discussing them. Please warm up your mouse and hand for extensive upcoming scrolling!

7
1 270
Article Evgeniy Potapov · Oct 18, 2023 7m read

Creating information dashboards, pivot tables, and widgets is an important step in analysis that provides valuable sources of information for informed decision-making. The IRIS BI platform offers many opportunities to create and customize these elements. In this article, we will take a closer look at the basic techniques for developing them and the importance of using them.

1. Dashboards:

Dashboards are visual tools that combine different data in one interface for more effective monitoring and analysis.

1
0 606
Article Fabio Goncalves · Dec 12, 2016 3m read

Suppose you have developed your own web app with InterSystems technologies stack and now want to perform a captcha validation on the client side in order to determine whether or not the user is human and make it safer. There are some modern frameworks to address the captcha issue, however most part of them needs internet access to generate codes and sometimes are complex to implement. Take this as basic example considering that image recognition has gotten too good. That's why you nowadays you tend to see more pattern recognition captchas than mere reading ones. (I.e.

9
1 1684
Article Alex Kogan · Jan 22, 2021 2m read

This concept may be known to some, but I just found it very useful and I would like to share as it may help someone else.

If you are working with CSP or Zen you sometimes come across the need to use embedded JavaScript. Suppose you are working with some loops, which use < or > as shown in example below:

&js< 

               var test = document.getElementById('seTest');

               for (var i = 0; i < test.options.length; i++) {

                              // Do Something here with my test.options[i].

2
5 589
Article Peter Cooper · May 11, 2018 3m read

Index to Articles

Hi All

It's been 6 weeks since my original article sad
- - - - -but I have been busy on this project smiley

I have been looking at/thinking about a replacement for ZEN for around 12 months but only really started in depth 4 months ago.
Also been in IT for long enough that I can "get a feel" for a product/technology and make decisions accordingly without going into great detail. 
Any new technology has a learning curve and I don't want to waste time and effort on something that won't fly. 
And, as always, I am looking to minimise the learning curve as I want to concentrate on delivering business benefit. 

3
1 1053
Article Peter Cooper · Mar 18, 2018 1m read

Hi All
This is the index to a series of articles I hope to create over the coming months.

ZEN and ZEN Mojo are no longer being actively developed by Intesystems - this is a great shame as it is a fine product that works so well for business applications.
However ZEN is a 15 year old product and I need a path forward to replace the ZEN UI with a supported development framework.

This article is an index of the other articles I have, or plan to write. - the articles will be subject to change as I develop my thoughts and climb the learning curve.

5
1 1354
Article Peter Steiwer · Dec 12, 2019 2m read

What is a portlet?

The simple answer is: a custom widget. A portlet can exist by itself on a DeepSee dashboard, it can be used along side standard DeepSee widgets, or along side other portlets. The rendering of the custom widget is completely user defined. This means you can embed a web page, create a form to perform any sort of action needed based on the data on your dashboard, use third party charting libraries, or simply display data from outside of a DeepSee cube.

How to get started

1
0 597
Article Peter Cooper · Mar 13, 2018 3m read

Index to Articles

Hi All

I am an avid user of ZEN for over 10 years now and it works for me.
But it seems that Intersystems are no longer actively developing it (or ZEN Mojo), the only published reference to this  is here

As an aside, Intersystems makes fine products (I have been using the technology for 35 years) and has great support BUT they are not good at being open with their product road map/retirement plans.  This is very embarrassing  to me when talking with my end user clients.

10
1 2083
Article Jean Millette · Nov 2, 2019 15m read

The Issue

I help support a legacy ZEN application that makes extensive use of the “dataGrid” component. The application reuses a ZEN page with a“dataGrid” for different views of similar data; depending on the view, the application hides or displays some of the columns of the “dataGrid”. The application does this client-side, setting the “hidden” property of the “columnDescriptor” true or false as needed.

Users have reported the following bug in the app: On views which hide a column, data in the other columns are shifted so as to appear under the wrong headers.

0
0 472
Article John Murray · Oct 25, 2019 1m read

When dealing with a support issue of one of our Deltanji source control sites this week I learned that if you're using InterSystems versions earlier than 2018.1 on Unix-type platforms it's possible that a class you export in UDL format will subsequently fail to import. So I'm posting this information here in case it helps other folk.

If you're doing Zen development your classes are likely to contain ClientMethod definitions scripted in Javascript. Prior to 2018.1 the UDL import processor used by methods of %Compiler.UDL.

0
0 319
Article Peter Cooper · May 10, 2018 3m read

Index to Articles

Published 2018-05-11 Last edit -

Hi All

I this article I detail some strategic issues that a new development UI will need to address - these are the ones that I can think of now - others may come to light during this journey.

See the webinar by Eduard Lebedyuk here from the last Global Summit describing  modern web development and Caché

And, as always, if I have missed something please comment....

13
2 1642
Article Attila Toth · Feb 8, 2017 2m read

This article is little explanation to a GitGub project.

The HotJVM Render Server is a great way of boosting ZEN Reports performance, when it comes to generating PDF documents. It can spare a second or more even on a single execution of a report, but it becomes unavoidable when you have to generate hundreds or thousands (or maybe hundreds of thousands) of reports.

If you don't want to go through the documentation above: the Render Server comes with InterSystems Caché and Ensemble and makes it possible to use FOP in a multi-threaded and yet a thread-safe way.

7
0 1612
Article Gevorg Arutiunian · Feb 22, 2019 2m read

(Originally posted by @Sascha Kisser on March 11, 2014) The following 2 classes are a component for a webcam, and a ZEN page that incorporates it. The webcam can take a snapshot and save it to Caché:


Class skisser.webcamPage extends %ZEN.Component.page
{
	Parameter APPLICATION;
	 
	Parameter PAGENAME;
	 
	Parameter DOMAIN;
	 
	XData Style
	{
	<style type="text/css">
	</style>
	}
	 
	XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
	{
	<page xmlns="http://www.intersystems.com/zen" title="">
	<button caption="startCam" onclick="zenPage.
0
1 294
Article Gevorg Arutiunian · Nov 29, 2018 3m read

The following class contains 1 class method "test" that creates a Zen Application and Page:


Class objectscript.createZenPage
{
	classmethod test() {
		// create Application.
		set app=##class(%Dictionary.ClassDefinition).%New()
		set app.Super="%ZEN.application"
		set app.Name="ZenTest.MyZenApplication"
		set app.ProcedureBlock=1
		 
		set param=##class(%Dictionary.ParameterDefinition).%New()
		set param.Name="APPLICATIONNAME"
		set param.Default="MyZenApplication"
		set param.parent=app
		do param.%Save()
		 
		set param=##class(%Dictionary.ParameterDefinition).
0
1 408
Article Gevorg Arutiunian · Oct 8, 2018 2m read

This code snippet provides a ZEN page that downloads a stream from its database directly:


/// We assume that you have stored your data within this schema:
/// MyApp.Model.Storage: Filename,FileSize,Content,ContentType
Class zen.downloadStream Extends (%ZEN.Component.page,%CSP.StreamServer)
{
/// Wrapper to get the id of the download, we assume that the id is passed to this zen page
/// as a URI parameter, i.e.: MyApp.Downloads.cls?OID=1234
ClassMethod GetId()
{
    Quit $Get(%request.Data("OID",1))
}
 
/// Set the appropriate header for the file.
ClassMethod OnPreHTTP() As %Boolean
{
    Set tId = ..GetId()
 
    If ##Class(MyApp.Model.Storage).%ExistsId(tId) {
        Set tStream = ##Class(MyApp.Model.Storage).%OpenId(tId)
        // You could "guess" the content type by its file extension
        // or you can store it (before) in the database separately (like in this example).
        // Set Extension = $Piece(tStream.Filename,".",$Length(tStream.Filename,"."))
        // Set ContentType = ..FileClassify(Extension)
 
        Set %response.ContentType = tStream.ContentType
        Do %response.SetHeader("content-disposition","attachment; filename="_tStream.Filename)
        Do %response.SetHeader("Content-Length",tStream.FileSize)
    }
    Else {
        Set %response.Status="404 File Not Found"
        Quit 0
    }
    Quit $$$OK
}
 
ClassMethod OnPage() As %Status
{
    Set Download = ##Class(MyApp.Model.Storage).%OpenId(..GetId())
    Do Download.Content.OutputToDevice()
    Quit $$$OK
}

}

Link to code on GitHub

1
2 674
Article Titto George · Feb 5, 2018 2m read

Zen report can create PDF document (https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GRPT_xslfo_pdf_config ). Store your images in the table. Pass session id to the Zen report. Zen report will select images using SQL. The <img> element will insert images to the report:

<img width="100%" src="!@ImageName" contentHeight="scale-to-fit" contentWidth="#(..ImageWidth)#" style="position:absolute" content-type="image/jpg"/> 

Do the following (See the attachment image_to_pdf_using_zen_reports

0
0 798
Article Lexi Hayden · Jun 8, 2017 3m read

I needed to use the OnGetNodeInfo callback of a Zen <dynaTree>, because this seems to be the only way to control the style separately for different levels of the tree. This post describes two discoveries I made.

How a dynaTree builds a tree via the OnGetNodeInfo callback

When you use a dynaTree with the OnGetNodeInfo callback, the dynaTree creates a series of nodes and displays them top to bottom in the order they were created

The OnGetNodeInfo callback is an iterator.  To create the nodes, the dynaTree calls the OnGetNodeInfo callback, each time passing the variable pHandle to it.

0
0 378
Article John Murray · Feb 14, 2017 1m read

If you are developing applications that use CSP or Zen, or potentially any of the other InterSystems web-related stuff that's built on top of CSP, then it's important to know how to keep one particular secret.

A central part of the CSP security architecture is a server-side session key. "Server-side" because its value should never be revealed to the client that is issuing the web requests. If it is revealed, a malicious client might be able to use it to bypass your security and make your server do things you don't want it to.

Your session key is available as a property named Key of your %CSP.

1
0 740
Article Andrei Luiz Nenevê · Mar 29, 2017 1m read

Hi everyone,

I've created an Identicon Generator inspired on Fabio Gonçalves Captcha Validator.

This sample can be used to create Identicons for users of app for example, it can be useful to use in Zen Mojo applications, generating an identifier image based on name of the user by example, but it can be used in others kind of applications too(Zen, CSP etc)

 

Examples:

First one:

Will generate this:

 

And this:

Will generate this:

 

 

See my Github project: https://github.com/AndreiLN/Ikon

Best regards,

Andrei L. Nenevê

0
0 610
Article Pravin Barton · Jan 13, 2017 2m read

I thought I'd share some issues I had today with Zen development in a custom component. Say we have created a Zen composite component with a few javascript methods that modify its child components. In order to modify these components, we can use something like the following method:

ClientMethod exampleFunction() [ Language = javascript ]
{
    var component this.getChildById('Control1');
    component.setValue('');
}

In JavaScript methods on the client, this refers to the current component or page. The equivalent for expressions that are values of XML attributes is zenThis (see documentation).

0
0 454
Article Tony Beukes · May 6, 2016 2m read

You may experience errors executing Java programs that rely on the JAVA_HOME environment.

For example when Create PDF from this pivot in DeepSee or in this case, outputting a Zen Report as PDF.

You can verify the PDF generation configuration by clicking on the Verify Now button on the Management Portal System > Configuration > Zen Report Settings page:

  

 

Outputting a Zen Report as PDF causes an error, for example ZENApp.MyReport.

0
0 964