Search

Clear filter
Announcement
Evgeny Shvarov · Sep 10, 2021

Technology Bonuses Results for Projects in the InterSystems Analytics Contest!

Hi Developers! We had a set of technology bonuses for the InterSystems IRIS Analytics contest. And here is how projects collected it: Project AtScale PowerBI Tableau Logi IRIS BI IRIS NLP Docker ZPM Unit Testing Online Demo Article on DC Video on YouTube Total Bonus Nominal 4 3 3 3 3 3 2 2 2 3 2 3 33 iris-analytics-datastudio 3 3 3 9 promjet-stats 4 3 3 3 2 3 18 pop-song-analytics 3 2 5 Analytics OKR 3 2 2 2 9 iris-analytics-for-money 3 2 5 AlertDashboard 3 3 We can discuss bonuses here or on the Discord channel
Question
prashanth ponugoti · Nov 27, 2021

Monitoring Dashboard for InterSystems Heath share Health connect

Hi All, We have a requirement for one webpage that should be access in our VPN with out authentication. If it asks user name password that also fine. This page should be a dashboard for the ensemble health monitoring. Support Team seating Area we have big SMART Monitor which always shows this webpage. Support engineers keep on eye on this monitor, if it shows action required then . they will act upon immediately. Expecting some widgets like Queue Status Inbound application status Out bound operations status Database statistics Mirror Information etc. I can see some widgets in management portal. But We need separate web application page. I am developing one solution for my support team requirements. Here I am going to Propose Solution. Ensemble Integration: Create Customized Business Service to poll Cache to get the required details and send to Business Process Create Customised Business Process to check the configured business rules and invoke Business Operation. Create a Business Operation to make a POST call for to my Rest Service. Rest Service: This Service Parse JSON Payload and insert or update into respective table in MYSQL database instance React Web Page: This UI will show the DB summary in respective widgets Please advice me any alternative Idea? Is there any tolls available for this? Thanks, Prashanth It's better to look at something like Grafana. Here are a few articles about using it. Big article with many details and my article with direct connection to IRIS If you need some help with the development and configuration of such monitoring, I can help with it. Another solution can be with SAM : https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=ASAM https://community.intersystems.com/post/new-video-viewing-customizing-metrics-sam You can also enable interoperability metrics (only on IRIS 2021.1+) with : // Enable Intero metrics for SAM zw ##class(Ens.Util.Statistics).EnableSAMForNamespace() zw ##class(Ens.Util.Statistics).EnableSAMIncludeHostLabel()
Question
Martin Fukátko · Nov 27, 2021

VSCode can't start InterSystems Language Server

Hi, I have VSCode on my Windows 10 notebook with intersystems-community.objectscript-pack installed. I'm successfully connected to remote IRIS (2021.1). I can export classes, change them, save and import back to IRIS. But every time VSCode starts, the message "Request initialize failed with message: Dynamic Linking Error: Win32 error 126" is displayed and InterSystems Language Server does not start. Has anyone solved this problem yet? Windows 32bit, is not it? Only 64 bit is supported. Are you using 32-bit Windows? If so, see https://github.com/intersystems/language-server/issues/197 I think same issue as https://githubmemory.com/repo/intersystems/language-server/issues/186?page=2 . @pvdmm Thanks for the log, I think that your problem is due to a couple of missing DLLs: msvcp120.dll and msvcr120.dll These can be installed using the Visual C++ 2013 redistributable package available from https://support.microsoft.com/en-us/topic/update-for-visual-c-2013-redistributable-package-d8ccd6a5-4e26-c290-517b-8da6cfdf4f10 This is a link to an page talking about a bugfix update but it is the latest version (5) of these tools, linked from a Microsoft page titled "The latest supported Visual C++ downloads". Please install this and then try running VSCode again. If this fixes your problem the Language Server team can work out the best way to fix this issue for future installations of the extension. Thank you @Ohata.Yuji You seem to be right. In the meantime, I managed to start Language Server as follows:VScode runs smoothly on my second computer, so I looked for differences. I have Caché installed on the second computer, Iris on the troubled one. The problem disappeared when I installed Caché on the troubled one. It is Windows 64 bit. But the problem is solved now.
Announcement
Anastasia Dyubaylo · Dec 9, 2021

Video: InterSystems HealthShare Unified Care Record

Hey Developers, Learn about the recent changes to InterSystems HealthShare Unified Care Record and what is coming next: ⏯ InterSystems HealthShare Unified Care Record Presenters:🗣 @Sebastian.Musielak, Product Manager, HealthShare Operations, InterSystems🗣 Melanie Davies, Product Manager, Unified Care Record, InterSystems Subscribe to the InterSystems Developers YouTube channel and stay tuned!
Article
José Pereira · Sep 15, 2021

Implementing an IMAP Client in InterSystems IRIS - part II

In the first part we got a quick introduction on the IMAP protocol commands, now it's time to use IRIS and implement them and create our own IMAP client! IRIS Email Framework The IRIS platform has default interfaces and classes for working with email. Developers originally designed those artifacts for POP3 implementation. However, this doesn’t mean that we can’t use and extend these interfaces and classes to implement an IMAP client. So let’s talk about them: %Net.FetchMailProtocol: This is the base class for email retrieval. The IMAP client extends it. %Net.MailMessage: This is the MIME message. It extends %Net.MailMessagePart. %Net.MailMessagePart: This encapsulates a MIME message part for multipart messages. This class has an array for itself, enabling a tree representation of message subparts. %Net.MIMEReader: This utility class has methods to parse a message’s MIME content, generating a %Net.MIMEPart instance. %Net.MIMEPart: This encapsulates the message’s MIME parts and provides methods to get information about them. Implementing an IMAP Client In this section, we present implementation details about an IMAP client, an inbound interoperability adapter, and a simple production example. Note that, in favor of saving space, we won’t show most implementation methods. Instead, we link to each one’s full implementation details. You can find the complete source code on GitHub. Creating a Basic IMAP Client As we discussed before, IMAP is a plain text-based protocol over TCP. This means the base code to implement a client for such a protocol is a TCP client. The IRIS platform provides standard ObjectScript commands to perform I/O operations: OPEN, USE, READ, WRITE, and CLOSE. Here is a simple example of how to connect to the MS Outlook server, log in, then log out: ClassMethod SimpleTest() { // connection configuration SET dev = "|TCP|993" SET host = "outlook.office365.com" SET port = "993" SET mode = "C" SET sslConfig = "ISC.FeatureTracker.SSL.Config" SET timeout = 30 // connection to MS Outlook IMAP server OPEN dev:(host:port:mode:/TLS=sslConfig):timeout THROW:('$TEST) ##class(%Exception.General).%New("Sorry, can't connect...") USE dev READ resp($INCREMENT(resp)):timeout WRITE "TAG1 LOGIN user@outlook.com password", ! READ resp($INCREMENT(resp)):timeout WRITE "TAG2 LOGOUT", ! READ resp($INCREMENT(resp)):timeout CLOSE dev // come back to default device (terminal) and prints responses USE 0 ZWRITE resp } This is its output: USER>d ##class(dc.Demo.Test).SimpleTest() resp=3 resp(1)="* OK The Microsoft Exchange IMAP4 service is ready. [QwBQ..AA==]"_$c(13,10) resp(2)="TAG1 OK LOGIN completed."_$c(13,10) resp(3)="* BYE Microsoft Exchange Server IMAP4 server signing off."_$c(13,10)_"TAG2 OK LOGOUT completed."_$c(13,10) There are some highlights in this code: We set the mode variable to C, which is carriage return mode. This setting is mandatory for IMAP. The flag /TLS establishes a secure layer of communication (SSL). We must set this flag value to a valid SSL IRIS connection. The OPEN command initiates the connection. The special boolean variable $TEST returns 1 when a command with a timeout is successful or 0 if the timeout expires. In this example, if the OPEN command exceeds 30 seconds, the code throws an exception. After a connection is established successfully, the command USE owns the TCP device, redirecting all READ and WRITE commands to this device. The WRITE command issues commands to the IMAP server, and the READ command gets their output. To finish the connection, we must use the CLOSE command. After owning the device, all calls to READ and WRITE commands execute on the device specified in the dev variable, after using the USE dev command. To come back to the terminal and write to it again, you need to issue a USE 0 command first. Each READ command has a limited buffer to store the server response. When the response size exceeds this limit, you need to issue another READ command to read the complete response. Of course, it’s possible to increase the buffer size, but a better approach is to be ready to deal with such a situation. As we discussed before, IMAP requires a tag for each command. This tag is helpful to check if the code retrieved the complete response or if it needs to issue another READ command. In this case, we implement the ReadResponse method to ensure the code reads the whole message. Implementing the %Net.FetchMailProtocol Interface for IMAP The %Net.FetchMailProtocol abstract class abstracts email retrieval on the IRIS platform. We implement the following methods: Connect: This establishes a connection to the IMAP server and logs in a user. GetMailBoxStatus: This gets the size of the mailbox and how many messages are in it. GetSizeOfMessages: This gets the size of one or all messages identified by a message number. GetMessageUIDArray: This gets an array with one or all message UIDs in the inbox. GetMessageUID: This gets the UID corresponding to a message number. Fetch: This retrieves a message’s content, possibly multipart content, identified by a message number. It retrieves the message content encapsulated in a %Net.MailMessage object. FetchFromStream: This is the same as Fetch, but gets content from an encapsulated EML message content in a %BinaryStream object, instead of calling the IMAP server. FetchMessage: This is the same as Fetch, but returns specific message headers in ByRef variables. FetchMessageInfo: This retrieves only message headers and the text of the message. DeleteMessage: This adds a message to the deletion array. RollbackDeletes: This cleans up the deletion array. QuitAndCommit: This deletes all messages in the deletion array and disconnects from the IMAP server. QuitAndRollback: This cleans up the deletion array and disconnects from the IMAP server. Ping: This pings the IMAP server to keep the session alive. First, we create a new class to implement the interface: dc.Demo.IMAP. This class inherits several properties, which we must set to establish a connection to the IMAP server. We create a helper class as well: dc.Demo.IMAPHelper. This class parses methods for IMAP responses, gets all parts of a multipart message, and stores peripheral features, including a method to send commands and ensure the entire response is read. The first method we implement is the Connect method. This method establishes a connection to the IMAP server using the configuration encapsulated in the class properties. It issues a login as well. This method uses the IRIS platform’s OPEN command to establish the connection to the IMAP server and the IMAP command LOGIN to authenticate to the server. The next method we implement is GetMailBoxStatus. This method uses the SELECT command to select a mailbox and it brings some additional information as well, like how many messages are in the mailbox. IMAP doesn’t have a ready-to-use command to get the size of all messages. Of course, it’s possible to iterate through all messages and sum their sizes. However, this strategy will probably cause slowness issues. So in this implementation, we don’t retrieve the size for all messages. The next method is GetSizeOfMessages. This method gets the size of one or more messages in the inbox. When no message number is defined, this method throws an exception due to the same IMAP limitation we explained for the GetMailBoxStatus method. We use the IMAP command FETCH <message_number> (RFC822.SIZE) to retrieve a message size by its number. The GetMessageUIDArray method comes next, which uses the IMAP commands SELECT and UID SEARCH [ALL | <message_number>] and parses its response to get the UID array. The next method is GetMessageUID. This method gets a UID for a defined message number and uses the same logic as the GetMessageUIDArray method. Following this is the Fetch method. It uses the IMAP commands SELECT and FETCH <message_number> BODY to retrieve message content, which is coded in MIME format. Fortunately, the IRIS platform has a reader for MIME content, the %Net.MIMEReader class. This class gets the message in a stream and returns the parsed message in a %Net.MIMEPart object. After getting the MIME content, the method creates a %Net.MailMessage object, fills it with data from the %Net.MIMEPart object, and returns it. The MIME content is encapsulated in a %Net.MIMEPart object that maps into a %Net.MailMessagePart object through the GetMailMessageParts method in the dc.Demo.IMAPHelper class. The next method is FetchFromStream. This method receives a stream object with an EML message and converts it to a %Net.MailMessage object. This method does not retrieve content from the server. Following are the FetchMessage and FetchMessageInfo methods, which are special cases of the Fetch method. The DeleteMessage method marks a message for deletion, whereas the RollbackDeletes method just cleans up the array of messages marked for deletion. Next is the QuitAndCommit method. It disconnects from the IMAP server and calls the method CommitMarkedAsDeleted for message deletion. The method QuitAndRollback just disconnects from the IMAP server and cleans up the array of messages marked for deletion. The last method, Ping, issues a NOOP command to keep the IMAP session alive. Implementing an Inbound Interoperability Adapter for IMAP The base class for email interoperability inbound in the IRIS platform is EnsLib.EMail.InboundAdapter. This inbound adaptor requires these configurations: The email server host address The email server port A credential ID which stores the username and password for accessing the server An SSL configuration This class was extended to create a new IMAP inbound adapter class: dc.Demo.IMAPInboundAdapter. To use this new adapter, we set which mailbox to use in the Mailbox production parameter. Its default value is INBOX. The implementation is simple, it just overrides the MailServer property and sets its type to dc.Demo.POP3ToIMAPAdapter IMAP client. This adapter maps the POP3 flow to the IMAP one, as the base adapter class was designed for POP3 commands. Thus, this POP3 to IMAP adapter enables us to perform all the original inbound adapter logic using IMAP commands instead of POP3 commands. In the dc.Demo.POP3ToIMAPAdapter class, we use the IMAP client IMAPClient of type dc.Demo.IMAP as a proxy for server communication. However, as dc.Demo.POP3ToIMAPAdapter extends %Net.POP3, it must override all abstract methods in %Net.FetchMailProtocol. Also, we had to implement new methods that the %Net.POP3 client had implemented directly: ConnectPort and FetchMessageHeaders. In the same way, we created ConnectedGet and SSLConfigurationSet methods to set and get properties that %New.POP3 also implemented directly. Setting up a Simple Production To make all these classes work together, we set up a simple production. Check out Creating a Production to get more information about IRIS Interoperability productions. This production includes a business service and a business operation, which uses the IMAP inbound adapter to check for new messages. This code was inspired by the Demo.Loan.FindRateProduction interoperability sample. In short, this production: Uses the GetMessageUIDArray method to get all available messages in the configured mailbox Loops over them, tracing their output, fetched by the Fetch method Checks if each message subject matches a criterion — starting with "[IMAP test]" Responds to the sender if the message subject matches the criteria, otherwise ignores the message Deletes all of the messages so that it won’t analyze them again In this example, we configure an IMAP server from Yahoo Mail imap.mail.yahoo.com, on port 993. We also use the default IRIS SSL configuration “ISC FeatureTacker.SSL.Config”. Next, we configure a credential called imap-test containing a username and password, as follows: As the image below shows, the production starts and keeps querying the IMAP server for new messages. When there are new messages, the inbound adapter grabs their information, like the header and subject, and lets production take further action based on this information. In this example, the production checks if the message subject starts with "[IMAP test]" and sends back a message to the sender. When a message doesn’t match the criteria, production just ignores it. Conclusion In this article, we discussed an IMAP client implementation. First, we explored some essential background on IMAP and its main commands. Then, we detailed the implementation, covering the client itself and how to connect it to the IRIS platform. We also presented an extension to the default interoperability adapter to use IMAP, and a simple production example. Now that you know more about IMAP and its settings and you know how to connect it to IRIS, you can set up email capabilities in your applications. To learn more about the IMAP topics we discussed here, explore the resources below. Resources Atmail’s IMAP 101: Manual IMAP Sessions Fastmail’s Why is IMAP better than POP? IETF’s Internet Message Access Protocol IETF’s Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies InterSystems’ I/O Devices and Commands InterSystems’ Using the Email Inbound Adapter Nylas’ Everything you need to know about IMAP
Article
José Pereira · Sep 1, 2021

Implementing an IMAP Client in InterSystems IRIS - part I

This article explains how to use the InterSystems IRIS platform to write a basic IMAP client. First, we present an overview of IMAP, then we discuss the main IMAP commands and client implementation. Finally, we offer a simple use of this IMAP client on the IRIS interoperability application. Note that this article isn’t a detailed IMAP explanation. For more detailed information, please check the references of this article. IMAP Overview The Internet Message Access Protocol (IMAP) lets users retrieve emails. Mark Crispin proposed IMAP in the 1980s, and since then, the protocol has been published and revised in RFC 3501. At the time of writing this article, its current version is IMAP4rev1. It’s important to note that this protocol is designed for retrieving only. You must use another protocol, the Simple Mail Transfer Protocol (SMTP), if you need to send emails. There’s also an older protocol for email retrieval that’s as popular as IMAP, called Post Office Protocol version 3 (POP3). Trying Basic IMAP Commands Like POP3, IMAP is a plaintext protocol. You can easily try some of its commands by yourself, using a TCP client like Telnet or OpenSSL. First, you need your IMAP host and email server port. For instance, at the time of writing this article, this is the host and port to connect to the Microsoft Outlook service: outlook.office365.com:993 Let’s connect to this server using our TCP client. Enter the command below and hit ENTER. Note the use of the -crlf flag. This flag is mandatory for IMAP as carriage return and line feed (CRLF) is its line terminator. $ openssl s_client -connect outlook.office365.com:993 -crlf -quiet After you hit enter, the IMAP server shows you some information and stays waiting for input. depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert ... * OK The Microsoft Exchange IMAP4 service is ready. [...] Now we can perform our first IMAP command: CAPACITY. As its name suggests, this command presents features that the server can provide. Note that the first line is the IMAP command itself, and the others lines are its output - this is the same for all other IMAP commands presented here. TAG1 CAPABILITY * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN AUTH=XOAUTH2 SASL-IR UIDPLUS ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL+ TAG1 OK CAPABILITY completed. Note the token before the CAPABILITY command: TAG1. A tag must precede every IMAP command and is any string you want. They identify what command instance the server is responding to. Generally, a simple counter with a prefix fits all your needs. The IMAP server finishes the response with the tag you used to issue the command and a flag indicating the command’s status, followed by miscellaneous information related to the command and status. The statuses allowed are: OK (success), NO (failure), and BAD (wrong command). The command LOGIN expects user and password as arguments. First, let’s check how the server responds if someone gives an invalid username and password: TAG2 LOGIN user@outlook.com wrong-password TAG2 NO LOGIN failed. Note the NO status after the command tag. Now, let’s proceed to a valid login: TAG3 LOGIN user@outlook.com password TAG3 OK LOGIN completed. Now we’re logged in. To finish our session, we use the LOGOUT command: TAG4 LOGOUT * BYE Microsoft Exchange Server IMAP4 server signing off. TAG4 OK LOGOUT completed. We need other commands to implement our IMAP client, so we need to reconnect and log into our IMAP server again. Let’s get some information about the inbox next. First, we must tell the server which mailbox we want to access, INBOX in this case. TAG5 SELECT "INBOX" * 14 EXISTS * 0 RECENT ... TAG5 OK [READ-WRITE] SELECT completed. Now we are ready to access messages in our inbox, but we need a way to refer to them first. There are two ways to do that: by message number or by a unique identifier (UID). Message numbers are just counters, starting from 1 and going up to the number of messages within the inbox. When you delete a message, all following messages have their numbers decremented by 1. You can think of this as an array that has one of its elements removed. UIDs, on the other hand, keep their value whatever happens to the other messages. You can get UIDs using the UID SEARCH command. This command accepts a message number if you'd like to get a specific UID or the ALL parameter to get all UIDs in the directory. In the example below, we search for UID for message number 1, which is 483. TAG6 UID SEARCH 1 * SEARCH 483 TAG6 OK SEARCH completed. Now let’s retrieve message information, like headers, body, and attachments. We use the FETCH command for this. This command has plenty of parameters, which you can explore in detail on RFC 3501. In this article, we only address parameters related to the needs of the IMAP client implementation. The first information we need for this demonstration is the message size. We can get this information using the RFC822.SIZE parameter: TAG7 FETCH 1 RFC822.SIZE * 1 FETCH (RFC822.SIZE 70988) TAG7 OK FETCH completed. This indicates that the size of message number 1 is 70,988 bytes. Note that it’s also possible to use UIDs rather than message numbers to fetch message information: TAG8 UID FETCH 483 RFC822.SIZE * 1 FETCH (RFC822.SIZE 70988 UID 483) TAG8 OK FETCH completed. You can also get the basic From, To, Date, and Subject message headers: TAG9 FETCH 1 (FLAGS BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)]) * 1 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (FROM TO DATE SUBJECT)] {157} Date: Thu, 22 Apr 2021 15:49:05 +0000 From: Another User <anotheruser@outlook.com> To: user@outlook.com Subject: Greetings from Another User! FLAGS (\Seen)) TAG9 OK FETCH completed. Now let’s retrieve the message body. We can retrieve all the body content using this command: TAG10 FETCH 1 BODY[] * 1 FETCH (BODY[] {9599} ... MIME-Version: 1.0 --00000000000041bd3405c3403048 Content-Type: multipart/alternative; boundary="00000000000041bd3205c3403046" --00000000000041bd3205c3403046 Content-Type: text/plain; charset="UTF-8" ... --00000000000041bd3405c3403048 Content-Type: image/png; name="download.png" Content-Disposition: attachment; filename="download.png" ... TAG10 OK FETCH completed. We can see in this code that some blocks are delimited by hex numbers between -- --, called parts. A message with parts is called a multipart message. It’s possible to get such parts directly by passing the part index to the command. In order to delete messages, the protocol has the commands STORE and EXPUNGE, which mark a message as deleted and commit such an operation. TAG11 STORE 1 +FLAGS (\Deleted) * 0 EXISTS * 0 RECENT TAG11 OK [READ-WRITE] SELECT completed; now in selected state TAG12 EXPUNGE EXPUNGE: TAG12 OK EXPUNGE completed The last command is simple: NOOP. This command does nothing but is used to implement a keep-alive strategy. By default, the IMAP session closes after 30 minutes without commands. So, issuing the NOOP command keeps the connection active. TAG17 NOOP TAG17 OK NOOP completed. And this finishes our IMAP overview. If you’d like more information, there are a lot of good articles on the Web (I've selected some in resources section), and of course always remember the RFC 3501. Resources Atmail’s IMAP 101: Manual IMAP Sessions Fastmail’s Why is IMAP better than POP? IETF’s Internet Message Access Protocol IETF’s Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies Nylas’ Everything you need to know about IMAP Next part, you'll use those commands within IRIS and see them in action! See you!
Announcement
Anastasia Dyubaylo · Sep 17, 2021

Video: Getting Up to Speed on InterSystems API Manager

Hi Community, Enjoy watching the new video on InterSystems Developers YouTube: ⏯ Getting Up to Speed on InterSystems API Manager Get a walkthrough of the newest features of InterSystems API Manager (IAM), which offers full API management capabilities for InterSystems IRIS data platform; and get a brief introduction to the basic concepts of API management. 🗣 Presenter: @Stefan.Wittmann, Product Manager, InterSystems Enjoy and stay tuned!
Announcement
Evgeny Shvarov · Oct 4, 2021

Technology Bonuses for InterSystems InterOperability Contest 2021

Hi Developers! Here're the technology bonuses for the InterSystems Interoperability Contest 2021 that will give you extra points in the voting: Business Process BPL or Business Rule DTL Usage Custom Interoperability Adapter Usage Production EXtension(PEX) Java or .NET usage Workflow Engine usage Docker container usage ZPM Package deployment Online Demo Code Quality pass Article on Developer Community Video on YouTube See the details below. Business Process BPL or Business Rules Usage - 3 point One of the key features of IRIS Interoperability Productions are business processes, which could be described by BPL (Business Process Language). Learn more on Business Processes in documentation. Business Rules it's a no-code/low-code approach to manage the processing logic of the interoperability production. In InterSystems IRIS you can create a business rule which you can create visually or via the ObjectScript representation. You can collect the Business Process/Business Rule bonus if you create and use the business process or business rule in your interoperability production. Business Rule Example Learn more on Business Rules in documentation. Custom Interoperability Adapter Usage - 2 point InterSystems Interoperability production can contain inbound or Outbound adapters which are being used to communicate with external systems by business services and operations of the production. You can use out-of-the-box adapters (like File, or Email) or develop your own. You get the bonus if you develop your own custom inbound or outbound adapter and use it in your production. Example of an adapter. Learn more on adapters. Production EXtension (PEX) Usage - 4 points PEX is a Java or .NET extension of Interoperability productions. You get this bonus if you use PEX with JAVA or .NET in your interoperability production. PEX Demo. Learn more on PEX in Documentation. Workflow Engine Usage - 2 point Workflow Engine is a part of IRIS Interoperability which could be used to automate the distribution of tasks among users. You get this bonus if you use include the usage of Workflow Engine in your interoperability production. Learn more on Workflow in Documentation. There are Community modules WorkflowAPI and WorkflowUI-ngx which provide a nice UI layer on Angular for the Workflow engine. Docker container usage - 2 points The application gets a 'Docker container' bonus if it uses InterSystems IRIS running in a docker container. Here is the simplest template to start from. ZPM Package deployment - 2 points You can collect the bonus if you build and publish the ZPM(ObjectScript Package Manager) package for your Full-Stack application so it could be deployed with: zpm "install your-multi-model-solution" command on IRIS with ZPM client installed. ZPM client. Documentation. Online Demo of your project - 3 pointsCollect 3 more bonus points if you provision your project to the cloud as an online demo. You can do it on your own or you can use this template - here is an Example. Here is the video on how to use it. Code quality pass with zero bugs - 1 point Include the code quality Github action for code static control and make it show 0 bugs for ObjectScript. Article on Developer Community - 2 points Post an article on Developer Community that describes the features of your project. Collect 2 points for each article. Translations to different languages work too. Video on YouTube - 3 points Make the Youtube video that demonstrates your product in action and collect 3 bonus points per each. Example. The list of bonuses is subject to change. Stay tuned! Good luck in the competition! can we add a China video website to add since China developers since we cannot access Youtube? If I translate my own article count as 2 articles!? Just kidding
Announcement
Anastasia Dyubaylo · Dec 21, 2021

InterSystems DataSets Contest Kick-off Webinar

Hi Community, We are pleased to invite all the developers to the upcoming InterSystems Datasets Contest Kick-off Webinar! The topic of this webinar is dedicated to the Datasets contest. In this webinar, we’ll do a quick tour of the new LOAD DATA feature, also chime in on packaging global data or file data with ZPM, and run a data-generation script as part of a method in the zpm install. As always, our experts will answer the questions on how to develop, build, and deploy datasets using InterSystems IRIS. Date & Time: Tuesday, December 28 – 10:00 AM EDT Speakers: 🗣 @Benjamin.DeBoe, Product Manager, InterSystems 🗣 @Evgeny.Shvarov, InterSystems Developer Ecosystem Manager So! We will be happy to talk to you at our webinar in Zoom! ✅ JOIN THE KICK-OFF WEBINAR! Hey everyone, The kick-off will start in 10 minutes! Please join us here: https://us02web.zoom.us/j/9822194974?pwd=bnZBdFhCckZ6c0xOcW5GT1lLdnAvUT09 Or enjoy watching the stream on YouTube: https://youtu.be/IEIGHit-9O8 Hi @Anastasia.Dyubaylo Is Kick-off webinar recoding available ?Thanks Hey Developers, The recording of this webinar is available on InterSystems Developers YouTube! Please welcome: ⏯ InterSystems DataSets Contest Kick-off Webinar Big applause to our speakers! 👏🏼
Announcement
Anastasia Dyubaylo · Nov 11, 2021

Video: Working with FHIR Profiles in InterSystems IRIS for Health

Hey Developers, Don't miss our new video on InterSystems Developers YouTube: ⏯ Working with FHIR Profiles in IRIS for Health Learn how a FHIR server built with InterSystems IRIS for Health can support multiple FHIR profiles, including those available in the US Core Implementation Guide and other published FHIR packages. FHIR profiles and other conformance resources allow you to adapt FHIR for a specific purpose or environment. 🗣Presenter: @Kurt.Dawn , Technical Writer, InterSystems FHIR team Subscribe and enjoy watching!
Article
Yuri Marx Pereira Gomes · Nov 12, 2021

InterSystems IRIS Building Blocks to TOGAF Architecture Domains

The TOGAF is the The Open Group Architecture Framework. It provides an approach for planning, design, implement, deploy and govern your EA (Enterprise Architecture) projects. The TOGAF has a concept called Building Block. It is any element that can be used, reused a executed to deliver value and new functions to the business. In the picture above, I present to you the main IRIS building blocks to create fantastic apps. To learn more about TOGAF and building blocks, see https://www.opengroup.org/togaf. Hi Yuri and DC members As you know I have challenged the DC members to come up with cheat sheets for IRIS and this is a perfect example of what I was hoping to see from DC members. With your permission, I would like to include it in my collection of IRIS Cheat/Information sheets. For other DC members reading this post and there is an aspect of IRIS that you are particularly familiar with or passionate about then have a go and see if you can come up with a similar informative diagram. Typically the cheat/information sheets are one-two page long. When it comes to a language explanation then you would typically create a page on commands, another on operators and so on. Let your inner artist guide your layout and colour scheme. Once I have built up a substantial collection of IRIS topics I'll see if Olga, Evgeny and Anastasia and the ISC Experts will vote on the best layout and all cheat/information sheets will be modified to conform to that look. Who knows, they may even reward the winner. Bear in mind that ISC have a certain style, colour scheme and logo's and this should be taken into consideration/ Nigel P.S. Sorry Yuri for high jacking your Article ro further my personal mission. Thanks Nigel. If you want, send me an email - yurimarx@gmail.com, to get the editable diagram file.
Announcement
Evgeny Shvarov · Jun 22, 2022

InterSystems "Climate Change" Fullstack Contest 2022 Bonuses

Hi developers! Here are the bonus points for the experts voting for your applications in the Fullstack contest 2022: Here we go! Climate Change - 5 isc.rest package - 2 isc.ipm.js package - 2 Embedded Python - 3 Adaptive Analytics (AtScale) Cubes usage - 3 Docker container usage - 2 ZPM Package deployment - 2 Online Demo - 2 Unit Testing - 2 First Article on Developer Community - 2 Second Article On DC - 1 Code Quality pass - 1 Video on YouTube - 3 Climate Change - 5 points Collect the bonus if your solution will help to fight the global warming and climate change problems. Join the Climate Change Full Stack contest kick-off on Monday 27th for more information. isc.rest package - 2 points Use isc-rest package in your full-stack application to collect the bonus. Check the isc-perf-ui application to see how it works. isc.ipm.js package - 2 points Use isc-ipm-js package in your full-stack application to collect the bonus. Check the isc-perf-ui application to see how it works. Embedded Python - 3 points Use Embedded Python in your application and collect 4 extra points. You'll need at least InterSystems IRIS 2021.2 for it. Adaptive Analytics (AtScale) Cubes usage - 3 pointsInterSystems Adaptive Analytics provides the option to create and use AtScale cubes for analytics solutions. You can use the AtScale server we set up for the contest (URL and credentials can be collected in the Discord Channel) to use cubes or create a new one and connect to your IRIS server via JDBC. The visualization layer for your Analytics solution with AtScale can be crafted with Tableau, PowerBI, Excel, or Logi. Documentation, AtScale documentation Training Docker container usage - 2 points The application gets a 'Docker container' bonus if it uses InterSystems IRIS running in a docker container. Here is the simplest template to start from. ZPM Package deployment - 2 points You can collect the bonus if you build and publish the ZPM(InterSystems Package Manager) package for your Full-Stack application so it could be deployed with: zpm "install your-multi-model-solution" command on IRIS with ZPM client installed. ZPM client. Documentation. Online Demo of your project - 2 pointsCollect 2 more bonus points if you provision your project to the cloud as an online demo. You can do it on your own or you can use this template - here is an Example. Here is the video on how to use it. Unit Testing - 2 points Applications that have Unit Testing for the InterSystems IRIS code will collect the bonus. Learn more about ObjectScript Unit Testing in Documentation and on Developer Community. Article on Developer Community - 2 points Post an article on Developer Community that describes the features of your project and collect 2 points for the article. The Second article on Developer Community - 1 point You can collect one more bonus point for the second article or the translation regarding the application. The 3rd and more will not bring more points but the attention will all be yours. Code quality pass with zero bugs - 1 point Include the code quality Github action for code static control and make it show 0 bugs for ObjectScript. Video on YouTube - 3 points Make the Youtube video that demonstrates your product in action and collect 3 bonus points per each. The list of bonuses is subject to change. Stay tuned!
Announcement
Anastasia Dyubaylo · Sep 19, 2022

Winners of the InterSystems Interoperability Contest: Building Sustainable Solutions

Hi Community, We are super excited to announce the winners of the InterSystems Interoperability Contest: Building Sustainable Solutions! Thank you all for participating in our coding competition! Without further ado, the winners are... Experts Nomination 🥇 1st place and $5,000 go to the Sustainable Machine Learning app by @Lucas.Enard2487 🥈 2nd place and $3,000 go to the iris-energy-isodata app by @Muhammad.Waseem 🥉 3rd place and $1,500 go to the iris-megazord app by @José.Pereira 🏅 4th place and $750 go to the n8n-nodes-iris app by @Dmitry.Maslennikov 🏅 5th place and $500 go to the samba-iris-adapter app by @Yuri.Gomes More winners: 🏅 $100 go to the Recycler app by @Oleh.Dontsov 🏅 $100 go to the interoperability-test app by @Oliver.Wilms 🏅 $100 go to the interoperability-soap app by @Oliver.Wilms 🏅 $100 go to the production-monitor app by @Oliver.Wilms 🏅 $100 go to the appmsw-banks-ru app by @MikhailenkoSergey Community Nomination 🥇 1st place and $1,000 go to the iris-megazord app by @José.Pereira 🥈 2nd place and $750 go to the Sustainable Machine Learning app by @Lucas.Enard2487 🥉 3rd place and $500 go to the iris-energy-isodata app by @Muhammad.Waseem Our sincerest congratulations to all the participants and winners! Join the fun next time 😎 Thank you so much everyone for the feedback on my work and the kind comments. Thank you for choosing my application as the winner and for the second place in the community vote !! Congrats @Lucas.Enard2487, it's honestly deserved !! You are proof that all it takes is an internship of a few months to become a real expert.Well done. Congratulation @Lucas.Enard2487 and all the winners Thank you so much Sylvain ! Thank you Muhammad, it was a pleasure to participate! Congratulations to all winners! Congratulations to all the winners!! The InterSystems Interoperability Contest Winners video is available on InterSystems Developer's YouTube! ⏯ Winners of InterSystems Interoperability Programming Contest Check it out!
Announcement
Anastasia Dyubaylo · Aug 1, 2022

Winners of InterSystems Tech Article Contest: Python Edition

Hi Developers! We have great new articles for your to read and enjoy, thanks to our wonderful participants of the 3rd InterSystems Tech Article Contest: Python Edition! 🌟 12 AMAZING ARTICLES 🌟 And now it's time to announce the winners! Let's meet the winners and their articles: ⭐️ Expert Awards – winners selected by InterSystems experts: 🥇 1st place: IRIS Embedded Python with Azure Service Bus (ASB) use case by @Yaron.Munz8173 🥈 2nd place: Getting known with Django part 1 by @Dmitry.Maslennikov 🥉 3rd place: Introduction to Web Scraping with Embedded Python - Let’s Extract python job’s by @Rizmaan.Marikar2583 ⭐️ Community Award – winner selected by Community members, article with the most likes: 🏆 IRIS Embedded Python with Azure Service Bus (ASB) use case by @Yaron.Munz8173 And... ⭐️ We'd like to reward @Dmitry.Maslennikov for a series of 3 articles! He will get Apple HomePod mini or Apple Pencil. Let's congratulate all our heroes, who took part in the Tech Article contest #3: @Yuri.Gomes @Robert.Cemper1003 @Muhammad.Waseem @Veerarajan.Karunanithi9493 @Renato.Banzai @Ramil.TK THANK YOU ALL! You have made an incredible contribution to our Dev Community! The prizes are in production now. We will contact all the participants when they are ready to ship. Congratulations to the winners and the participants! Great job! 👏👏 Congratulations to all the winners
Announcement
Janine Perkins · Feb 16, 2016

Featured InterSystems Online Course - Caché Objects Introduction

Do you need to build an object-oriented application using Caché? Take this course to learn how to create, retrieve, update and delete objects in Caché.Caché Objects IntroductionLearn the basics of Caché objects. This course will provide an overview of Caché Classes, Methods, and interaction with the Caché database by creating, saving, loading and deleting objects. The lessons in this course assume that you have some previous object-oriented programming experience. Learn More.