Search

Clear filter
Article
Tomohiro Iwamoto · Mar 15, 2021

InterSystems IRIS Deployment Guide - AWS CloudFormation Template - Windows Edition

## Purpose Most CloudFormation articles are Linux-based (no wonder), but there seems to be a demand for automation for Windows as well. Based on this [original article by Anton](https://community.intersystems.com/node/473846 ), I implemented an example of deploying a mirror cluster to Windows servers using CloudFormation.I also added a simple walk through. The complete source code can be found [here](https://github.com/IRISMeister/AWSIRISDeployment). Update: 2021 March 1 I added a way to connect to Windows shell by public key authentication via a bastion host as a one-liner. ## Prerequisites and requirements [The same](https://community.intersystems.com/node/473846/%C2%A0using-cloudformation-template#_Toc47601905) applies to this article. Both binary and license key in your S3 bucket must be for Windows, though. ```bash $ aws s3 cp IRIS-2020.1.0.215.0-win_x64.exe s3://$BUCKET ``` ## Differences from the original When I changed the deployment destination to Windows, I made some modifications while keeping in mind to maintain compatibility with the Linux version. - Removed default values in YAML files - You have to provide default values that suit your environment. - Added two new YAML files for Windows - based on MirrorNode.yaml → MirrorNode_Windows.yaml - based on MirrorCluster.yaml → MirrorCluster_Windows.yaml - Created a new parameter LatestAmiIdForIRISParameter. This is used to choose which Windows edition (Japanese, English etc. Should work with any language edition) to use. - Separated Arbiter security group - Added SecurityGroupIngress (port: 3389) for RDP access - Added listener port: 52773 to external load balancer. Added port:52773 as its target group. - Normally, you should setup a separate web server for http access, but I'm using built-in Apache server. - Added an internal load balancer. Registered listener port:52773. Added port:52773 as its target group. - This is for communications within the same VPC. To enable access to a primary member when communication module is not mirror aware (unlike Web Gateway and ECP app server). Simple Http client for example. https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-create-internal-load-balancer.html - Added the following to the CloudFormation output items - Added HTTPEndpoint. This is the URL when you access the management portal via the external load balancer. - Added IntHTTPEndpoint. This is the URL when you access the management portal via the internal load balancer. - Added Node01ViaBastionAlt and Node02ViaBastionAlt. To workaround annoying "posix_spawn: No such file or directory" error which happens only in Windows version of the OpenSSH client when executing SSH -J. Providing a command with the same effect for convenience. - Fixed the SE.ShardInstaller class - Added the second argument (database file location) to CreateMirroredDB(), and modified its logic accordingly. - Restored the commented out parts of CreateMirrorSet() and JoinAsFailover() When running ##class(SYS.Mirror)CreateMirrorSet() and JoinAsFailover() on Windows, the default ECP Address ($system.INetInfo.LocalHostName()) became Windows host name such as "EC2AMAZ-F1UF3QM". JoinMirrorAsFailoverMember() failed because this host name cannot be resolved by DNS from other hosts. So I restored the following part: ``` set hostName=$system.INetInfo.HostNameToAddr($system.INetInfo.LocalHostName()) set mirror("ECPAddress") = hostName ``` ## Customization options PowerShell script files, etc., are created using MirrorNode_Windows.yaml. Please change the following parts to suit your environment and purpose. - Localization of Windows environment (timezone, firewall settings) - c:\cfn\scripts\Setup-config.ps1 timezone is set to "Tokyo Standard Time". ***Note: Windows firewall is disabled !*** - IRIS kit name - c:\cfn\scripts\Install-IRIS.ps1 $DISTR="IRIS-2020.1.0.215.0-win_x64" - Drive creation, assignment - Resources section ``` Resources: NodeInstance: Properties: BlockDeviceMappings: ``` - c:\cfn\scripts\drives.diskpart.txt - IRIS installation destination, etc. - c:\cfn\scripts\Install-IRIS.ps1 ``` $irisdir="h:\InterSystems\IRIS" $irissvcname="IRIS_h-_intersystems_iris" $irisdbdir="I:\iris\db\" $irisjrndir="J:\iris\jrnl\pri" $irisjrnaltdir="K:\iris\jrnl\alt" ``` This PowerShell script file, when combined with /temp/envs.ps1 created at runtime, functions as an unattended installation script for IRIS. - Software to pre-install - c:\cfn\scripts\Install-choco-packages.ps1 AWS CLI is required to use S3. I installed Notepad++ and Google Chrome additionally for convenience. ## Misc ### 1. Load balancer health check value Default values are used for load balancer health checks.Uncomment the following in MirrorCluster_Windows.yaml and adjust to the appropriate values. ``` #HealthCheckTimeoutSeconds: 10 #HealthCheckIntervalSeconds: 10 #UnhealthyThresholdCount: 3 ``` ### 2. Deploying standalone IRIS If you specify MirrorNode_Windows.yaml when creating the stack, you can start IRIS in a standalone configuration.In this case, select the public subnet as the subnet to deploy. ### 3. SSH to Windows If you install OpenSSH on the IRIS operating host, you can SSH to the IRIS host via the bastion host.However, the effectiveness is limited compared to the Linux version, as the commands which can be executed with the CLI on the Windows version of IRIS are somehow restricted. Execute this on the IRIS host: ```powershell PS C:\Users\Administrator> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 PS C:\Users\Administrator> Start-Service sshd ``` When accessing from the Windows 10, I used Git Bash to avoid "posix_spawn: No such file or directory" which is unique to the Windows version of the OpenSSH client. ```bash user@DESKTOP-XXXX MINGW64 ~ ssh -oProxyCommand="ssh -i .ssh/aws.pem -W %h:%p ec2-user@54.95.171.248" Administrator@10.0.0.62 Administrator@10.0.0.62's password: the password obtained via RDP connection ``` It may says, load pubkey ".ssh/aws.pem": invalid format, but you can ignore it. If you copy the .ssh/authorized_keys (public key) from the bastion host to Windows servers, you can use public key authentication with a one-liner: ```bash user@DESKTOP-XXXX MINGW64 ~ ssh -i .ssh/aws.pem -oProxyCommand="ssh -i .ssh/aws.pem -W %h:%p ec2-user@54.95.171.248" Administrator@10.0.0.62 ``` > Windows Admin group user requires special settings.I learned how to do that from [here](https://www.concurrency.com/blog/may-2019/key-based-authentication-for-openssh-on-windows). ### 4. If a Python error appears in cfg-init.log It seems that the following error may appear in cfn-init.log: ``` 2021-02-12 02:50:32,957 [ERROR] -----------------------BUILD FAILED!------------------------ 2021-02-12 02:50:32,957 [ERROR] Unhandled exception during build: 'utf8' codec can't decode byte 0x83 in position 8: invalid start byte ``` The following instructions have been added to Install-IRIS.ps1 with the hope that it can be eluded: ``` [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 ``` ## Example walk through This is an execution example. I have prepared the following subnets for IRIS hosts and arbiter host. - Public subnet ![image](/sites/default/files/inline/images/cfwindows_pub_subnet.png) - Private subnet ![image](/sites/default/files/inline/images/cfwindows_subnet.png) - Route table / route ![image](/sites/default/files/inline/images/cfwindows_route_0.png) - Route table / subnet association ![image](/sites/default/files/inline/images/cfwindows_route-assoc_0.png) ### Editing the YAML file Clone the contents of the [Git Repository](https://github.com/IRISMeister/AWSIRISDeployment) locally and make the necessary changes. - Mandatory changes Change TemplateURL values (there are four of them) in MirrorCluster_Windows.yaml to match your S3 bucket name. ``` TemplateURL: https://my-cf-templates.s3-ap-northeast-1.amazonaws.com/MirrorNode_Windows.yaml ``` If you perform deployment repeatedly, it is convenient to set your own default value as follows: ``` BastionSubnetIdParameter: Default: 'subnet-0f7c4xxxxxxxxxxxx,subnet-05b42xxxxxxxxxxxx' InstanceSubnetIdParameter: Default: 'subnet-0180bxxxxxxxxxxxx,subnet-03272xxxxxxxxxxxx,subnet-08e8fxxxxxxxxxxxx' S3BucketNameParameter: Default: my-cf-templates ``` *Note:* - Since the load balancer is set, be sure to specify two subnets belonging to different AZs in BastionSubnetIdParameter. - Since the load balancer is set, be sure to specify three subnets belonging to different AZs in InstanceSubnetIdParameter.The first two are for IRIS hosts, and the last one is for an Arbiter host. - The host on which IRIS is installed requires access to the internet during the installation process. To be more specific, the AWS CLI will be installed for S3 access and chocolatey is used for that. If you have not setup a NAT gateway for a private subnet, as a temporary workaround, you may use a public subnet for InstanceSubnetIdParameter.(the bastion host will become meaningless...though) When you finished your edits, copy them to your S3 bucket. ### S3 bucket preparation The contents of your bucket should look like this: ![image](/sites/default/files/inline/images/cfwindows_s3_0.png) Remember URL of MirrorCluster_Windows.yaml such as https://my-cf-templates.s3-ap-northeast-1.amazonaws.com/MirrorCluster_Windows.yaml . You will need it later. ### Running CloudFormation from aws console 1. Create stack "with new resources" The operation flow is the same as [Deploying ICM on AWS using CloudFormation](https://jp.community.intersystems.com/node/480741). (Sorry. Japanese article only) Select "Amazon S3 URL" as the template source and specify the URL you recorded earlier. Set the parameters on the Specify Stack Details screen and push Next button. | Parameter | Setting value example | | -------------------------------------------------------- | -------------------------------------------------------------------------- | | Password for SuperUser/_SYSTEM user | SYS1 | | S3 bucket with IRIS binaries | my-cf-templates | | Which VPC should this be deployed to? | vpc-0e538xxxxxxxxxxxx | | Subnets to deploy Bastion host (public) | subnet-0f7c4xxxxxxxxxxxx,subnet-05b42xxxxxxxxxxxx | | Subnets to deploy IRIS (private subnet recommended) | subnet-0180bxxxxxxxxxxxx,subnet-03272xxxxxxxxxxxx,subnet-08e8fxxxxxxxxxxxx | | Allowed CIDR block for external access to the instances | 0.0.0.0/0 | | EC2 instance type for IRIS nodes | m5.large | | SSH Key Pair name to connect to EC2 instances | aws | | IAM Role for EC2 instances | S3FullAccessForEC2 | | Which language version of Windows should be deployed to? | /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-Base | There are no particular settings on the "Configure Stack Options" screen. Push next button. > If deployment failed, disabling the Stack creation options "Rollback on failure" will leave the created environments, making it easier to analyze the problem later. (Don't forget to delete it manually when you no longer need them). There are no particular settings on the "Review" screen. You just review them. Push the "Create Stack" button, and then, the creation of multiple nested stacks will start. 2. Check the output contents. Wait for the stack status to become CREATE_COMPLETE (it took about 15 minutes in my case). Display the output.You can disable line wrapping with the gear icon. | Key | Value | Explanation | | ------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | BastionPublicIP | 13.115.71.170 | Basion Host public IP | | HTTPEndpoint | http://iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com:52773/csp/sys/%25CSP.Portal.Home.zen | SMP Endpoint as an example for HTTP access | | IntHTTPEndpoint | http://iwa-Internal-NLB-ae03aa0055ea57e5.elb.ap-northeast-1.amazonaws.com:52773/csp/sys/%25CSP.Portal.Home.zen | Endpoint for internal HTTP access | | JDBCEndpoint | jdbc:IRIS://iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com:51773/DATA | JDBC Connection String | | Node01PrivateIP | 10.0.10.43 | Node 01 Private IP | | Node01ViaBastion | ssh -J ec2-user@13.115.71.170 ec2-user@10.0.10.43 -L 52773:10.0.10.43:52773 | Node 01 Connection via Bastion | | Node01ViaBastionAlt | ssh -i .ssh\aws.pem -L 52773:10.0.10.43:52773 ec2-user@13.115.71.170 | Node 01 Connection via Bastion, Alternative way. | | Node02PrivateIP | 10.0.11.219 | Node 02 Private IP | | Node02ViaBastion | ssh -J ec2-user@13.115.71.170 ec2-user@10.0.11.219 -L 52773:10.0.11.219:52773 | Node 02 Connection via Bastion | | Node02ViaBastionAlt | ssh -i .ssh\aws.pem -L 52773:10.0.11.219:52773 ec2-user@13.115.71.170 | Node 02 Connection via Bastion, Alternative way. | Click HTTPEndpoint and verify that the Management Portal is displayed. > It will take some time for the load balancer to finish its health checks. You may have to wait a moment. Log in with the user name "SuperUser" and the password you provided in the parameters. 3. Checking the mirror status Click the "Show Mirror Monitor" link on the right edge of the home screen of the management portal.If it is successful, it is displayed as shown in the screenshot below. ![image](/sites/default/files/inline/images/cfwindows_mirror_0.png) 4. Check if operating correctly - Check the external load balancer Execute the following command from your client (in this case, Windows 10) and check that HTTP/ 1.1 200 OK is returned.The host name in the URL is the host name of the HTTPEndpoint value used earlier. ``` C:\Users\iwamoto>curl http://iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com:52773/csp/mirror_status.cxw -v * Trying 3.114.52.16... * TCP_NODELAY set * Connected to iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com (3.114.52.16) port 52773 (#0) > GET /csp/mirror_status.cxw HTTP/1.1 > Host: iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com:52773 > User-Agent: curl/7.55.1 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: text/plain < Connection: close < Content-Length: 7 < SUCCESS* Closing connection 0 ``` - Check the internal load balancer SSH to the bastion host, execute the following command, and check that HTTP/1.1 200 OK is returned.The host name in the URL is the host name of the IntHTTPEndpoint value used earlier. ``` [ec2-user@ip-172-31-37-178 ~]$ curl http://iwa-Internal-NLB-ae03aa0055ea57e5.elb.ap-northeast-1.amazonaws.com:52773/csp/mirror_status.cxw -v ・ ・ < HTTP/1.1 200 OK ・ ・ ``` - Stop the Mirror primary member Make an RDP connection to the primary member IRIS host (it should be Node01) and stop IRIS. If Node01 is created in a private subnet (as recommended), an RDP connection cannot be made directly, so you need to execute the following command on client to transfer from localhost.The actual command can be obtained by changing the port of Node01ViaBastionAlt in the output from 52773 to 3389. ``` C:\Users\iwamoto>ssh -i .ssh\aws.pem -L 3389:10.0.10.43:3389 ec2-user@13.115.71.170 ``` Also, the Windows password must be obtained using the RDP connection method from the AWS console. Then connect to localhost:3389 with RDP and log in as Administrator by using the password you obtained. You will see the following error until the external load balancer recognizes that the old backup member has been promoted to primary: ``` curl: (7) Failed to connect to http://iwa-NLB-4b1e6859b5a84ec3.elb.ap-northeast-1.amazonaws.com port 52773: Connection refused ``` It will take some time (depending on the load balancer health check values, I mentioned earlier). After that, check that both the external and internal load balancer responses are SUCCESS (HTTP / 1.1 200 OK). ## Referenced sites I used the following sites as a reference: - https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-drive-letters-windows/ - https://www.concurrency.com/blog/may-2019/key-based-authentication-for-openssh-on-windows - https://dev.classmethod.jp/articles/about-windows-cfn-init-non-ascii-encoding-error/ - https://dev.classmethod.jp/articles/aws-cloudformation-setup-windows-server-2016/
Article
Michael Braam · Jun 2, 2021

Get the most out of InterSystems SAM - implement your own alert handler

InterSystems SAM is a great tool to monitor your InterSystems IRIS and InterSystems IRIS For Health clusters on prem or in a cloud environment. This article describes how you can implement a customized alert handler. This is currently an undocumented and most likely an unknown feature of InterSystems SAM. With future releases it will be probably made easier to leverage this useful concept. In the interest of shortness, I will only mention InterSystems IRIS in this article, but the following applies to InterSystems IRIS and InterSystems IRIS For Health. InterSystems SAM is a cluster of five containers and each of these containers plays a specific role. These are: Grafana to build dashboards to visualize your selected system metrics, i.e. metrics which InterSystems IRIS provides out of the box, and your own (application-)metrics. Prometheus, a cloud native monitoring tool which collects time series data from the target instances Nginx as the web server the Alertmanager which collects InterSystems IRIS alerts and Prometheus alerts and the SAM Manager which is the heart of SAM. This is an InterSystems IRIS instance in which all the metric data is stored InterSystems SAM triggers two different classes of alerts. InterSystems IRIS alerts which are defined by InterSystems IRIS User-defined alerts. These are alerts which you can specify in so-called alert rules in the SAM portal. For details how to specify alert-rules see the documentation (https://docs.intersystems.com/sam/csp/docbook/Doc.View.cls?KEY=ASAM#ASAM_edit_alert) Alerts that are triggered are displayed in the SAM portal but what if you wish to notify someone who is responsible for the monitored InterSystems IRIS cluster via different communication channels like e-Mail or SMS etc. so that he can take care of the cluster and fix the problem. That's where a customized alert handler comes into play. This article describes the neccessary steps to implement your own alert handler for your SAM Manager instance. In this example the alert handler will send an e-Mail to a preconfigured e-mail address along with the alert information. The key here is that there is a "hidden" abstract class %SAM.AbstractAlertsHandler in the SAM Manager instance. See the class refernce below: You have to derive your own alert handler from this abstract class first and then implement the classmethod HandleAlerts. The method receives a JSON array with the alert details. So in my simple example the alert handler is a class SAM.AlertHandler which subclasses %SAM.AbstractAlertsHandler. The implementation of the HandleAlerts() method is simple. See the full code below: It delegates the work to the method SendAlert. It assumes that you have an e-mail user account which you can use for the alerts. The e-mail password is stored in the database, but the password is encrypted using the data-element encryption capability of InterSystems IRIS. Therefore you have to create an encrytion key in the SAM Manager and this key must be loaded. Otherwise the alert handler will not be able to send the e-Mail. My e-mail provider requires SSL/TLS to send the e-mail. I have defined an SSL-configuration ForMail in the SAM Manager instance. The rest of the code is straight forward. See the code below: It simply copies the received JSON array with the alert details to the e-mail body and sends it to the recipients. There is one remaining issue. You cannot directly create and edit the alert handler class in your SAM Manager instance. The default configuration does not allow connections from your IDE (IRIS studio or VSCode) to the SAM manager instance. To resolve this I have created and edited the alert handler class in my InterSystems IRIS instance and have imported it into the SAM namespace of my SAM Manager instance. Another option would be to modify the docker-compose file to start InterSystems SAM, but I didn't want to touch this. Once you have successfully loaded you alert handler class into your InterSystems SAM Manager instance the HandleAlerts method will be executed for every alert that is triggered in your monitored InterSystems IRIS cluster. Enjoy! 💡 This article is considered as InterSystems Data Platform Best Practice. Excellent work @Michael.Braam, love all the details! Thanks!
Announcement
Ben Spead · Jul 7, 2021

Try out InterSystems FHIR Transformation Service - we want your feedback!

Hello Developers! Have you ever had to convert HL7v2 messages to FHIR (Fast Healthcare Interoperability Resources) and found the process complicated and confusing? InterSystems is rolling out a new cloud based SaaS offering called InterSystems FHIR Transformation Service, which makes the process easy. We are excited to announce an Early Access Preview Program for our new offering, and we would love to have you kick the tires and let us know what you think! All you need is a free AWS account, with an S3 bucket to drop in your HL7v2 messages, and another S3 bucket to get your FHIR output. <tl;dr;> Check out this simple demo of the functionality here: A simple step-by-step guide on how you can sign up for a free AWS account and a free InterSystems Cloud Portal account and exercise the powerful functionality of the transformation services can be found on the InterSystems Learning Site. Full documentation is available within InterSystems Documentation. We are going to be formally launching this offering later in July, and when the preview is over you can still take advantage of getting your first one million transformations for free! </tl;dr;> More details on this new offer from InterSystems: Introducing InterSystems FHIR Transformation Service. The health information industry has embraced FHIR®, or Fast Healthcare Interoperability Resources, as its newest data standard for exchanging healthcare data. The on-demand InterSystems FHIR Transformation Service enables healthcare providers, payers, and pharmaceutical companies to convert their existing data formats to FHIR standards and extract the most value from their data. InterSystems is a leader in healthcare interoperability, implementing not only the latest FHIR standard, but all major healthcare standards including HL7v2, X12, CDA, C-CDA, and DICOM. InterSystems FHIR Transformation Service was designed to make converting messages from these earlier standards into FHIR R4 simple, with the initial release supporting the transformation of HL7 v2 messages to FHIR R4. The FHIR messages can then be sent to an AWS S3 bucket or Amazon HealthLake (Preview), with other FHIR repository options being added in the future. HealthShare Message Transformation Services makes transforming HL7v2 messages into FHIR simple. You don't need to worry about transformation logic, so you can shift your focus to building great healthcare applications, leaving the complexities of message transformations to InterSystems. The service provides: Easy provisioning and launching on AWS Checking your inbound S3 bucket for HL7v2 messages Validating of HL7 contents Message conversion to FHIR R4 Routing converted messages to your outbound S3 bucket, the InterSystems FHIR Server (Preview) service, or an Amazon HealthLake (Preview) repository Monitoring the status and statistics of your transformation pipelines Additionally, the service is built on the AWS infrastructure, so it is ISO 27001:2013 and HITRUST certified to support HIPAA. InterSystems manages the operations, monitoring, and backups of the service. Best of all, once this offering is launched commercially, you will get the first one million transformations for free and after that you will pay for only what you use with a very low cost per transformed message. There will be no long-term contracts for using this service - cancel any time. We are very interested in your feedback. Please leave comments on this article with feedback, or reach out to the team directly at HMTS@InterSystems.com. UPDATE: July 15, 2021 InterSystems is very pleased to announce that as of July 15th, HeathShare Message Transformation Services is now available as a commercial offering in the AWS Marketplace: https://aws.amazon.com/marketplace/pp/prodview-q7ryewpz75cq2 You can subscribe from your AWS account and new subscriptions will receive the 1 million free transformations (try before you buy). Preview accounts created under the Early Access Preview Program will continue to work for a month after they have been created. We are still VERY interested in seeing people try this service and provide us with specific feedback on how it might bring value to them and their organization. Please feel free to start up discussions on this thread or reach out to HMTS@InterSystems.com. HL7 ® and FHIR ® are the registered trademarks of Health Level Seven International and the use of these trademarks does not constitute an endorsement by HL7. Use of the FHIR trademark does not constitute endorsement of InterSystems FHIR Transformation Service or InterSystems FHIR Transformation Service by HL7. Thanks @Ben Spead Converting HL7v2 to HL7FHIR is always a challenging task. By using HealthShare Message Transformation Services in cloud based SaaS I found it I can achieve it easily.Once again thanks for the step by step guide. Regards Highly interesting, definitely warrants a more in depth look for future applications. Thanks @Raymond.Rebbeck - we would love for you to give it a try and let us know what you think! We're excited to announce that the offering went live on AWS Marketplace on July 15th: https://aws.amazon.com/marketplace/pp/prodview-q7ryewpz75cq2 I have updated the article to reflect this. We are still looking for more feedback so please create your account and give it a try for free when you have time! Hi Ben I would be very happy to participate. I have a number of Patient HL7 Interfaces and a lot of LabTrak Interfaces as well so I will feed a little bit of hands on help to get my IRIS for Health 2021Python Foundation completed and configured and then I add an operation into any of the interfaces to send a steady stream of HL7 messages into the FHIR Server.
Question
reach.gr G · Jul 11, 2021

InterSystems Track Relationship between Menus, Workflow, Workflow Items, Questionaire etc

Hi InterSystems Architects, Please may I know the relationship between 1. Menus, Workflows, Workflow Items, Components, Code Tables, etc Detailed relationship diagrams, how each element in each of the above are related to another. 2. When I extracted the data. I see ID number, but they aren't unique or related. I wanted to build a relationship between them myself in the absence of documents but I am missing the critical unique primary key of each and how they are referred in another table. Your help is appreciated and let me know if you need any specific (Non Confidential) information to get help. This is my Understanding: From objects - Classes (components) are designed - For example: web.PAPerson is the class and I wanted to search for it in the Element Reference Map, but I could not find. So I need more details here and understanding. 2. Based on design, Elements are grouped to form Components 3. Based on design Components are grouped in the Workflow Items ( Again I need explanation here) and they may also be derived from code tables. 4. Based on Design Work is set up deriving from Components ? 5. Based on user flow, series of Work flow Items are grouped to form Workflow Managers 6. Based on Design workflow managers are linked to Menus Mangers. Menu Headers etc Please can you help me fill in the above gaps, corrections and relevant documents, where I can trace from fundamental non divisible element to user form that can be configurable. Many Thanks Hi Intersystems, I am still waiting for the answer and knowledge so that I can understand your application better. This shouldn't take this long, I was expecting an answer within 24 hours so that I can continue my learning. You should understand that while InterSystems employees are on the community this is really a public forum and not an "official" support path. Questions are answered by the community at large when they can. For people in the forum to help more information is needed. You indicated you are working with HealthShare however this is really a family of solutions. Which specific product are you referring to? What part of that product are you trying understand better? The more specific you can be the easier it is for the community to help. If you have an immediate need I would suggest that you contact the Worldwide Response Center (referred to as the WRC) for immediate support. Here is the contact information: Phone:+1-617-621-0700+44 (0) 844 854 29170800615658 (NZ Toll Free)1800 628 181 (Aus Toll Free) Email:support@intersystems.com Finally, learning services (learning.instersystems.com) and documentation (docs.intersystems.coms) can be of great help. For HealthShare specific areas you do need to be a registered HealthShare user. If you are not work with your organization and the WRC to get that updated.
Announcement
Benjamin De Boe · Apr 8, 2021

InterSystems IRIS and IRIS for Health 2020.4 are now Generally Available (GA)

GA releases are now available for the 2020.4 version of InterSystems IRIS, InterSystems IRIS for Health and InterSystems IRIS Studio. InterSystems IRIS Data Platform 2020.4 makes it even easier to develop, deploy and manage augmented applications and business processes that bridge data and application silos. It has many new capabilities including: Enhancements for application and interface developers, including: Support for Java SE 11 LTS, both when using Oracle OpenJDK and AdoptOpenJDK Support for Connection Pooling for JDBC A new "foreach" action in routing rules for segmented virtual documents Enhancements for database and system administrators, including: ICM now supports deploying System Alerting and Monitoring (SAM) and InterSystems API Manager (IAM) Extensions to our SQL syntax for common administrative tasks Simplified deployment for InterSystems Reports InterSystems IRIS for Health 2020.4 includes all of the enhancements in InterSystems IRIS 2020.4. In addition, this release includes Enhanced FHIR support, including support for FHIR profiles Support for the RMD IHE profile DataGate support in the HL7 Migration Tooling More details on these features can be found in the product documentation: InterSystems IRIS 2020.4 documentation and release notes InterSystems IRIS for Health 2020.4 documentation and release notes As this is a Continuous Delivery (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. Container images for the Enterprise Edition and all corresponding components are available from the InterSystems Container Registry using the following commands: docker pull containers.intersystems.com/intersystems/iris:2020.4.0.547.0 docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.547.0 For a full list of the available images, please refer to the ICR documentation. Container images for the Community Edition can also be pulled from the Docker store using the following commands: docker pull store/intersystems/iris-community:2020.4.0.547.0 docker pull store/intersystems/iris-community-arm64:2020.4.0.547.0 docker pull store/intersystems/irishealth-community:2020.4.0.547.0 docker pull store/intersystems/irishealth-community-arm64:2020.4.0.547.0 Alternatively, tarball versions of all container images are available via the WRC's CD download page. Our corresponding listings on the main cloud marketplaces will be updated in the next few days. InterSystems IRIS Studio 2020.4 is a standalone IDE for use with Microsoft Windows and can be downloaded via the WRC's components download page. It works with InterSystems IRIS and InterSystems IRIS for Health version 2020.4 and below. InterSystems also supports the VSCode-ObjectScript plugin for developing applications for InterSystems IRIS with Visual Studio Code, which is available for Microsoft Windows, Linux and MacOS. Other standalone InterSystems IRIS 2020.4 components, such as the ODBC driver and web gateway, are also available from the WRC's components download page. And we updated the images with ZPM 0.2.14 too: intersystemsdc/iris-community:2020.3.0.221.0-zpm intersystemsdc/iris-community:2020.4.0.547.0-zpm intersystemsdc/iris-ml-community:2020.3.0.302.0-zpm intersystemsdc/irishealth-community:2020.3.0.221.0-zpm intersystemsdc/irishealth-community:2020.4.0.547.0-zpm And to launch IRIS do: docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.4.0.547.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-ml-community:2020.3.0.302.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.4.0.547.0-zpm And for terminal do: docker exec -it my-iris iris session IRIS and to start the control panel: http://localhost:9092/csp/sys/UtilHome.csp To stop and destroy container do: docker stop my-iris
Announcement
Anastasia Dyubaylo · Mar 29, 2023

[Kick-off Webinar] InterSystems IRIS Cloud SQL and IntegratedML Contest

Hey Community, We are glad to invite you to the upcoming kick-off webinar for the InterSystems IRIS Cloud SQL and IntegratedML Contest. In this webinar, we'll present you the arena for the next contest: our new cloud offerings InterSystems IRIS Cloud SQL and InterSystems IRIS Cloud IntegratedML. We'll describe what these SaaS offers are all about and walk you through setting up your account and log on to the web portal, which includes an intuitive user interface to load data, create and train machine learning models, and then evaluate those models on test data. For the contest environment, we have included sample datasets so you can go from account signup to your first SQL query and IntegratedML model in a matter of seconds. Date & Time: Monday, April 3 – 11 am EDT | 5 pm CEST Speakers: 🗣 @Steven.LeBlanc, InterSystems Product Specialist, Cloud Operations🗣 @Thomas.Dyar, InterSystems Product Specialist, Machine Learning🗣 @Benjamin.DeBoe, InterSystems Product Manager🗣 @Dean.Andrews2971, InterSystems Head of Developer Relations 🗣 @Evgeny.Shvarov, InterSystems Developer Ecosystem Manager >> Register here << Hi Devs!Please join the "[Kick-off Webinar] InterSystems IRIS Cloud SQL and IntegratedML Contest" in 20 minutes!➡️ Follow this link - https://us02web.zoom.us/j/9822194974?pwd=bnZBdFhCckZ6c0xOcW5GT1lLdnAvUT09Or join our➡️ YouTube stream: https://youtube.com/live/ZzlK9vc_jO0?feature=share
Announcement
Anastasia Dyubaylo · Nov 18, 2022

[Video] How InterSystems Supports the CMS & ONC Regulations as well as Prior Authorization

Hey Developers, Watch this video to learn how InterSystems has been building out capabilities to support current and future regulations in the US market that can have a significant impact on payers and providers: ⏯ How InterSystems Supports the CMS & ONC Regulations as well as Prior Authorization @ Global Summit 2022 🗣 Presenter: Lynda Rowe, Senior Advisor, Value-Based Markets, InterSystems Visit our InterSystems Developers YouTube channel and subscribe to receive updates!
Announcement
Anastasia Dyubaylo · Apr 25, 2023

Online Meetup with the winners of InterSystems IRIS Cloud SQL and IntegratedML Contest

Hi Community, Let's meet together at the online meetup with the winners of the InterSystems IRIS Cloud SQL and IntegratedML Contest – a great opportunity to have a discussion with the InterSystems Experts team as well as our contestants. Winners' demo included! Date & Time: Thursday, April 27, 12 pm EDT | 6 pm CEST Join us to learn more about winners' applications and to have a talk with our experts. ➡️ REGISTER TODAY See you all at our virtual meetup!
Announcement
Anastasia Dyubaylo · Sep 13, 2022

data2day and InterSystems look forward to welcoming you in Karlsruhe, Germany

Hi Developers, We have another great opportunity for you to join us in Germany for a Conference for Data Scientists, Data Engineers and Data Teams that will be held in Karlsruhe! ⏱ Date: 20 – 21 September 2022 📍Venue: IHK Karlsruhe, Lammstr. 13-17, 76133 Karlsruhe, Germany Our speaker Markus Mechnich will be talking about (Smart) Data Fabrics during the session titled “Putting an end to data silos: making better decisions, pain-free”. He will discuss the challenge of accessing and merging different systems that store data that is rarely homogeneous and/or synchronous enough for a comprehensive evaluation and using it to make sound business decisions. ✅ REGISTER HERE We look forward to welcoming you to Karlsruhe!
Announcement
Larry Finlayson · Nov 16, 2022

Managing InterSystems Servers December 5-9, 2022 - Registration space available

Managing InterSystems Servers December 5-9, 2022 9:00am-5:00pm US-Eastern Time (EST) This five-day course teaches system and database administrators how to install, configure and secure InterSystems server software, configure for high availability and disaster recovery, and monitor the system. Students also learn troubleshooting techniques. This course is applicable to both InterSystems IRIS and Caché. Although the course is mostly platform independent, students can complete the exercises using either Windows or Ubuntu. Self Register Here
Announcement
Fabiano Sanches · May 10, 2023

Starting developer preview #1 for InterSystems IRIS, & IRIS for Health 2023.2

InterSystems announces its first preview, as part of the developer preview program for the 2023.2 release. This release will include InterSystems IRIS and InterSystems IRIS for Health. Highlights Many updates and enhancements have been added in 2023.2 and there are also brand-new capabilities, such as Time-Aware Modeling, enhancements of Foreign Tables, and the ability to use Ready-Only Federated Tables. Some of these features or improvements may not be available in this current developer preview. Another important topic is the removal of the Private Web Server (PWS) from the installers. This feature has been announced since last year and will be removed from InterSystems installers, but they are still in this first preview. See this note in the documentation. --> If you are interested to try the installers without the PWS, please enroll in its EAP using this form, selecting the option "NoPWS". Additional information related to this EAP can be found here. Future preview releases are expected to be updated biweekly and we will add features as they are ready. Please share your feedback through the Developer Community so we can build a better product together. Initial documentation can be found at these links below. They will be updated over the next few weeks until launch is officially announced (General Availability - GA): InterSystems IRIS InterSystems IRIS for Health Availability and Package Information As usual, Continuous Delivery (CD) releases come with classic installation packages for all supported platforms, as well as container images in Docker container format. For a complete list, refer to the Supported Platforms document. Installation packages and preview keys are available from the WRC's preview download site or through the evaluation services website (use the flag "Show Preview Software" to get access to the 2023.2). Container images for both Enterprise and Community Editions of InterSystems IRIS and IRIS for Health and all corresponding components are available from the new InterSystems Container Registry web interface. For additional information about docker commands, please see this post: Announcing the InterSystems Container Registry web user interface. The build number for this developer preview for InterSystems IRIS is 2023.2.0.198.0. For InterSystems IRIS for Health build number is 2023.2.0.200.0. For a full list of the available images, please refer to the ICR documentation. Alternatively, tarball versions of all container images are available via the WRC's preview download site. InterSystems IRIS for Health kits are published and the build number is 2023.2.0.200.0. They are available from the WRC's preview download site and from the InterSystems Container Registry. Time-Aware Modeling, enhancements of Foreign Tables, Ready-Only Federated Tables. Is there any documentation on these features? Hi Herman - Documentation will be released as features become available. As usual, we're adding things every two weeks to these previews. So, stay tuned!
Announcement
John Murray · May 22, 2023

InterSystems Testing Manager - a new VS Code extension for the %UnitTest framework

If you have already built unit tests using the %UnitTest framework, or are thinking about doing so, please take a look at InterSystems Testing Manager. Without leaving VS Code you can now browse your unit tests, run or debug them, and view previous run results. InterSystems Testing Manager works with both of the source code location paradigms supported by the ObjectScript extension. Your unit test classes can either be mastered in VS Code's local filesystem (the 'client-side editing' paradigm) or in a server namespace ('server-side editing'). In both cases the actual test runs occur in a server namespace. Feedback welcome. Don't see it in Open Exchange :) Could you please publish? @Evgeny.Shvarov It's available on the VS Code Marketplace, which is where people would expect to find it. Right, I'm not suggesting to remove it from there. But if you publish on Open Exchange it will let developers from InterSystems ecosystem it will help some developers to notice it. E.g. here on Open Exchange InterSystems can find dev tools and libs that could form their development environment. This is awesome! I've really missed this from working in other programming languages. According to the ReadMe (v0.2.0), this extension is currently considered a "Preview". Is there a product roadmap/timeline of what needs to be done to promote it out of "preview" status? Thanks for the positive response. IMO the main thing needed before the Preview tag gets dropped is feedback from %UnitTest users. One motivation for publishing the Preview is the upcoming Global Summit, which I hope will be a good opportunity for in-person discussion about this extension and others. Find me at the George James Software booth in the Partner Pavilion. Now at https://openexchange.intersystems.com/package/InterSystems-Testing-Manager-for-VS-Code Also welcome are reviews, which can be posted on Marketplace and on Open Exchange. Tried with the project where I have ObjectScript Unittests. I call them manually with IPM and automatically with github workflow. Testing manager is installed, I'm on a class with unit test. Not sure though how it works? @Evgeny.Shvarov I believe the Market place link @John.Murray provided has details of how to run the test (including some GIFs etc.) https://marketplace.visualstudio.com/items?itemName=intersystems-community.testingmanager Since you are working client-side I think you need to set a intersystems.testingManager.client.relativeTestRoot setting to contain the workspace-relative path to the tests folder that's showing at the beginning of the breadcrumb in your screenshot. Please see point 2 of https://github.com/intersystems-community/intersystems-testingmanager#workspace-preparations @Evgeny.Shvarov Did my suggestion help you get started with this extension? Thank you! Hi @John.Murray ! Not sure if I put it in a right place: Says it shouldn't be here Move it outside the `objectscript.conn` object please. Did it: Now it likes it, but still the testing tool doesn't see any tests. Should it be absolute path or relative to the root of repo? Do you mind to send a PR with a working setting to the repo? Please change this to a relative path (no leading slash). Also, there was a bug in how it handled a "docker-compose" type of configuration. Please try this dev build by downloading the zip, extracting the VSIX and dropping it into VS Code's Extensions view. If it works for you I will publish a new version to Marketplace. Now it sees them: But they ask for ^UnitTest to be setup, instructions, etc. Could it work similar as it works in IPM as @Timothy.Leavitt demonstrated? Because with IPM I can run tests all and standalone without any settings at all - it just works. Could the IPM be leveraged if it is presented in the repo/namespace? BTW, this setting worked: "intersystems.testingManager.client.relativeTestRoot": "/tests", Thanks for confirming the fix. I'm publishing 0.2.1 now. Please post enhancement ideas on the repo, for better tracking.
Article
Evgeny Shvarov · Feb 15, 2020

Setting Up Your Own InterSystems ObjectScript Package Manager Registry

Hi Developers! As you know the concept of ObjectScript Package Manager consists of ZPM client - client application for IRIS which helps you to install packages from the registry. And the code which works "on the other side" is ZPM Registry - server which hosts packages and exposes API to submit, list and install it. Now when you install the ZPM client it installs packages from community package registry, which si hosted on pm.community.intersystems.com But what if you want your own registry? E.g. you produce different software packages for your clients and you want to distribute it via private registry? Also, you may want to use your own registry to deploy solutions with different combinations of packages. Is it possible? The answer is YES! You can have it if you deploy ZPM registry on your server with InterSystems IRIS. To make it happen you would need to set up your own registry server. How to do that? ZPM Registry can be installed as a package zpm-registry. So you can install zpm-client first (article, video), or take a docker-image with zpm-client inside and install zpm-registry as a package: USER>zpm zpm: USER>install zpm-registry When zpm-registry is installed it introduces the REST end-point on server:port/registry with a set of REST-API routes. Let’s examine it and let's open the GET requests on community registry as an example. / - root entry shows the version of the registry software. /_ping {"message":"ping"} - entry to check the working status. /_spec - swagger spec entry /packages/-/all - displays all the available packages. /packages/:package - the set of GET entries for package deployment. ZPM client is using it when we ask it to install a particular package. /package - POST entry to publish a new package from the Github repository. This and all other API you can examine e.g. in full documentation online generated with the help of /_spec entry: OK! Let's install and test ZPM-registry on a local machine. 1. Run docker container with IRIS 2019.4 and preinstalled ZPM-client (from developer community repo on docker hub). % docker run --name my-iris -d --publish 52773:52773 intersystemsdc/iris-community:2019.4.0.383.0-zpm f40a06bd81b98097b6cc146cd61a6f8487d2536da1ffaf0dd344c615fe5d2844 % docker exec -it my-iris iris session IRIS Node: f40a06bd81b9, Instance: IRIS USER>zn "%SYS" %SYS>Do ##class(Security.Users).UnExpireUserPasswords("*") %SYS>zn "USER" USER>zpm zpm: USER>install zpm-registry [zpm-registry] Reload START [zpm-registry] Reload SUCCESS [zpm-registry] Module object refreshed. [zpm-registry] Validate START [zpm-registry] Validate SUCCESS [zpm-registry] Compile START [zpm-registry] Compile SUCCESS [zpm-registry] Activate START [zpm-registry] Configure START [zpm-registry] Configure SUCCESS [zpm-registry] Activate SUCCESS zpm: USER> 2. Let’s publish a package in our new privately-launched zpm-registry. To publish a registry you can make a POST request on registry/package end-point and supply the URL of the repository, which contains module.xml in the root. E.g. let's take the repo of objectscript-math application on Open Exchange by @Peter.Steiwer : https://github.com/psteiwer/ObjectScript-Math $ curl -i -X POST -H "Content-Type:application/json" -u user:password -d '{"repository":"https://github.com/psteiwer/ObjectScript-Math"}' 'http://localhost:52773/registry/package' make sure to change the user and password to your credentials. HTTP/1.1 200 OK Date: Sat, 15 Feb 2020 20:48:13 GMT Server: Apache CACHE-CONTROL: no-cache EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT PRAGMA: no-cache CONTENT-LENGTH: 0 Content-Type: application/json; charset=utf-8 As we see, the request returns 200 which means the call is successful and the new package is available in the private registry for installation via ZPM clients. Let’s check the list of packages again: Open in browser http://localhost:52773/registry/packages/-/all: [{"name":"objectscript-math","versions":["0.0.4"]}] Now it shows us that there is one package available. That’s perfect! Next question is how to install packages via ZPM client from an alternative repository. By default when ZPM client is being installed it’s configured to work with public registry pm.community.intersystems.com. This command shows what is the current registry set up: zpm: USER>repo -list registry Source: https://pm.community.intersystems.com Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yes zpm: USER> But this could be altered. The following command changes the registry to your one: zpm: USER>repo -n registry -r -url http://localhost:52773/registry/ -user usernname -pass password Change here username and password to what is setup on your server available for /registry REST API. Let’s check that alternative registry is available: zpm: USER>repo -list registry Source: http://localhost:52773/registry/ Enabled? Yes Available? Yes Use for Snapshots? Yes Use for Prereleases? Yes Username: _SYSTEM Password: <set> zpm: USER> So ZPM client is ready to work with another ZPM registry. So, ZPM registry lets you build your own private registries which could be filled with any collection of packages either from public or from your own. And ZPM client gives you the option to switch between registries and install from public or from any private registries. Also check the article by @Mikhail.Khomenko which describes how to deploy InterSystems IRIS docker-container with ZPM registry in Kubernetes cloud provided by Google Kubernetes Engine. Happy coding and stay tuned! Is there any way to have multiple registries enabled at the same time in ZPM, with a priority so that it looks at them in order to find packages. That way you can use public packages from the community repo without having to have them imported/duplicated into your local repo. Or is the only way to keep switching between repos if you want to source from different places.
Question
Evgeny Shvarov · Mar 1, 2019

How to Setup InterSystems IRIS Container to Use OS-Level Authentication Programmatically

Hi Community! When you run IRIS container out-of-the-box and connect to it via terminal e.g. with: docker-compose exec iris bash You see something like: root@7b19f545187b:/opt/app# irissession IRIS Node: 7b19f545187b, Instance: IRIS Username: *** Password: *** USER> And you enter login and password every time. How to programmatically setup docker-compose file to have IRIS container with OS authentication enabled? And have the following while entering the terminal: root@7b19f545187b:/opt/app# irissession IRIS Node: 7b19f545187b, Instance: IRIS USER> One substitution in your code to use $zboolean to account for cases where it had already been enabled (in which case your code would disable it).Instead of: Set p("AutheEnabled")=p("AutheEnabled")+16 Use Set p("AutheEnabled")=$zb(p("AutheEnabled"),16,7) Documentation for $ZBOOLEAN Check out my series of articles Continuous Delivery of your InterSystems solution using GitLab it talks about many features, related to automating these kind of tasks. In particular, Part VII (CD using containers) talks about programmatic enabling of OS-level authentication. To activate OS authentication in your docker image, you can run this code, in %SYS namespace Do ##class(Security.System).Get(,.p) Set p("AutheEnabled")=p("AutheEnabled")+16 Do ##class(Security.System).Modify(,.p) If you work with community edition, you can use my image, where you can easily define also user and password for external use. Running server $ docker run -d --rm --name iris \ -p 52773:52773 \ -e IRIS_USER=test \ -e IRIS_PASSWORD=test \ daimor/intersystems-iris:2019.1.0S.111.0-community Terminal connect $ docker exec -it iris iris session iris Node: 413a4da758e7, Instance: IRIS USER>write $username root USER>write $roles %All Or with docker-compose, something like this iris: image: daimor/intersystems-iris:2019.1.0S.111.0-community ports: - 52773:52773 environment: IRIS_USER: ${IRIS_PASSWORD:-test} IRIS_PASSWORD: ${IRIS_PASSWORD:-test}
Announcement
Anastasia Dyubaylo · Apr 17, 2019

[May 15-17, 2019] Upcoming Event: InterSystems at the "J on the Beach" conference

Hi Community! Good news! One more upcoming event is nearby. We're please to invite you to join the "J on the Beach" – an international rendezvous for developers and DevOps around Big Data technologies. A fun conference to learn and share the latest experiences, tips and tricks related to Big Data technologies and, the most important part, it’s On The Beach! We're more than happy to invite you and your colleagues to our InterSystems booth for a personal conversation. InterSystems is also a silver sponsor of the JOTB. In addition, this year we have a special Global Masters Meeting Point at the conference. You're very welcome to come to our booth to ask questions, share your ideas and, of course, pick up some samples of rewards and GM badges. Looking forward to seeing you soon! So, remember! Date: May 15-17, 2019Place: Palacio de Congresos y Exposiciones Adolfo Suarez, Marbella, Spain More information you can find here: jonthebeach.com Please feel free to ask any questions in the comments of this post. Buy your ticket and save your seat today!