Recently, a partner company started to develop an Angular client for their Cache application. Together, we decided to leverage the power of Caché dynamic objects to exchange JSON encoded data between client and server parts. However, we realized that currently there is a gap in Cache JSON implementation that prevents simple use of traditional registered and persistent classes to exposed their data with the same ease as with XML. I wrote a small JSON adapter, that does the job and bridgers the gap. It's purpose is simple expose data described by a regular Cache class in a one-to-one fashion to a %DynamicObject. On the other hand, when a serialized JSON data comes in, it can be easily deserialized into dynamic object and subsequently bound to regular class by the newly created adapter.
So, one day you're working away at WidgetsDirect, the leading supplier of widget and widget accessories, when your boss asks you to develop the new customer facing portal to allow the client base to access the next generation of Widgets..... and he wants you to use Angular 1.x to read into the department's Caché server.
There's only one problem: You've never used Angular, and don't know how to make it talk to Caché.
This guide is going to walk through the process of setting up a full Angular stack which communicates with a Caché backend using JSON over
Hi Community,
This post is to introduce one of my first project in COS, I created when started to learn the language and until today I'm keeping improve it.
The CosFaker(here on Github) is a pure COS library for generating fake data.
cosFaker vs Populate Utils
So why use cosFaker if caché has the populate data utility?
Ok the populate utility has great things, like the SSN Generator for example, but what to do when you have a field with a long description of a product? How to check if that table will list the emails or if that calculated property will count the days of the last user interaction.
Cogs Library
Over the next few months I will be releasing a number of open source libraries and tools to the Caché community.
Most of the code has evolved from previous production grade solutions over the years and I am collating it together under a single overarching library package that I am calling Cogs.
In the first article I discussed testing and debugging Caché web applications with external tools. Second part would cover Caché tools.
They are:
- CSP Gateway and Webapp configuration
- CSP Gateway logging
- CSP Gateway tracing
- ISCLOG
- Custom logging
- Session events
- Output to device
System Monitor is a flexible and highly configurable tool supplied with Caché (Ensemble, HealthShare), which collects the essential metrics of the operating system and Caché itself. System Monitor also notifies administrators about issues with Caché and the operating system, when one or several parameters reach the admin-defined thresholds.
It is with great pleasure that the CIUSSS de l'Estrie - CHUS is sharing the mocking framework it developed and presented at the InterSystems Summit 2017. I will update this post with more detailed instructions in the next few weeks but I wanted to share the code and presentation quickly :
https://gitlab.com/ciussse-drit-srd-public/Mocking-Framework
I hope you'll find this useful for your unit testing. We are using this extensively for the last 2 years and it really works well! The repo is public, feel free to submit enhancements!
Do not forget to enable the %UnitTest in your SMP.
There are several options how to deliver user interface(UI) for DeepSee BI solutions. The most common approaches are:
- use native DeepSee Dashboards, get web UI in Zen and deliver it in your web apps.
- use DeepSee REST API, get and build your own UI widgets and dashboards.
The 1st approach is good because of the possibility to build BI dashboards without coding relatively fast, but you are limited with preset widgets library which is expandable but with a lot of development efforts.
The 2nd provides you the way to use any comprehensive js framework (D3, Highcharts, etc) to visualize your DeepSee data, but you need to code widgets and dashboards on your own.
Today I want to tell you about yet another approach which combines both listed above and provides Angular based web UI for DeepSee Dashboards - DeepSee Web library.
Hi, folks!
Suppose you have a Caché class with %String property which contains relatively large text (from 10 to 2000 symbols).
The class:
Class Test.Duplicates Extends %Persistent
{
Property Text As %String (MAXLEN = 2000);
}And you have thousands of entries.
What are the best options to find entries which are duplicates on this property?
Hi, folks!
Consider I need to perform some logic which should fire because values of object properties has been changed.
Is there ANY reason for using class callbacks %OnBeforeSave or %OnAfterSave instead of Trigger?
Hi, Community!
Consider you move data from one server to another or make a deployment with persistent data. What do you do with index globals?
Is it always better to rebuild them or there are some cases when it worth to take them too?
Hi, Community!
I'm pleased to share that we have a dedicated InterSystems Developer Community GitHub - github.com/intersystems-community!
Apart from the database server itself, the standard bundle of the Caché DBMS includes DeepSee, a real-time business intelligence tool. DeepSee is the quickest and the simplest way of adding OLAP functionality to your Caché application.
Another standard component is an Audit subsystem with a web interface, which has the options for expanding with your own event types and an API for using in an application code.
Below is a small example of the joint use of these subsystems that answers the following questions: who did what and when in an information system?
This article was written as an attempt to share the experience of installing the InterSystems Caché DBMS for production environment. We all know that the development configuration of a DBMS is very different from real-life conditions. As a rule, development is carried out in “hothouse conditions” with a bare minimum of security measures, but when we publish our project online, we must ensure its reliable and uninterrupted operation in a very aggressive environment.
Hi Community!
Coding guidelines discussion. Consider you have For with one command in the cycle. Here are the options:
One
For i=1:1:1000 set ^Test(i)=""Two
For i=1:1:1000 {
set ^Test(i)=""
}Same for the "If":
if a set b=aor
if a {
set b=a
}
Your choice? Or maybe even other options?
Hi, Community!
This is the 3rd part of DeepSee Web story - Angular base UI for DeepSee Dashboards, see the beginning here.
By design, DSW provides an implementation for every widget in DeepSee library. But there are some extra features in DSW which make solutions built with DSW dashboards more functional. This article describes it.
Intro
For many in today's interoperability landscape, REST reigns supreme. With the overabundance of tools and approaches to REST API development, what tools do you choose and what do you need to plan for before writing any code? This article focuses on design patterns and considerations that allow you to build highly robust, adaptive, and consistent REST APIs. Viable approaches to challenges of CORS support and authentication management will be discussed, along with various tips and tricks and best tools for all stages of REST API development. Learn about the open-source REST APIs available for InterSystems IRIS Data Platform and how they tackle the challenge of ever-increasing API complexity. The article is a write-up for a recent webinar on the same topic.
Hi, Community!
I’m sure you are using Developer Community analytics built with InterSystems Analytics technology DeepSee:
You can find DC analytics n InterSystems->Analytics menu.
DC Analytics shows interactive dashboards on key figures of DC entities: Posts, Comments, and Members.
Since the last week, this analytics project is available for everyone with source code and data on DC Github!
The following post is a guide to implement a basic architecture for DeepSee. This implementation includes a database for the DeepSee cache and a database for the DeepSee implementation and settings.
What if you could serialize/deserialize objects in whatever format: JSON, XML, CSV,...; attending different criteria: export/import some properties and not others, transform values in this or that way before exporting/importing,...; and all of this without having to change the class definition? Wouldn't that be great??
Well, perhaps it's a goal too ambitious to reach 100% but, exploring this idea, I've developed a bunch of classes that I thought it was good to share. If you want to test, change, modify or improve the code, or just take a look at it, you can do it here. There you'll find a more detailed explanation (see Readme.md)
