I am planning to build a WebApp that will have tons of data to display in tables, ability to add comments on that table rows and may be some few more small features as we move on.

1. It has to be Secure

2. It has to be fast

3. It has to be Non CSP / Non Zen

4. Will have Cache DB to pull records from but should be flexible to do that from any odbc resource

5. Version 2018 Ensemble

My first step would have been to investigate different options for technologies that would make it work and best suited with Ensemble 2018

0 18
1 424
· Dec 12, 2019
Bootstrap Tables & CSP

Hello All,

We need to develop a small csp application which shows data in simple paginated / searchable table for business users.

It is to be built on an old version of Cache and is not a big full fledged application but something temporary. We can't use Zen and using a combination of csp & Bootstrap as bootstrap makes the pages look beautiful with little effort.

I have built the table in boostrap and it works fine with pagination and search working perfectly

0 6
0 592
· Dec 12, 2019 2m read
Creating Portlets in DeepSee

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

6 1
0 427

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 13
2 1.4K
· Sep 18, 2019
Export Report to Excel

Hello, I created a Zen Report and I want to export to Excel. I read I can use $MODE=xlsx but my output in Excel is not correct. All 3 elements are condensed into one cell. Class AETMON.Report Extends %ZEN.Report.reportPage { /// Class name of application this report belongs to. Parameter APPLICATION; /// Specifies the default display mode used for this report if /// the URL parameter, $MODE, is not present.

0 1
0 347

In my production I receive an XLFO stream and I would like to pass that to the FOP pdf rendering engine to produce pdf files .So far in my research that can be achieved through ZEN .I would like to create an operation that will take advantage of that and be able to pass my XLFO stream to the operation and create pdf files I found something similar here but for some reasons I get errors like below if any one understands what they mean please advice or someone who had to do something sim

0 2
0 548

In our table, we have a column cities, which has a filter which displays the cities of a state depending on the state

For simplicity let's assume we have a page

Property State As %String = "CA"

Our filter should run this query to show all cities of state ca

0 9
0 424


Need some technique to solve an issue about zen page table.

- "xyz" table exists in all my namespaces.

I have a simple Zen page in "USER 1" namespace. It has a tablepane which pulls data from "xyz" table.

OnLoad of the page i want the zenpage to pull the data from "USER 2" namespace with same "xyz" table name.

Zenpage has to be in "USER 1" namespace

1 10
2 298


I'm using ZEN report to generate a PDF file out a table.

Although, I need to display data from two tables splitted into two different namespaces.

So, I created a process that fetches all the data I need and then calls the PDF class and generates the stream out of it.

My question is, once I've got my list of objects. How can I transform it into a ResultSet, in order to display in the report ?

Thanks for your answer.

0 6
0 325

Hello ,

I want the datagrid to reflect values based on the value i select in the Combobox. How to pass value from the combobox to the

altJSONSQLProvider parameter and reload the datagrid ?

My combobox defines below method on change.


<altJSONSQLProvider id="PatchClassJsonId" OnGetSQL="GetSQL" >
<parameter paramName="1" value="C"/>




0 1
0 193
· Oct 20, 2018
Looking for work

Hi every body

I hope it's the right place & I'm not offending any body.

I'm a veteran Mumps/Cache/Ensemble programmer . I think my only draw back is my age, although my brain is still young & bubbly.

I'm looking a long time for work without success.

I gathered a lot of knowledge & experience during those long years , developed many projects & i'm ready to do any work only to feel useful.

I'll add my resume, I hope & wish that this post will bring some change as I'm desperate to get some work.

1 0
0 378

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

2 1
2 546


We maintain a few Zen reports that output in Excel format.

Recently we started to observe that some reports fail and return the following error.

CSP error occurred
Error: Error rendering: OS code =1Use $log=1 to check
ErrorNo: 5001

I have extracted the exception details from the log file

0 1
0 402

Hi everyone

I have a datacombo that displayes value from a db table.

I would like to set one of this value as default value. How can I do that? Is there a way to say selected value given the text or the Id from the DB table?

Thanks a lot and kind regards


0 1
0 229


we are moving an existing ZEN-Application to a new version of Caché (2017.2.2). It is a rather old application and we need to do some modifications due to the thightend security of ZEN in this and prior release (we came from 2013.1). One of the changes required is to alter a table Name of a ZEN-Table on the server-side. Anyway this gives us a problem, since we receive an error

ERROR #5001: Client modification of protected property ( tableName) disallowed for security reasons.
SOURCELEMENT: %ZEN.Component.tablePane (tpSimilarity)

0 2
0 400
· Jul 31, 2018
Use Fallback CSS mode

Hi everybody,

we have some legacy ZEN applications build upon CSS2 style definitions. We moved the application due to an upgrade to a newer version of cache (2017.2.1). Anyway I have in mind that in one of the prior relases css3 style interpretation was enforced by ZEN and you could explecitly tell the framework to use CSS2 by setting a global. Anyway I can´t found any hints in the docs on that. Does anyone of the %ZEN gurus have this in mind?

best regards,


0 1
0 190