Search

Clear filter
Article
Gevorg Arutiunian · Nov 21, 2016

Caché Localization Manager or i18N in InterSystems Caché

Caché Localization Manager CLM is a tool for localization/internationalization/adding multi-language support to a project based on InterSystems Caché. Imagine that you have a ready project where all the content is in Russian, and you need to add an English localization to it. You wrap all your strings into resources, translate them into English and call the necessary resource for Russian or English when necessary. Nothing tricky, if you think about it. But what if there are lots of strings and there are mistakes in Russian (or English)? What if you need to localize in more than one language – say, ten? This is exactly the kind of project where you should use CLM. It will help you localize the entire content of your project into the necessary language and retain the possibility to correct entries. CLM allows you to do the following: Add a new localization. Delete a localization. Export a localization. Import a localization. View two tables at a time. Conveniently switch between spaces. Check spelling. Let’s “look under the hood” now Caché has a standard approach to implementing I11N using the $$$TEXT macros: $$$TEXT("Text", "Domain", "Language") where: Text — the text to be used for localization in the future. Domain — modules in your applications. Language — the language of "Text". If you use $$$TEXT in COS code, data is added to the ^CacheMsg global during class compilation. And this is the global that CLM works with. In ^CacheMsg, everything is identical to $$$TEXT, you just add "ID" as the text hash. ^CacheMsg("Domain", "Language", "ID") = "Text" If you are using CSP, then the use of $$$TEXT in CSP will look as follows: <csp:text id="14218931" domain="HOLEFOODS">Date Of Sale</csp:text> Installation First of all, you need to download the Installed class from GitHub and import it to any convenient space in Caché. I will use the USER space. Once done, open the terminal and switch to the USER space. To start the installation, enter the following command in the terminal: USER> do ##class(CLM.Installer).setup() Installation process: You can make sure the application is installed correctly by following this link: http://localhost:57772/csp/clm/index.csp (localhost:57772 — the path to your server). Settings CLM uses Yandex to perform the translation. You will now need to obtain a Yandex API key to let it work. It's free, but needs registration. Let’s now deal with spellchecking. CLM uses Caché Native Access for SpellCheck implementation. CNA was written for calling external functions from dynamic libraries, such as .dll or .so. SpellCheck works with the Hunspell library and needs two files for spellchecking. The first file is a dictionary containing words, the second one contains affixes and defines the meaning of special marks (flags) in the dictionary. How words are checked: All words are packed from CLM and sent to Hunspell via CNA, where CNA converts them into a language that Hunspell understands. Hunspell checks every word, finds the root form and all possible variations, and returns the result. But where do we get all these dictionaries and libraries? — CNA: use an available release or build it on your own. — Hunspell: same thing, use an available version or download sources for making your own build. — We will also need a standard C language library. In Windows, it is located here: C:\Windows\System32\msvcrt.dll. — Dictionaries can be downloaded here. At the moment, 51 languages are supported: Albanian Czech German Latin Romanian Vietnamese Arabian Chinese Greek Latvian Russian Armenian Danish Hebrew Lithuanian Spanish Azeri Dutch Hungarian Macedonian Serbian Belarusian English Icelandic Malay Slovak Bosnian Estonian Indonesian Maltese Slovenian Basque Esperanto Italian Norwegian Swedish Bulgarian Finnish Japanese Polish Thai Catalan French Kazan Portuguese Turkish Croatian Georgian Korean Brazil Ukrainian The entire configuration process boils down to entering the paths to everything you got before. Open CLM in a browser. There is a “Set Paths” button in the upper right corner. Click it and you’ll see the next window. Use it to enter the required paths. Here’s what I got: Demonstration of a registration form localization Link to demonstration. Password and login: demo. Your critique, comments and suggestion are very welcome. The source code and instructions are available on github under an MIT license. An interesting article, but I'm puzzled by your use of the term "I11n". I'm familiar with "I18n" as an abbreviation for Internationalization (because there are 18 letters between the "I" and the "n". Likewise, I understand "L10n" as standing for Localization. Some Googling suggests that "I11n" is short for Introspection. Or have I missed something? Hi, John!i11n here stands for "internationalization" i18n - internationalization, but i11n is something else True. Title is fixed
Announcement
Olga Zavrazhnova · Jan 9, 2020

InterSystems Open Exchange Survey 2019 - 7 questions that matter!

Hi Community! Thank you for being a part of the InterSystems Open Exchange! We want to know what you like about Open Exchange and how we can make it better in 2020. Could you please go through this short survey which will let us know what do you think. ➡️ Open Exchange Survey 2019 (2 minutes, 7 questions) Your answers are very important to us! Sincerely, Your InterSystems Developer Community Team
Announcement
Anastasia Dyubaylo · Jan 24, 2020

New Video: What Developers Love About InterSystems IRIS

Hi Community, New video, recorded by @Benjamin.DeBoe, is available on InterSystems Developers YouTube: ⏯ What Developers Love About InterSystems IRIS InterSystems Product Manager @Benjamin.DeBoe talks about what developers love about InterSystems IRIS Data Platform - the data and code are "next to one another" making your code very efficient. Try InterSystems IRIS: https://www.intersystems.com/try Enjoy watching the video! 👍🏼
Announcement
Jeff Fried · Jan 27, 2020

InterSystems IRIS and IRIS for Health 2020.1 preview is published

Preview releases are now available for the 2020.1 version of InterSystems IRIS and IRIS for Health! Kits and Container images are available via the WRC's preview download site. The build number for these releases is 2020.1.0.199.0. (Note: first release was build 197, updated to 199 on 2/12/20) InterSystems IRIS Data Platform 2020.1 has many new capabilities including: Kernel Performance enhancements, including reduced contention for blocks and cache lines Universal Query Cache - every query (including embedded & class ones) now gets saved as a cached query Universal Shard Queue Manager - for scale-out of query load in sharded configurations Selective Cube Build - to quickly incorporate new dimensions or measures Security improvements, including hashed password configuration Improved TSQL support, including JDBC support Dynamic Gateway performance enhancements Spark connector update MQTT support in ObjectScript (NOTE: this preview build does not include TLS 1.3 and OpenLDAP updates, which are planned for General Availability) InterSystems IRIS for Health 2020.1 includes all of the enhancements of InterSystems IRIS. In addition, this release includes: In-place conversion to IRIS for Health HL7 Productivity Toolkit including Migration Tooling and Cloverleaf conversion X12 enhancements FHIR R4 base standard support As this is an EM (Extended Maintenance) release, customers may want to know the differences between 2020.1 and 2019.1. These are listed in the release notes: InterSystems IRIS 2020.1 release notes IRIS for Health 2020.1 release notes Draft documentation can be found here: InterSystems IRIS 2020.1 documentation IRIS for Health 2020.1 documentation The platforms on which InterSystems IRIS and IRIS for Health 2020.1 are supported for development and production are detailed in the Supported Platforms document. Jeffrey, thank you for the info. Do you already know that the Supported Platforms document link is broken? (404) Hi Jeff! What are the Docker image tags for Community Editions? I've just uploaded the Community Editions to the Docker Store (2/13-updated with new preview build): docker pull store/intersystems/iris-community:2020.1.0.199.0 docker pull store/intersystems/irishealth-community:2020.1.0.199.0 Thanks, Steve! Will native install kits be available for the Community Editions as well? Yes, full kit versions of the 2020.1 Community Edition Preview are available through the WRC download site as well. I'm getting this error when I attempt to access the link ... Jeffery If you don't use that link and first log into the WRC application: https://wrc.intersystems.com/wrc/enduserhome.csp Can you then go to: https://wrc.intersystems.com/wrc/coDistribution2.csp Then select Preview? Some customers have had problems with the distib pages because their site restricts access to some JS code we get from a third party. I get the same result using your suggested method, Brendan. I'm not technically a customer; I work for a Services Partner of ISC. I am a DC Moderator though (if that carries any weight) so it would be nice to keep abreast of the new stuff OK I needed to do one more click, your Org does not have a support contract so you can't have access to these pages, sorry. Maybe Learning Services could help you out but I can't grant you access to the kits on the WRC. Hello, I took this for a spin and noticed that the new Prometheus metrics are not available on it like they were in 2019.4 ? ( ie: https://community.intersystems.com/post/monitoring-intersystems-iris-using-built-rest-api ). Am I missing something or is the metrics api still under consideration to make it into this build ? The correct link is https://docs.intersystems.com/iris20201/csp/docbook/platforms/index.html. I fixed the typo in the post. Tanks for pointing that out! Seems to be there for me... Hello Jeffrey, We're currently working on IRIS for Health 20.1 build 197, and we were wondering what fixes or additions went to latest build 199. Intesystems used publish all fixes with each FT build version, is there such list? Thank you Yuriy The Preview has been updated with build 2020.1.0.199.0. This includes a variety of changes, primarily corrections for issues found under rare conditions in install, upgrade, and certain distributed configurations. None of these changes impacts any published API. Thank you for working with the preview and for your feedback! Hi Yuriy - Thanks for pointing this out. We did not prepare a list for this, but I did make a comment on this thread, including verifying that none of these changes impacts any published API. If there is a change resolving an issue you reported through the WRC, you'll see that this is resolved via the normal process. We will be publishing detailed changenotes with the GA release. -Jeff
Article
Mark Bolinsky · Mar 6, 2020

InterSystems IRIS for Health 2020.1 HL7 Benchmark

Introduction InterSystems has recently completed a performance and scalability benchmark of IRIS for Health 2020.1, focusing on HL7 version 2 interoperability. This article describes the observed throughput for various workloads, and also provides general configuration and sizing guidelines for systems where IRIS for Health is used as an interoperability engine for HL7v2 messaging. The benchmark simulates workloads that have been designed to closely match live environments. The details of the simulation are described in the Workload Description and Methodology section. The tested workloads comprised HL7v2 Patient Administration (ADT) and Observation Result (ORU) payloads and included transformations and re-routing. The 2020.1 version of IRIS for Health has demonstrated a sustained throughput of over 2.3 billion (total inbound and outbound) messages per day with a commodity server using the 2nd Generation Intel® Xeon® Scalable Processors and Intel® Optane™ SSD DC P4800X Series SSD storage. These results have more than doubled the scalability from the prior Ensemble 2017.1 HL7v2 throughput benchmarking. Throughout these tests, IRIS for Health was configured to preserve first-in/first-out (FIFO) ordering, and to fully persist messages and queues for each inbound and outbound message. By persisting the queues and messages, IRIS for Health provides data protection in the event of a system crash, and full search and resend capabilities for historic messages. Further, configuration guidelines are discussed in the sections below, which will assist you in choosing an appropriate configuration and deployment to adequately meet your workload’s performance and scalability requirements. The results demonstrate that IRIS for Health is capable of satisfying extreme messaging throughput on commodity hardware, and in most cases allowing a single small server to provide HL7 interoperability for an entire organization. Overview of Results Three workloads were used to represent different aspects of HL7 interoperability activity: T1 workload: uses simple pass-through of HL7 messages, with one outbound message for each inbound message. The messages were passed directly from the Ensemble Business Service to the Ensemble Business Operation, without a routing engine. No routing rules were used and no transformations were executed. One HL7 message instance was created in the database per inbound message. T2 workload: uses a routing engine to modify an average of 4 segments of the inbound message and route it to a single outbound interface (1-to-1 with a transform). For each inbound message, one data transformation was executed and two HL7 message objects were created in the database. T4 workload: uses a routing engine to route separately modified messages to each of four outbound interfaces. On average, 4 segments of the inbound message were modified in each transformation (1 inbound to 4 outbound with 4 transforms). For each inbound message four data transformations were executed, four messages were sent outbound, and five HL7 message objects were created in the database. The three workloads were run on a physical 48-core system with two Intel® Scalable Gold 6252 processors with two 750GB Intel® Optane™ SSD DC P4800X SSD drives running Red Hat Enterprise Linux 8. The data is presented as the number of messages per second (and per hour) inbound, the number per second (and per hour) outbound, as well as the total messages (inbound plus outbound) in a 10-hour day. Additionally, CPU utilization is presented as a measure of available system resources at a given level of throughput. Scalability Results Table-1: Summary of throughput of the four workloads on this tested hardware configuration: * Combined workload with 25% of T1 / 25% of T2 / 50% T4 workload mix Workload Description and Methodology The tested workloads included HL7v2 Patient Administration (ADT) and Observation Result (ORU) messages, which had an average size of 1.2KB and an average of 14 segments. Roughly 4 segments were modified by the transformations (for T2 and T4 workloads). The tests represent 48 to 128 inbound and 48 to 128 outbound interfaces receiving and sending messages over TCP/IP. In the T1 workload, four separate namespaces each with 16 interfaces were used, and the T2 workload used three namespaces each with 16 interfaces, the T4 workload used four namespaces each with 32 interfaces, and the final “mixed workload” used three namespaces with 16 for T1 workload, 16 for T2 workload, and 32 for T4 workload. The scalability was measured by gradually increasing traffic on each interface to find the highest throughput with acceptable performance criteria. For the performance to be acceptable the messages must be processed at a sustained rate, with no queuing, no measurable delays in delivery of messages and the average CPU usage must remain below 80%. Previous testing has demonstrated that the type of HL7 message used is not significant to the performance or scalability of Ensemble; the significant factors are the number of inbound messages, the size of inbound and outbound messages, the number of new messages created in the routing engine, and the number of segments modified. Additionally, previous testing has shown that processing individual fields of an HL7 message in a data transformation is not usually significant to performance. The transformations in these tests used fairly straightforward assignments to create new messages. Note that complex processing (such as use of extensive SQL queries in a data transformation) may cause results to vary. Previous testing has also verified that rules processing is not usually significant. The routing rule sets used in these tests averaged 32 rules, with all rules being simple. Note that extremely large or complex rule sets may cause results to vary. Hardware Server Configuration The tests utilized a server with 2nd Generation Intel® Scalable Gold 6252 “Cascade Lake” processors providing 48 cores @ 2.1GHz on a 2-socket system, 24 cores per socket with 192 GB DDR4-2933 DRAM, and 10Gb Ethernet network interface. Red Hat Enterprise Linux Server 8 operating system was used for this test with InterSystems IRIS for Health 2020.1 Disk Configuration Messages passing through IRIS for Health are fully persisted to disk. In the case of this test two Intel 750GB Intel® Optane™ SSD DC P4800X SSD drives internal to the system were used splitting the databases on one drive and the journals on another. In addition to ensure real-world comparison synchronous commit is enabled on the journals to force data durability. For the T4 workload as described previously in this document, each inbound HL7 message generates roughly 50KB of data, which can be broken down as described in Table 2. Transaction journals are typically kept on line for less time than message data or logs and this should be taken into account when calculating the total disk space required. Table 2: Disk Requirement per inbound HL7 T4 Message Contributor Data Requirement Segment Data 4.5 KB HL7 Message Object 2 KB Message Header 1.0 KB Routing Rule Log 0.5 KB Transaction Journals 42 KB Total 50 KB Recall that the T4 workload used a routing engine to route separate modified messages to each of four outbound interfaces. On average, 4 segments of the inbound message were modified in each transformation (1 inbound to 4 outbound with 4 transforms). For each inbound message four data transformations were executed, four messages were sent outbound, and five HL7 message objects were created in the database. When configuring systems for production utilization, net requirements should be calculated by considering the daily inbound volumes as well as the purging schedule for HL7 messages and the retention policy for journal files. Additionally, appropriate journal file space should be configured on the system so as to prevent the journal disk volumes from filling up. The journal files should reside on physically separate disk from the database files, for both performance as well as reliability considerations. Conclusion InterSystems IRIS for Health HL7v2 message throughput demonstrated in these tests illustrates the massive throughput capabilities with a modest 2-socket commodity server configuration to support the most demanding message workloads of any organization. Additionally, InterSystems is committed to constantly improving on the performance and scalability from version to version along with taking advantage of the latest server and cloud technologies. The following graph provides an overview and comparison of the increase in throughput from the previous Ensemble 2015.1 and Ensemble 2017.1 benchmarks with the Intel® E5-2600 v3 (Haswell) processors and Ensemble 2017.1 benchmark with 1st Generation Intel® Scalable Platinum Series (Skylake) processors respectively to latest results with the 2nd Generation Intel® Scalable Gold Series (Cascade Lake) processors running IRIS for Health 2020.1. Graph-1: Message throughput (in millions) per 10-hour day on a single server InterSystems IRIS for Health continues to raise the bar on interoperability throughput from version to version along with offering flexibility in connectivity capabilities. As the above graph shows the message throughput has increased significantly and, in case of T2 workloads, doubled from 2017, and comparing to 2015 more than tripled throughput in the same 10-hour window and sustained over 2.3 billion total 24-hour message rates. Another key indicator of the advancements of IRIS for Health is the throughput improvement in the more complex T2 and T4 workloads which incorporates transformations and routing rules as opposed to pure pass-through operation of the T1 workload. InterSystems is available to discuss solutions for your organizations interoperability needs. Hi Mark! These are impressive results! Do you have the link to the previous Ensemble 2017.1 HL7v2 throughput benchmarking results? They used to be available on our website, but have since been removed since the results where from 3 years ago. The summary results from 2015 and 2017 have been included in graph-1 above in this new report for comparison. Thanks. hi Mark Bolinsky ; I am student , I need HL7 Benchmark to test the process that I implemented. Please, can you help me get it?
Announcement
Anastasia Dyubaylo · Mar 30, 2020

MIT COVID19 Challenge Virtual Hackathon: Join with InterSystems!

Hey Developers! Want to beat the COVID-19 pandemic with InterSystems and MIT? Please take part in the MIT COVID19 Challenge! It's a 48-hour virtual hackathon with the goal to develop solutions that address the most pressing technical, social, and financial issues caused by the COVID-19 outbreak. And it's your chance to build a solution on InterSystems IRIS for the COVID-19 crisis! In this 48-hour virtual event, MIT will help tackle the most pressing technical, social, and financial issues caused by the COVID-19 outbreak. Participants will form teams on Friday, April 3rd to generate solutions, including proof of concepts and a preliminary vision for execution. On Sunday, April 5th, teams will reconvene to present their solutions. InterSystems as a partner of the MIT COVID-19 Challenge virtual hackathon will provide templates, mentors and hosting resources to help teams to build and deploy your solutions with InterSystems IRIS for Health. ➡️ Apply to participate now! Apply for the hackathon! You'd be able to form teams and you'll get our mentors' support during the hackathon along with a set of templates to build on IRIS for Health effectively! Stay tuned!
Announcement
Anastasia Dyubaylo · Apr 6, 2020

The 2nd Programming Contest: InterSystems IRIS with REST API

Hi Developers! Want to participate again in the competition of creating open-source solutions using InterSystems IRIS Data Platform? Then we're pleased to announce the second InterSystems IRIS Online Programming Contest! And the topic for this contest is InterSystems IRIS with REST API. The contest will again last three weeks: April 13-May 3, 2020. Also, please join the InterSystems Contests Discord Channel to chat about contest and technology. Prizes We have 2 winning nominations and there will be more money prizes than in the previous contest! 1. Experts Nomination - winners will be determined by a specially selected jury: 🥇 1st place - $2,000 🥈 2nd place - $1,000 🥉 3rd place - $500 2. Community Nomination - an application that will receive the most votes in total: 🥇 1st place - $1,000 🥈 2nd place - $500 If several participants score the same amount of votes they all are considered as winners and the money prize is shared among the winners. Also, we will provide winners with high-level badges on Global Masters. Who can participate? Any Developer Community member from any country can participate in a contest, except for InterSystems employees. Create an account! Contest Period April 13-26, 2020: Two weeks to upload your applications to Open Exchange (also during this period, you can edit your projects). April 27-May 3, 2020: One week to vote. All winners will be announced on May 4th, 2020. The Topic ➡️ InterSystems IRIS REST API and web socket applications ⬅️ We will choose the best application built using InterSystems IRIS Community Edition(IRIS CE), or InterSystems IRIS for Health Community Edition (IRIS CE4H) as a backend exposing REST API or web sockets interface. And you'll have technology bonuses if you introduce special technology implementations in your application. Learn more about the topic and bonuses here. Helpful Resources 1. How to submit an application to a contest: Quick example & Video 2. Online Course: Building REST API in InterSystems IRIS 3. Video: How to make the REST-API in InterSystems IRIS with Open API spec 4. Article: How to test modules before publishing to Open Exchange Judgment Please find the Judgment and Voting Rules for the Contest here. So! Ready. Set. Code. Stay tuned, the post will be updated! ❗️ Please check out the Official Contest Terms here.❗️ Hey Community! We launched a special hashtag for our programming marathon! Please welcome - #IRIScontest This hashtag is already on InterSystems Developers' social networks: Twitter, Facebook, Telegram and LinkedIn. Let the world know about the Intersystems IRIS Contest! Please share! 😉 Hi Developers! Only 3 days left before the start of the Intersystems IRIS Programming Contest! You will have 2 weeks (April 13-26) to upload your solutions to the Open Exchange and compete for the main prizes. So join our competition and win! 😎 These competitions appear to demand the use of Cache ObjectScript rather than any other language. Is this correct? And if so, why can't other languages be used instead? Hi Rob! The official name of the language is InterSystems ObjectScript or just ObjectScript - it's not only for Caché any more ;) And if so, why can't other languages be used instead? Every contest has a topic. First one was about ObjectScript CLI. The current is about Intersystems IRIS REST API or web sockets interface. There is no ObjectScript requirement in this particular contest directly but it's obviously involved. Because if you even generate the REST API using spec-first approach you get endpoints but you need ObjectScript to write the logic. See examples in the article from @Eduard.Lebedyuk or another from @David.Reche. And next month we are having a Native API contest where applications using python, node.js, .NET, java are very welcome. I updated my reply. Yes, ObjectScript is needed in this contest to implement REST API business logic. Introduced the 3rd technology bonus: usage of a spec-first approach! You get the bonus if you generate the REST-API in Intersystems IRIS with swagger spec using Open API services. Learn more in the documentation. See examples: one, two, three. And this is also a very nice example of spec-first by @Guillaume.Rongier7183! Hi Community! We start tomorrow! Are you ready to participate in our exciting contest? 🚀 Provided a few details on the requirements, possible application types, and bonuses. How to apply for the Programming Contest Log in to Open Exchange, open your applications section. Open the application which you want to apply for the contest and click Apply for Contest. Make sure the status is 'Published'. The application will go for the review and if it fits the topic of the contest the application will be listed on the Contest Board. Hi Rob! We provided more details for the contest - and indeed you can avoid using ObjectScript in the contest!You can use already existing! E.g. are extremely in need of the Frontend for the Forms 2.0, something line Vue, or react would be great! Or you can use any out-of-the-box IRIS REST API. So, provided Intersystems IRIS is used as the back-end database for the data persistence of the APIs, the competition allows the use of any other technologies in front of it? eg QEWD/Node.js + browser UI? The competition allows using REST API on the Intersystems IRIS side. If QEWD/Node.js + browser UI does this, then go ahead. That depends on your definition of "REST API on the Intersystems IRIS side". That Intersystems IRIS provides the HTTP interface? and/or the code that does the work of the API is within IRIS and therefore ObjectScript? As far as QEWD is concerned, Intersystems IRIS is simply a persistent JSON store with no other role (though you still can invoke ObjectScript methods and access classes if you want), so a REST API is implemented in JavaScript and handled by Node.js/QEWD. Sure, you can interpret Intersystems IRIS in any way it works for your application, but in this contest, we want to focus on REST API on Intersystems IRIS side. That means you either use any internal 6 api (Atelier, UIMA, iKnow, DocDB, MGMNT, BI, Monitoring) or any installed from Open Exchange or build your own with Swagger and/or ObjectScript. In that case I'll wait for a different competition :-) The registration period has already begun! Follow our Contest Board and stay tuned. Waiting for your cool projects! Hi Developers! We are inviting you to join InterSystems Contests Discord Channel to quickly discuss all the questions related to technology requirements, bonuses, REST API, spec first, etc. It has several rooms: REST Contest Technology Bonuses Voting Join! And let's chat about the contest and how to develop the solution and win! Hey Developers, The first application is already in the Contest Board! @Lorenzo.Scalese with the JSON-Filter project is in the game! And who's next? 😉 Hi Developers, Wonder if you could vote for the solution you like? You can! If you contribute to DC! Everyone contributing articles, questions and replies is very welcome to give the vote in the Community Nomination. An application that will receive the most votes in total will win in this nomination. Prizes are waiting for you, stay tuned! 🚀 And here is the video which shows how to apply for the contest: Enjoy! Hey Developers, One more application is already in the game: isc-apptools-admin project by @MikhailenkoSergey. Full speed ahead! 🔥 Please check out our Contest Board! Wrote how to test modules before publishing to Open Exchange. Hey Community, Our Contest Board has been updated again. One more application is already participating in the Intersystems IRIS contest! Please welcome the iris-history-monitor by @Henrique.GonçalvesDias! And who's next? 😉 Added video How to make the REST-API in InterSystems IRIS and expose Open API (Swagger) spec for any InterSystems IRIS REST API This video shows how to create your own basic CRUD API for InterSystems IRIS using the GitHub template and expose it with Open API spec. ⏯ Creating CRUD REST API for InterSystems IRIS in 5 minutes Enjoy! To those who want to earn the ZPM bonus: Here is also the video that describes what is ZPM (ObjectScript Package Manager), how to install and use it. Hi all, You're very welcome to join the InterSystems Developers Discord Channel to discuss all topics and questions related to the Intersystems IRIS Programming Contests (technology requirements, bonuses, REST API, spec first, etc). There are lively discussions with InterSystems developers! Join us! 😎 Yeah, +1 in the Contest Board! Check out the new project: REST for Tasks on my Status Report by @Oliver.Wilms 👍🏼 Developers! You have 5 days to submit your application for the InterSystems IRIS Online Contest! Don't hesitate to submit if you didn't finish it - you'll be able to fix the bugs and make improvements during the voting week too! Want more about ZPM (ObjectScript Package Manager)? Enjoy watching the new video, specially recorded by @Evgeny.Shvarov for the second Intersystems IRIS contest: ⏯ How to Build, Test and Publish ZPM Package with REST Application for InterSystems IRIS This video shows how to build the Package with ObjectScript classes and REST API application from scratch, how to test it, and how to publish it on a test registry and in the InterSystems Open Exchange registry. Stay tuned! If you have your REST API application and just need to Dockerize it - take the advantage of Intersystems IRISDocker Kit. This archive added to any repo with InterSystems IRIS code makes this repo running in InterSystems IRIS in Docker container. And you don't need to start from scratch with a template. Voting for the best application will begin soon! Only 4 days left before the end of registration for the Intersystems IRIS Programming Contest. Don't miss your chance to win! 🏆 Last day to submit your application! Compete with other magnificent seven which are already in the competition! Last call! Registration for the Intersystems IRIS Contest ends today! Hurry up to upload your application 😉 The voting has been started! Choose your best InterSystems IRIS application!
Article
Evgeny Shvarov · Jan 10, 2020

How to Publish an Application on InterSystems Open Exchange: Part 2

Hi Developers! This post describes how you could publish your InterSystems application on Open Exchange. What is the InterSystems application? It could be anything, which is built with InterSystems data platforms or to help work with InterSystems data platforms: InterSystems IRIS, InterSystems IRIS for Health, InterSystems HealthShare, InterSystems Ensemble and InterSystems Caché. This could be tools, frameworks, adapters, examples and business solutions. Why publish on Open Exchange? InterSystems Open Exchange is an "App Central" for the solutions in InterSystems. It's the first place where the developer goes to look for tools, frameworks, and examples on InterSystems IRIS. And Open Exchange brings the added traffic to your solution which could be converted into leads. We are having a set of business development tools for published Open Exchange applications. This definitely makes your InterSystems application more noticed. Submitting an application Suppose you have a library with open source published on Github which you want to publish on Open Exchange. For the purpose of a demo, I'll fork this remarkable project of @Peter.Steiwer ObjectScript-Math which I forked and renamed to object script-super-math. First of all, you need to sign in. You can do this using your DC account or create a new one (which will be suitable for DC too). Once signed in you'll see Profile Menu available which has My Apps section: Click on a New button to submit a new InterSystems application: OEX has a nice integration with Github which allows filling all the matching fields from the Github repo. E.g. let's try with objectscript-super-math: It imports the name, short description, license, Full description, Download URL. To have the application ready for publishing you just need to peek InterSystems Data Platform it works with and the related tags. Also, if there is an article on DC where you discuss the application, add the link to this article. If you publish not Github app with open source, but e.g. the solution you need to accurately fill all the mandatory fields: Name, Download URL, Short Description, License, Tags, Product. And the optional fields which you think should be filled. You also can add the related Youtube videos and two very important checkboxes: We'll talk about this later. Once you are happy with the fields you are welcome to Save the application. Before publishing the app you can set up the app's icon: Upload screenshots: And after that once you are ready, send it for approval on publishing: Here you need to submit the version and the release notes of the version. Release notes section supports Markdown so you can paste here very informative description with rich formatting on what are the changes come with the new release of your application. This will send the application to Open Exchange management for approval and once it's approved the application will be published on Open Exchange, you'll get the notification on email and the release news will be published on Open Exchange News. Next time we'll discuss profile setup, company setup and some special cases. Stay tuned! A tip for anyone trying to upload a different image for an already-published app. You need to unpublish it first, to make the "Upload image" option appear on the menu. See this GH issue comment. A related tip is that when you send your unpublished-and-modified app for approval you can override the default next version number that appears in the dialog, setting it to the same as the current version. You'll still have to enter something in the Release Notes field, but when your changes are subsequently approved your published app won't show any change in the Version History tab. John! Thanks for the heads up! It's really not very convenient! We'll fix it.
Article
Evgeny Shvarov · Jan 13, 2020

How to Make Open Exchange Helpful For Your InterSystems Application

Hi Developers! In previous articles, we spoke on how to publish your application. But how to make Open Exchange work its best for your application? What do you want for your application on Open Exchange? It is attention (traffic) and downloads. Let's talk about how Open Exchange can deliver this. How Do I know how many downloads I have? There is an Analytics tab that is visible for the Author of application. It shows how many times users clicked on the Download button. We have a roadmap for this tab and soon will add the monthly info on Downloads and some other information and you are very welcome to submit what else do you want to see here. E.g. we plan to make this Downloads counter publicly available and make a sorting upon Downloads. Prepare your Application's page Your application's page should contain enough description of what the application does. This makes users want to click on the Download button. How to set up the description? If your application is the facade for a GitHub repo Open Exchange can import Readme.Md from your Github repo. E.g. like here: check the Open Exchange page and the related Github repo page So, in this case, you just need to properly maintain README.md file in the Github repo which will be automatically updated on Open Exchange. In case it is a non-Github application you setup the description on your own the Long Description field. This field supports markdown so you have rich formatting tools to describe the purpose, features, installation steps and usage terms. A good example of a Markdown description on Open Exchange. Make Regular Releases If your app is evolving this is noticed by users. Add the feature and don't forget to make a release on Developers Community. It takes 5 min but it adds the release notes to News, it places your app on top on the main page, it gets your subscribers notified on the new features your bring to your application. Post the Related Developer Community article You can tell a lot how to use your application and how people can benefit from its features? It's a great reason to write an article about it on Developers Community and highlight the features of your application. Of course, you will add the hyperlinks to your application page inside the text but you also can feature the application using DC tools. E.g. you can add the "Related Open Exchange Application" link and this will add a special button on top of your article and in the news feed and an URL to the app at the bottom of the application. See the Example. You also want to link back the application on Open Exchange to the article on DC: This will make the Discuss button active on the Application page. An average DC article gets about 800 reads so you can deliver additional traffic to your application using this channel. Easy installation and setup If your application has 12 steps of "How to install it" this probably doesn't help to increase the number of downloads. Ideally, this should be a one-step installation. If your application is InterSystems ObjectScript I recommend pack and publish it with an ObjectScript Package manager. This really makes your installation into one command: USER:zpm>install your-application Example. Use Your Global Masters' "Miles" Another way how you can get more traffic to your application page is to use Global Masters points. You may know we have a Global Masters advocates hub where we give points to participants for there contribution to InterSystems Community. The ways of the contribution could be articles, answers, and questions on DC, applications on Open Exchange (yes, you get GM points for submitting applications). So, you probably have some GM points(sign in with your DC or Open Exchange credentials) and if you give to the Community and the Community could give you back and you can use GM points to get more attention to your Open Exchange application. How? Google Ads promotion You can spend some points and set up a Google Adwords campaign of $1,000 which InterSystems will cover and manage. Learn more. App of the week We have "News blocks" on every page of Developers Community and this News block can tell about your Open Exchange application. Learn more. Your Application Screencast On InterSystems Developers Youtube If you have a screencast on the features of your application you can get more views and traffic publishing it on Developers Community Youtube. And the simplest and the most working approach: add the features which everybody likes and thus you get the most attention and downloads) Choose any recipes above or take all of them and boost the downloads of your InterSystems Application on Open Exchange! If you have any ideas on how we could better help to make your Open Exchange applications more noticed and helpful submit suggestions and bug reports here. Submit your InterSystems apps and stay tuned!
Question
Daniel Kutac · Feb 7, 2020

InterSystems IRIS for Health 202.1 Preview - Docker issue

Hi guys, I thought I test the InterSystems IRIS for Health 2020.1, the Docker image. but for some reason, the container only lives for about 10 seconds and I can see from the message.log file that as soon as IRIS starts it then performs shutdown thus ending also container. Anyone else seen this? here is the message.log part *** Recovery started at Fri Feb 7 14:37:02 2020 Current default directory: /durable/iris-config/mgr Log file directory: /durable/iris-config/mgr/ WIJ file spec: /durable/iris-config/mgr/IRIS.WIJRecovering local (/durable/iris-config/mgr/IRIS.WIJ) image journal file...Starting WIJ recovery for '/durable/iris-config/mgr/IRIS.WIJ'. 0 blocks pending in this WIJ.Exiting with status 3 (Success)02/07/20-14:37:02:433 (760) 0 [Generic.Event] Automatically configuring buffers02/07/20-14:37:02:494 (760) 0 [Generic.Event] Allocated 1528MB shared memory: 1024MB global buffers, 300MB routine buffers02/07/20-14:37:02:495 (760) 0 [Crypto.IntelSandyBridgeAESNI] Intel Sandy Bridge AES-NI instructions detected.02/07/20-14:37:02:532 (760) 0 [WriteDaemon.UsingWIJFile] Using WIJ file: /durable/iris-config/mgr/IRIS.WIJ02/07/20-14:37:02:532 (760) 0 [Generic.Event] No journaling info from prior system02/07/20-14:37:02:533 (760) 0 [Generic.Event] InterSystems IRIS is started with NOSTU option.02/07/20-14:37:02:546 (761) 0 [WriteDaemon.Started] Write daemon started.02/07/20-14:37:02:636 (760) 0 [Generic.Event] Startup of InterSystems IRIS [IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2020.1 (Build 197U) Thu Jan 23 2020 10:15:13 EST] in /usr/irissys/bin/ with mgr: /durable/iris-config/mgr with wij: /durable/iris-config/mgr/IRIS.WIJ from: /durable/iris-config/mgr/ OS=[Linux], version=[#30~18.04.1-Ubuntu SMP Fri Jan 17 06:14:09 UTC 2020], release=[5.3.0-28-generic], machine=[x86_64] nodename=[iris]. numasyncwijbuf: 0, swdwrtmax: 0, wijdirectio: off, synctype: 3 System Initialized.02/07/20-14:37:02:656 (792) 0 [Database.MountedRW] Mounted database /durable/iris-config/mgr/ (SFN 0) read-write.02/07/20-14:37:02:660 (761) 1 [Generic.Event] Cannot lock /usr/irissys/mgr/irislib/ err(13): will try accessing readonly02/07/20-14:37:02:661 (792) 0 [Database.MountedRO] Mounted database /usr/irissys/mgr/irislib/ (SFN 1) read-only. File or filesystem allows read-only access. 02/07/20-14:37:02:666 (792) 0 [Database.MountedRW] Mounted database /durable/iris-config/mgr/irislocaldata/ (SFN 2) read-write.02/07/20-14:37:02:670 (792) 0 [Generic.Event] init_gcr_seed: gen_crypt_rand seeded from /dev/urandom: 64 bytes.02/07/20-14:37:02:708 (799) 0 [Utility.Event] Shutting down InterSystems IRIS02/07/20-14:37:02:708 (799) 0 [Utility.Event] Notifying Clients02/07/20-14:37:02:709 (799) 0 [Utility.Event] No user shutdown routines to execute02/07/20-14:37:02:709 (799) 0 [Utility.Event] Stopping User Jobs02/07/20-14:37:02:710 (799) 0 [Utility.Event] Stopping Network Servers02/07/20-14:37:02:710 (799) 0 [Utility.Event] Withdrawing from License Domain02/07/20-14:37:02:711 (799) 0 [Utility.Event] Waiting for users to stop02/07/20-14:37:02:711 (799) 0 [Utility.Event] Stopping Client Networking02/07/20-14:37:02:711 (799) 0 [Utility.Event] Removing database locks02/07/20-14:37:02:711 (799) 0 [Utility.Event] Updating Journal File02/07/20-14:37:02:712 (799) 0 [Utility.Event] Journal restore not required at next startup02/07/20-14:37:02:712 (799) 0 [Utility.Event] Transaction rollback not required at next startup02/07/20-14:37:04:713 (799) 0 [Utility.Event] Waiting for database updates to complete02/07/20-14:37:04:713 (799) 0 [Utility.Event] Database updates complete02/07/20-14:37:04:713 (799) 0 [Utility.Event] Stopping System Jobs02/07/20-14:37:04:814 (771) 0 [Generic.Event] EXPDMN exited due to system shutdown02/07/20-14:37:04:815 (763) 0 [Generic.Event] JRNDMN exited due to system shutdown02/07/20-14:37:04:815 (762) 0 [Generic.Event] GARCOL exited due to system shutdown02/07/20-14:37:04:916 (764) 0 [Generic.Event] SWRTDMN #1 exited due to system shutdown02/07/20-14:37:04:916 (767) 0 [Generic.Event] SWRTDMN #2 exited due to system shutdown02/07/20-14:37:04:917 (765) 0 [Generic.Event] SWRTDMN #3 exited due to system shutdown02/07/20-14:37:04:917 (768) 0 [Generic.Event] SWRTDMN #4 exited due to system shutdown02/07/20-14:37:04:917 (766) 0 [Generic.Event] SWRTDMN #5 exited due to system shutdown02/07/20-14:37:04:917 (770) 0 [Generic.Event] SWRTDMN #6 exited due to system shutdown02/07/20-14:37:04:917 (769) 0 [Generic.Event] SWRTDMN #7 exited due to system shutdown02/07/20-14:37:05:420 (761) 0 [Generic.Event] No blocks pending in WIJ file02/07/20-14:37:05:420 (761) 0 [Generic.Event] WRTDMN exited due to system shutdown02/07/20-14:37:05:519 (760) 0 [Generic.Event] CONTROL exited due to system shutdown02/07/20-14:37:06:619 (799) 0 [Utility.Event] Shutdown complete thank you for suggestion where else to search for the source of issue.. I admit I may have something wrong with my docker configuration script as standard kits work just fine. Dan Hi Dan. Sometimes it happens because you are out of resources in docker desktop. Different options of docker prune could help. E.g. docker system prune -f Read more in @Dmitry.Maslennikov article. Unfortunately, that did not help. I'll investigate further. it turned out to be access privileges issue with license file, what a silly mistake of mine. Anyway, thank you Evgeny for pointing me to some useful info, anyway!
Article
Peter Steiwer · Feb 25, 2020

InterSystems IRIS Business Intelligence Tips & Tricks: Preview Mode

Preview Mode was added to InterSystems IRIS Business Intelligence to give designers a quick view of what their resulting Pivot Table will look like without needing to wait for the results to fully execute. This can be beneficial when designing pivot tables because if you are dragging and dropping elements to see how they look/work in your pivot table and seeing if they have the desired data. Since you are exploring and designing, you don't necessarily care about the results at the moment, but you would still like to see how your table looks with the changes you have made. I previously wrote "DeepSee Tips & Tricks: Auto-execute" which can also be beneficial while designing Pivot Tables. However, with Auto-execute, you see no preview after dragging and dropping elements. It is more geared towards someone who knows exactly what their end result will be, someone who wants to prevent the intermediate executions while dragging and dropping elements. Preview Mode is more for exploring what the data looks like and how it can work in the Pivot Table. At any point, you can simply turn Preview Mode off by using the checkbox at the top of Analyzer. You can also click the "Show All" button towards the bottom of Analyzer to see the full results of the current pivot. Adding new elements will continue to execute in Preview Mode. The Documentation also has a brief explanation about Preview Mode.
Announcement
Anastasia Dyubaylo · Feb 7, 2020

New Video: Supporting All Tools for Development in InterSystems IRIS

Hi Community, Please welcome the new video on InterSystems Developers YouTube, recorded by @Stefan.Wittmann: ⏯ Supporting All Tools for Development in InterSystems IRIS InterSystems Product Manager @Stefan.Wittmann talks about InterSystems IRIS Data Platform support for all tools for development. Try InterSystems IRIS: https://www.intersystems.com/try Stay tuned! 👍🏼
Announcement
Steven LeBlanc · Feb 19, 2020

InterSystems IRIS on Arm-Based AWS Graviton2 Processors

AWS launched their first generation of Amazon EC2 A1 instances last year, powered by Arm-based AWS Graviton processors. At AWS re:Invent 2019, Amazon announced the second-generation AWS Graviton2 processors and associated Amazon EC2 M6g instance type, boasting up to 40% better price performance over current generation Intel Xeon based M5 instances. The AWS Graviton2-based M6g instances are currently in preview, and InterSystems jumped on the opportunity to measure their performance with the InterSystems IRIS Data Platform. InterSystems is excited to announce that we’ve seen truly impressive results, and we plan to support Arm-based Amazon EC2 instances powered by AWS Graviton2 processors in 2020! We tested two different workloads, representing common use-cases across the InterSystems IRIS customer base. The first workload is pure data ingestion for a financial application based on InterSystems IRIS Data Platform. The second is a healthcare interoperability workload, based on InterSystems IRIS for Health. We compared performance of Amazon EC2 M6g vs. M5 on each workload. Workload #1: Data Ingestion Throughput on InterSystems IRIS Data Platform We tested identical workloads to simulate NYSE data processing (Order/Fill) on InterSystems IRIS running on a two-node sharded cluster. The benchmark compared performance between m5.2xlarge and AWS Graviton2 based m6g.2xlarge Amazon EC2 instances, each with 8 vCPU’s and 32 GB RAM. The only configuration differences were the processor and AMI operating system image. The compared configurations had the same EBS volumes, iops, VPC configuration, and IRIS parameters such as global buffers. In both cases, we used pre-released versions of InterSystems IRIS - IRIS-2020.1.0L.188.0-lnxrharm64 and IRIS-2020.1.0L.188.0-lnxrh64. The m5.2xlarge system was able to process on average 98 thousand records per second, and the m6g.2xlarge showed close to 120 thousand records/second. That’s over 20% performance improvement on the same number of vCPUs! Workload #2: Healthcare Interoperability Throughput on InterSystems IRIS for Health We tested identical workloads to simulate HL7 message ingestion, routing, and transformation on an InterSystems IRIS for Health Interoperability production. The benchmark compared an m5.2xlarge and an m6g.2xlarge (both with 8 vCPU’s, and 32 GB RAM), again with the exact same configuration aside from their processors, tested on pre-released versions of InterSystems IRIS (2020.1). We’ve also included the same test run against the first-generation AWS Graviton based A1 instance types to show the quantum leap in performance provided by AWS Graviton2. Here are the results: The left side axis is our primary measure of performance for this workload, which is messages per second processed by the application. The x-axis represents the increasing volume thrown at the application by the benchmark driver. As we move from left to right, we increase the applied workload, first by increasing the number of inbound interfaces up to 16, then holding that steady while increasing the driver burst rate. The columns represent CPU utilization measured on the right-side axis, where as we near 100% CPU utilization, we can see the maximum capability of each instance type. As you can see, the AWS Graviton2 based M6g instances scale linearly, and clearly outperform the M5 instances at high workloads. The M6g instances maintain lower CPU utilization for the same workload, and continue scaling after the M5 instances reach their maximum utilization. The M6g instances ultimately performed ~28% better in messages throughput compared to the same sized M5 instances. This is an impressive win for AWS Graviton2 processors! Price Performance: In addition to the clear performance gains we see comparing same-sized AWS Graviton2 based M6g and M5 instances, there is further benefit when we consider instance pricing where the Amazon EC2 M6g instances are 20% lower cost compared to the current generation Amazon EC2 M5 instances: m5.2xlarge On-Demand: $0.384 per hour m6g.2xlarge On-Demand: $0.308 per hour In Conclusion: InterSystems strives to provide customers with platform freedom of choice. We at InterSystems are very excited to see the performance gains and cost savings that AWS Graviton2 processors will provide to InterSystems IRIS customers. We anticipate that these combined benefits will drive significant adoption of Arm-based platforms among IRIS customers, and we look forward to providing support in 2020! Want to Learn More? https://aws.amazon.com/ec2/graviton/ https://aws.amazon.com/ec2/instance-types/m6/ https://www.intersystems.com/products/intersystems-iris/ It's great news, but when it will be available for preview. Congrats! Can we expect publishing your code aimed "...to simulate NYSE data processing (Order/Fill)..." as an Open Exchange App? Hi Dmitriy, Support for ARM64 architectures will initially be limited to Ubuntu-based containers only. I hope to have a preview image of InterSystems IRIS 2020.1 for ARM64 published in the AWS marketplace this week. This should run on the AWS Graviton based A1 instances now, and the M6g instances once they are generally available. Thanks, Steve Sounds good. How about to run it on Raspberry PI, is it already a time, to order of some (even now, when it has been recently updated and got a lower price)? As of this release, it is only to be supported on Amazon EC2. Once there is a Community Edition image generally available... well I can't say it's supported on a Raspberry Pi but who am I to stop a tinkerer from tinkering...have fun! :-) @Dmitry.Maslennikov docker pull store/intersystems/iris-community-arm64:2020.2.0.211.0 What OS is it running? RHEL for ARM or CentOS for ARM? All of InterSystems' container releases are built on Ubuntu (See: https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ISP_technologies#ISP_platforms_container). Currently Arm64 support is limited to container releases, but we expect to support full kit installs for Ubuntu and RHEL for Arm architectures in the near future. Thx, Steven! @Lu.Wang @Peng.Qiao @Hao.Ma pls keep an eye on this.
Announcement
Jeff Fried · Apr 15, 2020

InterSystems IRIS and IRIS for Health 2020.2 previews are published

Preview releases are now available for the 2020.2 version of InterSystems IRIS, IRIS for Health, and IRIS Studio! The build number for these releases is 2020.2.0.196.0. Container images, components, and evaluation license keys are available via the WRC's preview download site. Community Edition containers can also be pulled from the Docker store using the following commands: docker pull store/intersystems/iris-community:2020.2.0.196.0 docker pull store/intersystems/irishealth-community:2020.2.0.196.0 InterSystems IRIS Data Platform 2020.2 adds support for TLS 1.3, which provides enhanced security and better performance. It also includes a variety of efficiency improvements and minor enhancements. InterSystems IRIS for Health 2020.2 includes all of the enhancements of InterSystems IRIS. In addition, this release includes bi-directional data transformations between FHIR R4 and SDA, support for the IHE RMU profile, and other minor enhancements. These are detailed in the documentation: InterSystems IRIS 2020.2 documentation and release notes IRIS for Health 2020.2 documentation and release notes InterSystems IRIS Studio 2020.2 is a standalone development image supported on Microsoft Windows. It works with InterSystems IRIS and IRIS for Health version 2020.2 and below, as well as with Caché and Ensemble. As this is a CD release, it is only available in OCI (Open Container Initiative) a.k.a. Docker container format. Container images are available for OCI compliant run-time engines for Linux x86-64 and Linux ARM64, as detailed in the Supported Platforms document. The preview builds have been updated to 204: docker pull store/intersystems/iris-community:2020.2.0.204.0 docker pull store/intersystems/irishealth-community:2020.2.0.204.0
Question
Chip Gore · Apr 15, 2020

InterSystems IRIS Business Intelligence - Limiting the source data for a cube

I'm looking for a means to dynamically specify and/or limit the data from the source that goes into a cube at build time. I have a single data class that defines my source, and as the data within this table/collection grows/changes over time, I would like to be able to control which records actually make it into the indexed cube, but I'm having a hard time (short of defining a stored procedure to use instead of the extent query) for populating my cube indexes. I found that creating a "Data Container" by extending the %DeepSee.DataConnector class allowed me to make an SQL based "source" where I could then create the dynamic filtering I wanted within the SQL of the container, and the balance of the IRIS Business Intelligence machinery would work just fine. There are two preferred ways to limit facts that go into cube. A) Build restriction option in cube. Change of build restriction requires recompilation of cube. Though you can call stored procedure there. B) %OnProcessFact callback in the cube class. For details please see "Restricting the Records Used in the Cube" in the documentation [1] Disadvantage of using data connectors is that cube synchronization is not possible for cubes based on them: [2]. [1] https://docs.intersystems.com/iris20201/csp/docbook/Doc.View.cls?KEY=D2MODADV_ch_advanced#D2MODADV_advanced_restricting_records [2] https://docs.intersystems.com/iris20201/csp/docbook/Doc.View.cls?KEY=D2IMP_ch_current#D2IMP_current_overview_cannot_use_dstime