In IRIS there is a whole load of JSON functionality that can be ing=herited into a class and for the [properties of the class you can specify the JSONNAME, JSONIGNORE, and various others (similar to the XML qualifiers in the Attributes of an XML Enable class) and so it is very easy to specify how to read a JSON message into an Object and visa versa. Likewise you can deal with null, true, false. I have also discovered, while battling with JSON in Ensemble that the value that gets written to a json string depends on where it comes from: for example, if you use SQL to retrieve your data to populate a json string then the LogicalToODBC method of a property will rer=trun null if the internal value is "" but will return "" if you are using objects. In the same way, a boolean field in SQL will display true or false if the display mode is ODBC.  However I agree with Danny that it is best to use the %Set `method to set the correct values into the JSON string for null, true, false. I have been unable to find any other way of doing this in Ensemble.


That's absolutely brilliant. I had no doubt we would win like so many people comment on how friendly, passionate and useful our community sites are. Special thanks and congratulations to Anastasia, Olga, Evgeny and any others I have missed who put so much effort and enthusiasm into the success of this community. Love you all.


Hi Ben

Once I got my first Raspberry Pi I had to learn Ubuntu, Docker (my one experience of Docker on Windows had not gone well, however, Rich Taylor took exactly 30 minutes to convince me that having 15 IRIS or IRIS for Health containers in Docker for Ubuntu on his Raspberry Pi farm was a very good thing indeed). The introduction of Python, both Native and Embedded along with R and Julia had me scurrying off looking for quick ways to get up to speed on the basics. I invested in a Samsung T5 500GB SSD drive and I studied a couple of articles on the web on how to get my Pi's to boot from a USB SSD only to realise that the people who had followed his instructions ended up with a sticky mess. In the end, I just used my laptop to clone the Micro SD to the SSD and even though it left most of the SSD unallocated which 3 different windows partitioning tools along with the built-in windows diskpart and computer components tools couldn't solve, as soon as I connected the SSD to my Pi and booted from the SSD, Ubuntu very nicely went and expanded the partition for me. I could have used GParted to create more partitions and I suspect that I could probably create 3 separate boot and data configurations for 3 Pti's with a bit of thinking and planning. However, I digress, everywhere I went on this journey I came across cheatsheets for everything and not just programming. I mean everything. There is even a Cheatsheet Site that runs competitions for the best cheat sheets in terms of style, usefulness, readability, sensitivity to people who can't see colours very well.  Then Yuri published a DC Post on seeing IRIS through the TOGAF model and he did a great job so I asked him if I could add it to my collection. My aim is to get DC members who a really fond of some particular aspect of ObjectScript, or Adapters, or Devices, or IRIS HL7 and IRIS FHIR to create cheat sheets which I will collect into one volume and have them styled in ISC colours and logo's and add them to the ISC Learning, Documentation, Global Masters repertoire.

So by publishing my article and attaching the Python examples I hope to inspire other DC members to start contributing.


Hi David

This is a great article. I am currently working for a company that has used the task manager as a fundamental part of the application architecture. If I had been involved in the design of their application I would probably have used an Ensemble Production with services for each automation and then specify a time when the service should run. The application I am working on has given me a whole different view on how the Task Manager can be used so your article couldn't come at a better time from my point of view.


Hi Yuri and DC members

As you know I have challenged the DC members to come up with cheat sheets for IRIS and this is a perfect example of what I was hoping to see from DC members. With your permission, I would like to include it in my collection of IRIS Cheat/Information sheets. For other DC members reading this post and there is an aspect of IRIS that you are particularly familiar with or passionate about then have a go and see if you can come up with a similar informative diagram. Typically the cheat/information sheets are one-two page long. When it comes to a language explanation then you would typically create a page on commands, another on operators and so on. Let your inner artist guide your layout and colour scheme. Once I  have built up a substantial collection of IRIS topics I'll see if Olga, Evgeny and Anastasia and the ISC Experts will vote on the best layout and all cheat/information sheets will be modified to conform to that look. Who knows, they may even reward the winner. Bear in mind that ISC have a certain style, colour scheme and logo's and this should be taken into consideration/


P.S. Sorry Yuri for high jacking your Article ro further my personal mission.

The Developer Community is my favourite social media site. 30 years ago when I joined InterSystems there were 10 Sales Engineers, we designed our own courses for customers, we bemoaned the fact that there was no IRC channel we could hook into. There was no documentation other than that which came with the product. We had long conversations about how nice it would be if we could share or code, our experiences, the lessons we had learnt. Slowly things began to happen and 20 years later  DC was born and even in the last two years it has doubled in size, has reached Discord and Telegram. You can enter any word related to InterSystems or any of their products into Google and you will get pages and pages of results. It is one of the most active threads on LinkedIn. Congratulations to all of you who have made this possible. Thank you so very very much!

Does this by any chance have something to do with connecting a VGAstyle pin connector to a TCP connector?

Hi Ben, I have been thinking very hard about doing this. There are two things that I would like to do, the first is to create a web form that prompts the developer for the properties that will be needed in the message queue that identify the specific source record in the source class/table and the second is to replace the Business Process with a BPL that will execute a sequence of business rules that retrieve the specified data, call a DTL (most likely choice), nd add any other logic. It is possible that you might want to pass the initial document through a second transformation. For example, if you are creating an ADT message and the default structure is an ADT_A01 but the actual structure you need is a Merge so you need to transform the A01 into an A39 and add an MRG segment. The DTL is very simple, it moves the PID, PV1 details into a PID GRP structure and then adds the MRG segment. I think that though this is not strictly necessary it would be a nice option to have.

Secondly, the UI would prompt the developer for the Namespace and Database names and locations and I then programmatically create the routine database, global database and the namespace and then programmatically create the Package and Global mappings.

The really useful functionality is the test module and that needs some work. I know how I want to represent the properties, lists etc that can be modified for a test condition and then have a UI that allows the developer to select the property, list, related table to the various data manipulation rules that I have defined (bearing in mind that the developer can also write custom methods to manipulate any element)

The only issue I have is that, though I am very experienced in CSP and Zen, I would like to use this as an opportunity to build the UI in any of the regular .js frameworks (Angular, React, Vue, Node) and Python Flask. I would really like to use Python as it would be an excellent way of developing my Python skills.

 I guess there is nothing to stop me from releasing the current version as V1.0 and then spending some time developing the other things I would like to incorporate and bring out a v2.0.

I also want to test it on three of my Pi's with the source database on one Pi, the codebase and Interfaces on the second and the target HL7/FHIR server on the third. And I would like to do it using Ubuntu Containers in my Docker for Ubunto which is what I am running on my Pi's