Ensemble

Syndicate content 69 


Hello!

This article is a small overview of a tool that helps to understand classes and their structure inside the InterSystems products: from IRIS to Caché, Ensemble, HealthShare.

In short, it visualizes a class or an entire package, shows the relations between classes and provides all the possible information to developers and team leads without making them go to Studio and examine the code there.

If you are learning InterSystems products, reviewing projects a lot or just interested in something new in InterSystems Technology solutions — you are more than welcome to read the overview of ObjectScript Class Explorer!

Last comment 3 July 2018
+ 17   1 11
3076

views

+ 17

rating

Preface: our small, but very ambitious company called “Black Mushroom Studio” came up with an idea for an e-commerce project and a mobile app that would let users pay for certain goods/services via a payment aggregator.

 

What we had initially: an Android app skeleton that, of course, liked communicating via HTTP and JSON, and a payment system with an API – web services with SOAP content.

 

Goal: make it all work together.

Last comment 22 September 2016
+ 15   0 7
969

views

+ 15

rating

Enterprises need to grow and manage their global computing infrastructures rapidly and efficiently while simultaneously optimizing and managing capital costs and expenses. Amazon Web Services (AWS) and Elastic Compute Cloud (EC2) computing and storage services meet the needs of the most demanding Caché based application by providing
 a highly robust global computing infrastructure.

+ 14   3 9
0

comments

4263

views

+ 14

rating

Does anyone NOT use a debugger? I can't remember the last time I did. It's not because I don't dislike them, I just don't need to use them. The main reason for this is because I have a certain development methodology that either produces less bugs, catches them at a unit test level, or makes tracking them down much easier.

Here are my tips...

1. Write your own COS cheat-sheet.

This is mainly for anyone that is new to COS. One of the biggest bug hazards is not knowing how certain commands and functions work. Take the time to play with a language and try out all of its variances. The process of then documenting your own cheat-sheet will cement the knowledge and provide a quick reference review tool. Not only will you become more productive, but you will certainly write less of those avoidable bugs.

2. Switch on track variables in Studio

Last comment 5 January 2018
+ 14   1 4
794

views

+ 14

rating

This 'feature' have been around for a long time, but I don't see any articles on it so I thought I would make everyone aware.

A method is provided to customize the appearance of the Cache cube icon in the system tray so different instances can be visually distinguished.  When csystray.exe, the Cache/Ensemble cube program, starts, it will look for files named "up.ico" and "down.ico" in the \bin directory below the instance installation directory.  If these .ico files are present, csystray.exe will load the icons and display them in place of the default blue and gray Cache/Ensemble cube icons.  These files should each contain a single small (16x16) icon.

In order for the change to take affect, you need to exit the cube and then start it again from the Start menu (note - obviously this only works on Windows as the Cube doesn't run on other platforms)

Last comment 7 September 2017
+ 14   0 9
466

views

+ 14

rating

Importance and Collection of Exact Version Information ($zv / $zversion)
 
The explanation of:
- why collecting $zv is important (The WHY),
- what the components of $zv mean (The WHAT),
- and how to collect $zv (The HOW). 
(The Ultimate $zv Guide to the ISC Galaxy in large, friendly letters)
Last comment 15 November 2016
+ 13   0 7
739

views

+ 13

rating

GraphQL is a standard for declaring data structures and methods of data access that serves as a middleware layer between the client and the server. If you’ve never heard about GraphQL, here is a couple of useful online resources: here, here and here.

In this article, I will tell you how you can use GraphQL in your projects based on InterSystems technologies.

Last comment 22 January 2019
+ 13   9 5
839

views

+ 13

rating

++Update: August 2, 2018

This article provides a reference architecture as a sample for providing robust performing and highly available applications based on InterSystems Technologies that are applicable to Caché, Ensemble, HealthShare, TrakCare, and associated embedded technologies such as DeepSee, iKnow, Zen and Zen Mojo.

Azure has two different deployment models for creating and working with resources: Azure Classic and Azure Resource Manager. The information detailed in this article is based on the Azure Resource Manager model (ARM).

Last comment 8 July 2016
+ 11   0 1
5556

views

+ 11

rating

This short article was motivated by a problem of one of my customers. They use Ensemble to integrate many systems, some of them use just plain files.

So they naturally selected File Outbound Adapter to write into target file. Things were running smoothly for years, until recently, when the volume of data being written to the file reached large size of tens of megabytes. The operation took around half an hour to complete, causing timing problems where subsequent operations within the process had to wait, and third party system was not happy to wait so long.

The customer's code looked somehow like this pseudo-code snippet

Last comment 9 September 2016
+ 11   0 3
385

views

+ 11

rating

++ Update: August 1, 2018

The use of the InterSystems Virtual IP (VIP) address built-in to Caché database mirroring has certain limitations. In particular, it can only be used when mirror members reside the same network subnet. When multiple data centers are used, network subnets are not often “stretched” beyond the physical data center due to added network complexity (more detailed discussion here). For similar reasons, Virtual IP is often not usable when the database is hosted in the cloud.

Network traffic management appliances such as load balancers (physical or virtual) can be used to achieve the same level of transparency, presenting a single address to the client applications or devices. The network traffic manager automatically redirects clients to the current mirror primary’s real IP address. The automation is intended to meet the needs of both HA failover and DR promotion following a disaster. 

Last comment 14 June 2018
+ 11   0 7
2143

views

+ 11

rating

Introducing non-persistent messages. eXpert-to-eXpert

Background

InterSystems Ensemble as a tool does a lot for the Developer. One of the nice features is the Message trace utility. It shows a message flow diagram. The diagram shows the progress of the message processing real time. You can get many-many useful information from the production. In any case, someone needs to find a bug in a production implementation, without the Message trace utility it could turn into a real nightmare. 

On the other hand, keeping message “traceability” is not for free. A heavy loaded production can very quickly run out of resources just because of the house keeping functions of Ensemble. House keeping functions such as maintaining message header, log entries, message queue generates a significant load on the Caché database used by Ensemble.

This article is about to show how to force Ensemble work more for the everyday life, instead of being prepared for “any-time-debugging”.

This is an eXpert-to-eXpert article. Therefore, I assume the deep understanding of Ensemble.

+ 9   0 3
0

comments

921

views

+ 9

rating

I wanted to share a little tidbit which is in the Studio documentation (http://docs.intersystems.com/cache20152/csp/docbook/DocBook.UI.Page.cls?...) but many people who have been using the InterSystems Studio for a long time missed the addition of this *very* useful feature, and every time I mention this to an audience  I see at least one face light up because of how excited they are to learn about it!

Within Studio, the Output pane (View -> Output) is actually misnamed.  It is actually an Input/Output window which can be used to run Caché ObjectScript commands!  

Last comment 5 September 2017
+ 9   0 7
652

views

+ 9

rating

A beginners guide to develop Ensemble RESTful web services.

Background

Before you start reading this short introduction please go through the on-line documentation of Ensemble with special attention to chapter “Creating REST services and clients with Ensemble”.

The approach in the documentation is undisputable the fastest and easiest way to create RESTful services. As a beginner I went through the documentation and I had several questions. This short article is listing those questions plus my humble answers.

When I refer to documentation I mean Ensemble 2016.2 and onwards

Last comment 22 September 2016
+ 9   0 7
1307

views

+ 9

rating

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. Instructions are online at http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...

Kind regards

André-Claude Gendron

Last comment 12 October 2017
+ 9   0 7
687

views

+ 9

rating

"Telegram" is a well-known instant messenger, which provides an API for creating bots. The features of this API allow you to create bots with a wide range of functionality including receiving payments. 
With the help of the telegram bot, I solved a simple task - sending Alerts from Ensemble to Telegram.

Advantages: Alerts come to the mobile phone, a notification appears, so there is no need to install any additional applications (in contrast to the solution https://community.intersystems.com/post/sending-alerts-mobile-phone-using-pushover- httpoutboundadapter).

The bot can be extended by adding new commands, for example, for managing the Production or for solving other tasks in Iris, Ensemble or Cache.

 

+ 8   4 5
0

comments

525

views

+ 8

rating

This announcement is to inform clients about changes in our 2016.2 and 2016.3 field test programs.  

The 2016.2 field test has been extended in order to address important syntax changes related to JSON. Simply stated, the JSON syntax introduced in 2016.1 had several inconsistencies that we did not want to perpetuate.   This is now addressed and the updated 2016.2 field test will be published today.  Concurrently, the syntax changes and guidance for developers will be posted on the Developer Community shortly. JSON is critically important to our Caché roadmap.

Doc DB has been removed from the field test due to the syntax changes. We have significant refactoring to do in our Document Data modeling code and we did not want to further delay the release of 2016.2 to accommodate that development. This feature will return at a later date

Last comment 14 December 2016
+ 8   0 9
1150

views

+ 8

rating

I have been meaning to make a post about this topic for a few weeks and the other day an issue came in through the WRC about it so it seems this is a conversation we should be having. I want to begin by taking a few moments to explain "Why Atelier" then we can talk about what this means in the general sense for Studio and Atelier and Caché developers. We have wrestled with what to do with Studio for years. When I moved to Product Management in 2008 this was already a "thing". At the time we could not reach a consensus. Some felt Studio was fine as is. Others wanted to investigate a path forward via the browser. Others felt embracing open source and using a tool like Eclipse was the right path. We all agreed on some basic level to the following must have features:

 

Context sensitive help - ie Intellisense for code completion

Debugging

Integrated Source Control

Refactorin

Last comment 3 March 2016
+ 8   0 6
2850

views

+ 8

rating

When running the built in Ensemble Purge task (Ens.Util.Tasks.Purge) there are three parameters DaysToKeep, BodiesToo, and KeepIntegrity.  This article focuses on the KeepIntegrity boolean parameter, but more information about running this task can be found here:

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...

KeepIntegrity determines which Ensemble Messages are marked for deletion within the time specified by DaysToKeep. 

With KeepIntegrity marked as true, the Purge will only mark “completed” messages for deletion.  A completed message has a status of Complete, Error, Aborted, or Discarded. Any incomplete messages will not be marked for deletion

Last comment 1 November 2016
+ 8   0 3
384

views

+ 8

rating

This article will describe and include an example of how to embed an external PDF file into an HL7 segment, specifically ADT_A01:2.3.1 OBX().  This can be useful when attempting to insert pictures or other external data into an HL7 message.  In this example, the name of the PDF file to be embedded is provided in the incoming HL7 message in OBX(1):ObservationValue field.


The basic stipulations for this example are as follows:

  1. Accept a PDF file
  2. Accept an HL7 message
  3. Using the name of the PDF file, embed the PDF data into the HL7 message
  4. Output the message to file

 

 

Last comment 23 August 2017
+ 8   1 1
3435

views

+ 8

rating

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.

For me cosFaker is a populate utils with steroids! You can use together with the Populate, to generate %Stream or long strings, or random Dates.

e.g

Last comment 8 February 2019
+ 8   1 0
539

views

+ 8

rating

This will be a stretch to be useful, but it was sorta fun.  If you just so happen to have a use case to make your HealthShare productions talk to a Slack channel, this is the Business Operation for you.

In Slack, it is a dead simple process to enable an incoming web hook:

  • Name It
  • Give it an Icon or Emoji
  • Declare a Channel to Interact With

One you supplies those, it spits out a URL that you can go to town posting to your channel using that endpoint

Last comment 1 April 2016
+ 8   0 6
385

views

+ 8

rating

In this article I'd like to underline the importance of using UTC timestamps  across your
Systems and Applications. Especially if you are developing applications with global scope.

Those of you working in  ENSEMBLE will know that any timestamp there is saved as UTC time.
Others may have seen that the conversion functions
$ZDATETIME and $ZDATETIMEH have a
control parameter -3 that acts quite different to the rest as it converts one $HOROLOG formatted
string to another $HOROLOG formatted string. One is the local time the other UTC
http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_fzdatetime#RCOS_fzdatetime_dformat

Last comment 23 November 2017
+ 8   0 6
389

views

+ 8

rating

 For Data Synchronization inside Caché you have a range of ways to synchronize objects and tables.
At DB level you can use Shadowing  or Mirroring 

This works excellent and if you need just a part of your data to be synchronized you may split your
data into smaller pieces using Global mapping 
Or if you need bi-directional synchronization on Class/Table level you can use the Object Synchronization Feature 


The limit of all these excellent features:
They just work from Caché/IRIS to Caché/IRIS.

Last comment 8 April 2019
+ 7   1 2
82

views

+ 7

rating

DTL Transformations and GetValueAt/SetValueAt calls on HL7 messages will truncate any fields longer than 32K.  To avoid this, the methods GetFieldStreamRaw and StoreFieldStreamRaw must be used when dealing with fields that might be larger than 32K.  OBX:5 is a frequent example.  These methods have some subtleties and must be used carefully.

This can't be done by simply dragging from left to right in a DTL.  It must be done with a code action.  Also, the StoreFieldStreamRaw call must be the last edit made to the segment because the segment becomes immutable after that.

StoreFieldStreamRaw takes 3 arguments: The stream to put in the field, the VDoc path of the field in which to store the stream, and a pRemainder argument.  If the pRemainder argument isn't specified, then all fields after the field being stored are blown away.  If pRemainder is specified, then all fields after the one being stored are replaced with what's in pRemainder

Last comment 10 June 2017
+ 7   0 8
717

views

+ 7

rating

InterSystems is pleased to announce availability of a field test version of Caché and Ensemble 2018.1

These kits can be downloaded from the Field Test portal page.

There are hundreds of bug fixes, and several new features, including:

  • Microsoft Volume Shadow Copy Service (VSS) Integration
  • Support for Microsoft Integrated Windows Authentication for HTTP Connections
  • SSH Enhancements

All platforms are available, except Oracle Solaris 10, 11 for x86-64.  

We expect to update the field test kits about once a week, until release.

Last comment 2 August 2018
+ 7   0 6
678

views

+ 7

rating

I recently helped a site investigate a problem that appeared after they upgraded their Windows instance of Caché from 2015.1 to 2017.1. A terminal session launched from the server's desktop cube was unable to run OS-level commands using the $ZF(-1) function. For instance, using the no-op command "REM" as follows:

write $zf(-1,"rem")

was returning -1, indicating that the Windows command could not be issued.

It turned out that their original 2015.1 Caché service was running under a specific Windows account (as opposed to LocalSystem), which is commonly done in order to allow background processes to access UNC shares. Indeed, when installing with Normal or Locked Down security you are prompted for the credentials of a Windows account to run the service as

Last comment 27 March 2018
+ 7   0 4
534

views

+ 7

rating

Mirroring 101

Caché mirroring is a reliable, inexpensive, and easy to implement high availability and disaster recovery solution for Caché and Ensemble-based applications. Mirroring provides automatic failover under a broad range of planned and unplanned outage scenarios, with application recovery time typically limited to seconds. Logical data replication eliminates storage as a single point of failure and a source of data corruption. Upgrades can be executed with little or no downtime.

Deploying a Caché mirror does, however, require significant planning, and involves a number of different procedures. And like any other critical infrastructure component, the operating mirror needs ongoing monitoring and maintenance

Last comment 8 December 2018
+ 7   2 10
2910

views

+ 7

rating

In this article we will discuss about Orphaned Messages.

What is an Orphaned Message

Every message body is associated with a message Header which holds the meta data. The Header holds information like source configuration name, target configuration name, time created, time processed, associated message body reference, session information, message body class name, message status. When there are message body records which do not have their corresponding Header records those are called Orphan message bodies. We will discuss on possible causes which could end up with orphan message bodies

Last comment 12 January 2017
+ 7   0 8
989

views

+ 7

rating