Search

Clear filter
Article
Oliver Wilms · Dec 24, 2021

InterSystems SQL Outbound Adapter - How fast can it go?

One of my colleagues had developed an interface in Health Connect (HealthShare 2019.1) to add large amounts of data to an external SQL Server database. The data comes from many text files with delimited rows and data for one table per file. There is a business process to read a file line by line and send an Insert Request to an operation. The request contains an Insert statement like ‘Insert into TABLE columns (col1, col2, … colZ) values (val1, val2, … valZ).’ The Health Connect operation utilizes Outbound SQL Adapter to insert one row into a table per request. You can probably imagine this process takes quite a long time. I believe it took about 4 hours to insert 200000 rows into one table. That is 50000 rows in one hour, which is 3600 seconds, or about 14 rows per second. I saw on Open Exchange that Guillaume Rongier had developed Grongier.SQL.OutboundAdapter. I understand this code uses an Insert statement like ‘Insert into TABLE columns (col1, col2, col3) values (?, ?, ?)’ paired with an array consisting of number of rows, number of columns per row, data values and data types. I had to tweak the code a bit to make it run in HealthShare 2019.1. I learned a lot about InterSystems SQL classes by debugging the code. It did not really work for me with reliability. I think I tried to insert a batch of 5 rows into two different tables. It worked with one table, but with the other table it inserted only one row and the return value indicated no row had been inserted. I believe it was Dmitry Maslennikov who suggested to me that I could use an Insert statement like ‘Insert into Table columns (col1, col2, col3) values (valA1, valA2, valA3), (valB1, valB2, valB3), (valC1, valC2, valC3).’ I refactored the business process to make one request per text file and the operation processed the stream line by line. I liked the idea to have all the values in the query statement, because I could use the standard InterSystems SQL Adapter with it. I observed that I could insert about 30 rows per second when I combined the values from two rows into one Insert statement. I was surprised that it did not make any significant difference if I inserted 20 columns per row or 90 columns per row. It made sense to me that I could insert about twice as many rows per second when I inserted two rows per insert compared to inserting rows one by one. I wanted to see how fast I could insert rows if I combined more rows into one insert statement. Here are the results: Batch Size Insert Rate 3 45.90 4 57.03 5 62.73 6 78.42 7 94.10 8 101.73 9 129.79 When I tried to insert rows by ten at a time (Batch Size = 10), the processing time was the same as nine rows per insert. I was able to insert nearly 130 rows per second, almost ten times what the original process provided. I also need to delete data before inserting new data. For some tables we delete all the rows, for some tables we delete only the rows that are being updated. I am not sure why we ‘Delete TABLE where col1 = val1’ and then ‘Insert into TABLE columns (col1, …) values (valNew1, …).’ I think this could probably be accomplished quicker by an update statement. However, I was pleased to see I could delete thousands of rows in less than one second with a single delete statement like ‘Delete TABLE where SiteID = 123.’ I have not yet collected metrics comparing deleting individual rows with inserting individual rows. The refactored process refers to UPDATE logic when it uses an Insert statement like ‘Insert into Table columns (col1, col2, col3) values (valA1, valA2, valA3), (valB1, valB2, valB3), (valC1, valC2, valC3)’ AFTER deleting any rows matching the rows to be inserted. We have identified key columns per table to identify records for the delete. Assuming a table uses key columns col1, col2, and col3, I will combine the key values from multiple rows using OR condition like shown below for a batch size of three rows: Delete TABLE where (col1 = valA1 AND col2 = valA2 AND col3 = valA3) OR (col1 = valB1 AND col2 = valB2 AND col3 = valB3) OR (col1 = valC1 AND col2 = valC2 AND col3 = valC3)
Announcement
Anastasia Dyubaylo · Feb 9, 2022

[Video] Using the VS Code Debugger for InterSystems ObjectScript

Hey Developers, New video is already on InterSystems Developers YouTube channel: ⏯ Using the VS Code Debugger for InterSystems ObjectScript See how VS Code’s debugger for InterSystems ObjectScript helps you step through and inspect code. Learn how to write launch configurations for debugging class methods and production components, and get an overview of the VS Code debugger interface—including the variables section, watch pane, and debug console. Enjoy and stay tuned!
Question
Ben Spead · Feb 3, 2022

How to determine the UNIX user/group that InterSystems IRIS is running as?

(I wasn't able to find this in the docs or the Community, so feel free to point me to a reference that I missed) How can I determine the effective User and Group that will be used when an InterSystems IRIS process is doing file I/O on the file system for UNIX? Bonus points if you can tell me how to do it from within InterSystems IRIS as well as from the host OS. Thanks! From the OS side in AIX, I can see it in parameters.isc (example from a QA env I'm playing with) security_settings.iris_user: irisusr security_settings.iris_group: irisusr security_settings.manager_user: irisusr security_settings.manager_group: irisusr I do not recall how to see it in IRIS itself (or if it's even possible) but I remember wanting to figure out how to change the values after installation (due to someone goofing up an entry on a dev environment) and without a lot of effort, it is pretty difficult. Thank you @Craig.Regester for the response. Looking up that file in the docs (https://docs.intersystems.com/iris20201/csp/docbook/DocBook.UI.Page.cls?KEY=GCI_unixdist) it tells me that "For security reasons, the parameters.isc file is accessible only by the root user." I am pretty sure there is a way to tell what it is currently running as without needing that level of access. But it is good to know about this in the cases where root access is an option Interesting question. I didn't see anything for this in the class reference either. I'll be following this post. ##class(%SYS.ProcessQuery).GetOSUsername() You could try:ps -ax -o uname,cmd | grep "irisdb WD" | grep -v "grep"-ax will get all the running processes including ones that aren't running on a terminal, retrieve the username, and command that started the process. We then use grep to filter out the exact process we need. Thanks @Jean.Millette and @Timothy.Leavitt for the help with this! great way to do it within InterSystems IRIS - thanks Tim! Perfect!! Exactly what I was looking for - thank you @Sarmishta.Velury (and @Jean.Millette and @Timothy.Leavitt ) If you're doing file I/O, why not %File.GetOwnerGroup()? Or is this something you need to know before you open (or create) a file? @Jeffrey.Drumm - it is important to have this run from a process that is already running in the InterSystems IRIS instance (or something spun off from the SuperServer) so that it doesn't pick up your UNIX username if you enter via console. So being able to run an API like Tim's will work nicely as I can run it via the Output window from Studio: Understood ... but I'm curious as to how IRIS is getting my environment: w ##class(%SYSTEM.Util).GetEnviron("USER") jdrumm w ##class(%SYS.ProcessQuery).GetOSUsername() irisusr No idea, but I don't think it's tied to the IRIS name. When I am logged into Studio as bspead I see the following: [quote] w ##class(%SYSTEM.Util).GetEnviron("USER")rootw ##class(%SYS.ProcessQuery).GetOSUsername()cacheusr [/quote]
Announcement
Olga Zavrazhnova · Jul 22, 2021

Challenge on Global Masters: Try InterSystems FHIR Transformation Service

Hey Community, We are really looking for your feedback on a new offering - InterSystems FHIR Transformation Service. It went live on AWS Marketplace where you can try it for free! We launched a related challenge on GM where you can get points for giving it a try and a "thank you" prize to everyone who leaves feedback in comments to this post. If you are not GM member, you can do following and also require your "thank you" prize: #1 ✅ Try it out - here's a step-by-step guide. Would be so much value for us if you test it with your own HL7! #2 ✅ Send me a screenshot of your status page for a pipeline showing both your username and a Live pipeline that has processed at least one message. Screenshot should look like this: #3 ✅ What worked well? Any issues? Will you use it? Leave feedback in the comments to this post. We are 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. Looking forward to see your feedback!
Article
Anastasia Dyubaylo · Oct 8, 2021

How to learn on InterSystems Developer Community? Part 2: Tags

Hi Dev Community members, In this post, we would like to show you how to use DC tags. Let's make the most of this Developer Community option! A tag is a word or phrase that describes the topic of the post. Tags are a means of connecting members and experts with posts they will be able to discuss/ give the right answer by sorting posts into specific, well-defined categories. Tags can also be used to help you identify posts that are interesting or relevant to you. You can find the full list of tags in the Tags section of the DC top menu: Types of Tags and Dev Community Tag Tree There are two types of Dev Community tags: Groups – so-called main tags for broad topics and include all InterSystems technologies. Tags – regular tags for more specialized topics. Each post must have at least one of these groups. Do you know all the groups? A tag group for each InterSystems technology (9): A tag group for Visual Studio Code, the popular cross-platform from Microsoft: A tag group for official announcements about the DC or InterSystems: A tag group for advisories and alerts from the Worldwide Response Center (WRC): A tag group for Open Exchange (InterSystems gallery of software solutions and frameworks built with/for InterSystems), another one for Global Masters (InterSystems Gamification Platform), and another one for the Partner Directory (InterSystems platform for customers and partners): A tag group for Global Summit, the InterSystems annual meeting: Tag groups for Online Learning and Documentation: A tag group for comments, opinions, suggestions... about the DC: A tag group for job opportunity announcements related to InterSystems technology: And a tag group alternative to the rest, for those posts that can't be tagged with any of the previous tags: In addition to groups, DC members use Tags to specify even more the content of the posts. In the DC Tag Tree, you can also find some subtags, categorizing the content of the tags. As an example, the "Languages" tag has these subtags: "C++", "Python", "JavaScript", "MultiValue Basic", "ObjectScript", "Java" and ".NET". It is not mandatory to add Tags to posts, but you must select at least one Group: Sorting Tags You can sort tags in three different ways using the DC Tag Tree: 1. By popular: Groups & Tags are sorted by the number of times they have been used in posts. This number appears next to each tag (in parentheses). For example, the Open Exchange tag has been used in 368 posts: 2. By name: Groups & Tags are sorted alphabetically. 3. By new: By selecting this sort, the most recently created Groups & Tags will be shown first. Tag page: follow, sort, filter posts with Tags Each tag has its own URL/webpage, where you can see all the posts that have used that tag. For example, the "XML" tag has this webpage: community.intersystems.com/tags/xml, showing all the posts using this tag: All posts can be filtered by different criteria on the Tag page: by update, by date, by liker, by views, or by replies. They can also be sorted by post type: announcements, articles, questions, discussions, videos, or jobs. You need to go to the menu in the upper left corner and select the post type you are looking for. Follow the tags you are interested in! If you are interested in a subject, you can look for its tag in the DC tag tree, select it and click on the "Follow" button next to it. When you follow any tag, you will receive emails with all posts using that tag. Tags we suggested to start from: Best practices | Tips and tricks | Beginner | Tutorial. So... Take a look at the DC Tag Tree right now – interesting topics (tags) and a ton of useful content are waiting for you: read all published posts on the topic of your interest; follow the tags so you don't miss any future posts on your favorite topics. If you have any questions about the tags or you miss anyone, please leave your comments/suggestions below! Very interesting, thank you!
Announcement
Anastasia Dyubaylo · Oct 12, 2021

Video: Fast & Efficient Provisioning & Testing with InterSystems Cloud Manager

Hi Community, New video is already on InterSystems Developers YouTube: ⏯ Fast & Efficient Provisioning & Testing with InterSystems Cloud Manager See how the powerful InterSystems Cloud Manager tool supports cloud deployment — both with and without containers — for continuous testing and deployment phases. The Cloud Manager can be used for both pre-production and production situations, as it natively implements InterSystems best practices. Cloud Manager leverages an intuitive declarative format for easy cloud and on-premises deployment of InterSystems IRIS clusters configurations. 🗣 Presenter: @Steve.Pisani, Senior Solution Architect, InterSystems Enjoy and stay tuned!
Announcement
Shane Nowack · Oct 18, 2021

Earn money by helping InterSystems Certification write exam questions!

The InterSystems Certification Team is building an InterSystems IRIS Integration Specialist certification exam and is looking for Subject Matter Experts (SMEs) from our community to help write questions. You, as a valued InterSystems community member, know the challenges of working with our technology and what it takes to be successful at your job. In exchange for your assistance you will be compensated up to $500 per work assignment. A work assignment will typically involve writing 20 assigned questions in a two-week time frame, and having your submitted questions reviewed within two weeks of submission. The time expectation for completing a work assignment is approximately 20 hours. Proposed Project Work Dates: The two-week work assignments will be issued in stages during Q1 and Q2 of 2022 and will be assigned by the Certification Team. Note: Writing questions for InterSystems Certification is paid, temporary contract work based in the United States. As such, to participate you must be eligible to accept paid work projects in the United States. You will be required to sign the InterSystems Vendor Agreement and complete a U.S. tax declaration form (W-9). Here are the details: Action Item Details Complete project profile Write to certification@intersystems.com to express your interest in the Certification Subject Matter Expert Program. Tell us that you are interested in being an InterSystems IRIS Integration SME (an individual with at least two years of experience with InterSystems IRIS Integration tasks). A team member will send you a profile form to determine if your areas of expertise align with open projects. Accept If you are selected for an exam development opportunity, a team member will email you several forms requiring your signature: a Statement of Work, the InterSystems Vendor Agreement, Form W-9, and a Non-Disclosure Agreement. Train After receiving your signed documents, and before beginning to write questions, you will be asked to watch a short training video on question-item writing and to complete a Job Task Analysis (JTA) survey. Completion of this survey takes approximately 30-45 minutes and is required. Your responses will help us validate exam topics and create your item-writing assignment. Participate After receiving your JTA survey the Certification Team will send you information regarding your first assignment. This will include: credentials to access and sign in to QuestionMark, our SME item-writing development system, and a work assignment, which usually consists of the submission of 20 scenario-based questions. You will typically be given two weeks to complete the assignment. Review InterSystems staff will review your content. InterSystems may accept, reject, or request revision to any question at its sole discretion. You may be asked to resubmit a question if the reviewer sees problems with the question item and has a clear solution for how to resolve it. This may include: conceptual problems, such as a technical detail in the question stem is assumed or missing, or a particular use case that invalidates the question, or if they believe there is a different question rationale that most experts would assume is the best way to assess the target item. A question may be rejected if the reviewer disagrees fundamentally with the question rationale as valid, or if they believe the investigation to fix the question requires unrealistic work. Receive payment At the end of the item-writing project you will receive a statement from InterSystems showing questions accepted by internal reviewers. You will receive payment for the accepted items within 30 days of the end of the item-writing project. If for any reason, only a portion of the work package has been accepted, you will receive a pro-rated amount of the value of the work package. Interested in participating? Email certification@intersystems.com now!
Article
Nikolay Solovyev · Nov 23, 2021

InterSystems Package Manager ZPM 0.3.2 release

A new release of ZPM has been published - ZPM 0.3.2. New in this release: Various changes in the output command of help Changes in colors in the outputs Added an ability to add more repo types Added an ability to specify a post-installation message, with AfterInstallMessage tag in module.xml Added variable ${webroot}, which refers to url with host and port where the internal web-server is available Fixed issue when during install if no module was specified (issue #243) Fixed issue with uppercased FileCopy resource Some other minor bugfixes How to use AfterInstallMessage ? Described in Documentation. And here is an example.
Announcement
Anastasia Dyubaylo · Nov 29, 2021

Video: InterSystems HealthShare Health Connect: New & Next

Hey Developers, In the next video from #VSummit21 we'll show you recent changes to InterSystems HealthShare Health Connect and what is coming next: ⏯ InterSystems HealthShare Health Connect: New & Next 🗣 Presenter: @Stefan.Wittmann, Product Manager, InterSystems Subscribe to the InterSystems Developers YouTube channel and stay tuned!
Announcement
Anastasia Dyubaylo · Dec 1, 2021

Video: FHIR in the Cloud: Understanding InterSystems New FHIR Services

Hey Developers, Learn about the use and design of the InterSystems FHIR Transformation Service and the InterSystems FHIR Server, and what to expect next: ⏯ FHIR in the Cloud: Understanding New InterSystems FHIR Server 🗣 @Mitchell.Tyson, Senior Cloud Engineer, InterSystems🗣 @Regilo.Souza, Product Owner - Cloud Strategy, InterSystems Subscribe to the InterSystems Developers YouTube channel and stay tuned!
Announcement
Anastasia Dyubaylo · Sep 13, 2021

Video: iKnow: Open Source NLP in InterSystems IRIS

Hi Community, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ iKnow: Open Source NLP in InterSystems IRIS Learn about this open-source NLP technology and its unique approach to text analytics. See how the new Python library works, and learn about the exciting journey towards a robust public CI/CD pipeline. Presenters: 🗣 @Benjamin.DeBoe, Product Manager, InterSystems 🗣 @Aohan.Dang, Systems Developer, InterSystems Enjoy and stay tuned!
Question
Evgeny Shvarov · Nov 10, 2021

How to Implement Bearer Authentication with InterSystems IRIS REST API?

Hi folks! Could you please share your experience on how do you create REST API with InterSystems IRIS that uses bearer authentication? How do you generate tokens? How do you maintain it (how much time tokens exist?). Thanks in advance! Look at my Realworld project realization. There I have a separate table for users, and Bearer token creation and validation, expiration time set in parameter. And API, checks it for any request required authorization. All this kind of stuff is built into both QEWD's REST services and mgweb-server with appropriate APIs for all the JWT/Bearer Token life-cycle. Find both on my Github repos: https://github.com/robtweed/qewd https://github.com/robtweed/mgweb-server See the REST/IRIS examples based on the RealWorld/Conduit application which use JWT-based authentication carried as bearer tokens: https://github.com/robtweed/mgweb-conduit https://github.com/robtweed/qewd-conduit Thanks, Rob! Don't see though the example of how to make a Bearer token authorisation with InterSystems IRIS Thanks, Dmitry! This is what I was looking for
Announcement
Anastasia Dyubaylo · Dec 29, 2021

[Video] InterSystems HealthShare Health Insight: New & Next

Hey Developers, Learn about the latest updates to InterSystems HealthShare Health Insight and what is coming next: ⏯ InterSystems HealthShare Health Insight: New & Next 🗣 Presenter: Jin Kin, Product Specialist, Health Insight, InterSystems Enjoy and stay tuned!
Announcement
Anastasia Dyubaylo · Jan 11, 2022

[Video] InterSystems HealthShare Clinical Viewer: New & Next

Hi Community, We'll show you the recent changes to InterSystems HealthShare Clinical Viewer and what is coming next: ⏯ InterSystems HealthShare Clinical Viewer: New & Next 🗣 Presenter: @Julie.Smith, Clinical Product Manager, HealthShare, InterSystems Stay tuned!
Announcement
Anastasia Dyubaylo · Jan 19, 2022

[Video] IKO: The InterSystems Kubernetes Operator (Version 3.0)

Hey Developers, Watch as the presenter uses IKO to deploy the WebGateway, SAM, and InterSystems API Manager with the latest version of the InterSystems Kubernetes Operator: ⏯ IKO: The InterSystems Kubernetes Operator (Version 3.0) 🗣 Presenter: @Steven.Lubars, Software Developer, InterSystems Subscribe to the InterSystems Developers YouTube channel and stay tuned!