Search

Clear filter
Announcement
Anastasia Dyubaylo · Oct 26, 2020

Virtual Summit 2020: Best Applications of InterSystems Programming Contest Series

Hey Community, We're pleased to invite you all to the Virtual Summit 2020 session dedicated to InterSystems online programming contests, best winning projects, and their developers! Please join: ⚡️ "Best applications of InterSystems programming contest series: Best IntegratedML, FHIR, REST API, Native API, ObjectScript solutions" session ⚡️ Please check the details below. We will talk about the series of online contests for InterSystems developers. This session will focus on the contest winners and the top applications. Our developers will share their experience of participating in the exiting InterSystems coding marathon and will show demos of their winning projects. Speakers: 🗣 @Anastasia.Dyubaylo, Community Manager, InterSystems 🗣 @Henrique.GonçalvesDias, System Management Specialist / Database Administrator, Sao Paulo Federal Court🗣 @José.Pereira, Business Intelligence Developer, Shift Consultoria e Sistemas Ltda🗣 @Henry.HamonPereira, System Analyst, BPlus Tecnologia🗣 @Dmitry.Maslennikov, Co-founder, CTO and Developer Advocate, CaretDev Corp🗣 @Renato.Banzai, Machine Learning Engineer Coordinator, Itaú Unibanco Date & Time: ➡️ Day 1: Tuesday, October 27 (Boston starts Monday, October 26) APAC UTC Time Boston Time Best Applications of InterSystems Programming Contest Series 2:50 AM 10:50 PM NA/LATAM/EMEA UTC Time Boston Time Best Applications of InterSystems Programming Contest Series 3:50 PM 11:50 PM So! We will be happy to answer your questions in a virtual chat on the conference platform – please join! We'll start in 15 minutes! Please join! 📍 https://intersystems.6connex.com/event/virtual-summit/en-us/contents/433176/share?rid=FocusSessions&nid=804450 💥 Join us NOW here: https://intersystems.6connex.com/event/virtual-summit/en-us/contents/433253/share?rid=FocusSessions&nid=804450
Article
John Murray · Oct 27, 2020

Using InterSystems ObjectScript for VS Code - How to report issues

Now that 1.0 has shipped and is featuring in various sessions at Virtual Summit 2020 it seems like a good time to offer some guidance on how to report problems. InterSystems ObjectScript for VS Code consists of three collaborating VS Code extensions. For ease of installation and management there's a fourth entity, the InterSystems ObjectScript Extension Pack. It's a great way to get started with minimum clicks, and handy to have even if you have already installed the other extensions. This modular architecture also means there are three different GitHub repositories where issues can be created. Fortunately VS Code itself helps with the task. Here's how to use it: 1. From the Help menu in VS Code choose Report Issue. Alternatively, open the Command Palette (I typically do this by pressing the F1 key) and run Help: Report Issue... (Pro Palette Tip: try typing just hri and see how fast it gets you to the right command) 2. A dialog like this appears: 3. Use the first field to classify your issue: Bug Report Feature Request Performance Issue 4. In the second field pick "An extension". 5. The third dropdown lets you pick one of your installed extensions. You can also type a few characters to find the right entry. For example, isls quickly selects "InterSystems Language Server" for me. Which one to choose? Here's a rough guide: InterSystems Language Server code colo(u)ring Intellisense InterSystems ObjectScript export, import and compile ObjectScript Explorer (browsing namespace contents) direct server-side editing using isfs:// folders in a workspace integration with server-side source control etc InterSystems Server Manager password management in local keychain definition and selection of entries in `intersystems.servers` If you can't decide, pick InterSystems ObjectScript. 6. Type a descriptive one-line summary of your issue. The dialog may offer a list of existing issues which could be duplicates. If you don't find one that covers yours, proceed. 7. Begin to enter details. At this stage I usually type just one character, then click "Preview on GitHub" to launch a browser page where I can use the familiar GH issue UI to complete my report. Tips for use there: Paste images from your clipboard directly into the report field on GH. For hard-to-describe issues an animated GIF gets bonus points. Link to other issues by prefixing the target number with # Remember that whatever you post here is visible to anyone on the Internet. Mask/remove confidential information. Be polite. 8. When you are happy with what you have written (tip - use the Preview tab) click "Submit new issue". Using Help: Report Issue... means your version numbers are automatically added.
Announcement
Anastasia Dyubaylo · Oct 27, 2020

Ask InterSystems Product Managers on Live Q&A Session at #VSummit20

Hey Developers, We remind you about a great opportunity to make a live conversation with InterSystems Product Managers Team on Live Q&A Sessions at Virtual Summit 2020! 🗓 TODAY at 12:40 PM EDT at https://intersystems.6connex.com/event/virtual-summit/en-us/contents/434370/share?rid=FocusSessions&nid=804450 And now we've added more options to make it even easier for you to ask questions upfront: ✅ Submit your questions in the comments to this post ✅ Submit your question to our Discord Channel: discord.gg/WqVjtD ✅ Submit your questions to VS2020questions@InterSystems.com ✅ Send your question personally to @Anastasia.Dyubaylo or @Evgeny.Shvarov in Direct Messages on the community ✅ Submit your question to Q&A Chat on the conference platform during the session Note: We will pass all your questions to the PM team, and you'll receive answers during the Live Q&A Sessions. And let me introduce the whole InterSystems Product Managers Team: @Jeffrey.Fried, Director of Product Managers @Andreas.Dieckow, Principal Product Manager@Robert.Kuszewski, Product Manager - Developer Experience @Raj.Singh5479, Product Manager - Developer Experience @Carmen.Logue, Product Manager - AI and Analytics @Thomas.Dyar, Product Specialist - Machine Learning @Steven.LeBlanc, Product Specialist - Cloud Operations @Patrick.Jamieson3621, Product Manager - Health Informatics Platform@Benjamin.DeBoe, Product Manager @Stefan.Wittmann, Product Manager@Luca.Ravazzolo, Product Manager @Craig.Lee, Product Specialist So! Please don't hesitate to ask your questions! Our PM team will be happy to answer you! ➡️ Our Live Q&A Sessions last from November 27 to 29! Schedule in this post. Please join us now! 📍 https://intersystems.6connex.com/event/virtual-summit/en-us/contents/433280/share?rid=FocusSessions&nid=804450 🗓 TODAY at 12:40 PM EDT at https://intersystems.6connex.com/event/virtual-summit/en-us/contents/434195/share?rid=FocusSessions&nid=804450 Please feel free to submit your questions to our PMs team! Don't miss today's Live Q&A Session: 🗓 TODAY at 12:40 PM EDT at https://intersystems.6connex.com/event/virtual-summit/en-us/contents/434370/share?rid=FocusSessions&nid=804450 Don't hesitate to ask your questions!
Article
Yuri Marx Pereira Gomes · Dec 21, 2020

Do NLP in any website with InterSystems IRIS and Crawler4J

Today, is important analyze the content into portals and websites to get informed, analyze the concorrents, analyze trends, the richness and scope of content of websites. To do this, you can alocate people to read thousand of pages and spend much money or use a crawler to extract website content and execute NLP on it. You will get all necessary insights to analyze and make precise decisions in a few minutes. Gartner defines web crawler as: "A piece of software (also called a spider) designed to follow hyperlinks to their completion and to return to previously visited Internet addresses". There are many web crawlers to extract all relevant website content. In this article I present to you Crawler4J. It is the most used software to extract website content and has MIT license. Crawler4J needs only the root URL, the depth (how many child sites will be visited) and total pages (if you want limit the pages extracted). By default only textual content will be extracted, but you config the engine to extract all website files! I created a PEX Java service to allows you using an IRIS production to extract the textual content to any website. the content is stored into a local folder and the IRIS NLP reads these files and show to you all text analytics insights! To see it in action follow these procedures: 1 - Go to https://openexchange.intersystems.com/package/website-analyzer and click Download button to see app github repository. 2 - Create a local folder in your machine and execute: https://github.com/yurimarx/website-analyzer.git. 3 - Go to the project directory: cd website-analyzer. 4 - Execute: docker-compose build (wait some minutes) 5 - Execute: docker-compose up -d 6 - Open your local InterSystems IRIS: http://localhost:52773/csp/sys/UtilHome.csp (user _SYSTEM and password SYS) 7 - Open the production and start it: http://localhost:52773/csp/irisapp/EnsPortal.ProductionConfig.zen?PRODUCTION=dc.WebsiteAnalyzer.WebsiteAnalyzerProduction 8 - Now, go to your browser to initiate a crawler: http://localhost:9980?Website=https://www.intersystems.com/ (to analyze intersystems site, any URL can be used) 9 - Wait between 40 and 60 seconds. A message you be returned (extracted with success). See above sample. 10 - Now go to Text Analytics to analyze the content extracted: http://localhost:52773/csp/IRISAPP/_iKnow.UI.KnowledgePortal.zen?$NAMESPACE=IRISAPP&domain=1 11 - Return to the production and see Depth and TotalPages parameters, increase the values if you want extract more content. Change Depth to analyze sub links and change TotalPages to analyze more pages. 12 - Enjoy! And if you liked, vote (https://openexchange.intersystems.com/contest/current) in my app: website-analyzer I will write a part 2 with implementations details, but all source code is available in Github. Hi Yuri!Very interesting app!But as I am not a developer, could you please tell more about the results the analizer will give to a marketer or a website owner? Which insights could be extracted form the analysis? Hi @Elena.E I published a new article about marketing and this app: https://community.intersystems.com/post/marketing-analysis-intersystems-website-using-website-analyzer About the possible results allows you: 1. Get the most popular words, terms and sentences wrote into the website, so you discover the business focus, editorial line and marketing topics. 2. Sentiment analysis into the sentences, the content is has positive or negative focus 3. Rich cloud words to all the website. Rich because is a semantic analysis, with links between words and sentences 4. Dominance and frequence analysis, to analyze trends 5. Connections paths between sentences, to analyze depth and coverage about editorial topics 6. Search engine of topics covered, the website discuss a topic? How many times do this? 7. Product analysis, the app segment product names and link the all other analysis, so you can know if the website says about your product and Services and the frequency Hi Yuri! This is a fantastic app! And works! But the way to set up the crawler is not that convenient and not very user-friendly. You never know if the crawler works and if you placed the URL right. Is it possible to add a page which will let you place the URL, start/stop crawler and display some progress if any? Maybe I ask a lot :) Anyway, this is a really great tool to perform IRIS NLP vs ANY site:
Article
Mihoko Iijima · Mar 5, 2021

[InterSystems IRIS for the First Time] Interoperability: Let's learn how it works

**This article is a continuation of this post.** The purpose of this article is to explain how the Interoperability menu works for system integration. ![image](/sites/default/files/inline/images/image1041jp.png) The left side of the figure is the window for accepting information sent from external systems. There are various ways to receive information, such as monitoring the specified directory at regular intervals to read files, periodically querying the database, waiting for input, or directly calling and having it passed from applications in other systems. In the system integration mechanism created in the IRIS Interoperability menu, the received information is stored in an object called a **message**. The **message** is sent to the component responsible for the subsequent processing. A **message** can be created using all the received information or only a part of it. Suppose you want to send the information contained in the **message** to an external system. In that case, you need to send the message to the component responsible for requesting the external network to process it (the right side of the figure). The component that receives the **message** will request the external system to process it. Besides, suppose a **message** requires human review, data conversion, or data appending. In that case, the **message** is sent to the component in the middle of the diagram (BPM), which is responsible for coordinating the processing flow. **Messages** are used to send and receive data between each component. When a **message** is sent or received, the message is automatically stored in the database. Since **messages** are stored in the database, it is possible to check the difference before and after the data conversion. Check the **message** that was the source of a problem during an operation or start over (resend) from the middle of the process. Verify the status using **messages** at each stage of development, testing, and operation. A simple picture of system integration would be divided into three components (business services, business processes, and business operations), as shown in the figure below. There is also a definition called "**production**" that stores information about the components to be used (e.g., connection information). ![image](/sites/default/files/inline/images/image1043jp.png) The role of each component is as follows: **Business Services** Responsible for receiving information from external sources, creating **messages**, and sending **messages** to other components. **Business Processes** This role is activated when a **message** is received and is responsible for coordinating the process (calling components in the defined order, waiting for responses, waiting for human review results, etc.). **Business Operations** This function is activated when a **message** is received and has a role in requesting the external system to process the message. **Messages** are used to send and receive data between components. Components other than business services initiate processing when they receive a **message**. The question is, what is the purpose of creating and using this **message**? **Messages** are created by retrieving the information you want to relay to the external system from entered data into the business service. Since not all external systems connected to IRIS use the same type of data format for transmission, and the content to be relayed varies, the production can freely define message classes according to the information. There are two types of **messages**: request (= request message) and response (= response message). The **message** that triggers the component's activation is called request (= request message), and the **message** that the component responds to after processing is called response (= response message). These **messages** will be designed while considering the process of relaying them. In the following articles, we will use a study case to outline the creation of **productions**, **messages**, and components. Nice article. To be perfect, iris interoperability could be implement bpmn to BPM task, but it is done using bpel.
Article
Mihoko Iijima · Mar 5, 2021

[InterSystems IRIS for the First Time] Interoperability: Creating Components (Business Process)

**This article is a continuation of this post.** In the previous article, we discussed business operations' creation from the components required for system integration. In this article, you will learn how to create a business process that calls the two business operations you have defined in the sequence order. * Production * Message * **Components** * Business Services * **Business Processes** * Business Operations (previous post) The business process acts as the coordinator (command center) of the process. The processing adjustments you may want to implement in the sample include the following: Step 1: Provide the city name to an external Web API and request weather information.Step 2: Register the result of the query (weather information) from Step 1 and the name of the purchased product received at the start of the production. In the sample business process, we will wait for the answer to step 1 and adjust step 2 to operate. In the process of waiting for a response (i.e., synchronization), for instance, what happens if step 1) doesn't respond for a few days? If new messages are delivered to the business process while waiting for a response for a few days, the messages will not be dismissed since they are stored in a queue. However, the business process will not process new messages, and there will be a delay in the operation. Note: Business processes and business operations have cues. Therefore, in production, when there is a synchronous call, there are two ways for the business process to move: **A) to synchronize perfectly**, and B) to save the state of the business process itself in the database and hand over the execution environment so that other processes can run while waiting for a response. **A) How to synchronize perfectly:** While a synchronous call is being made, the business process's processing is ongoing, and waiting for the next message to be processed until all processing is completed.➡This function is used when the order of processing needs to be guaranteed in the first-in-first-out method. B) The method of saving the state of the business process itself in the database and hand over the execution environment so that other processes can run while waiting for a response is When a synchronous call is made, the process saves its state in the database. When a response message is received, and it is time to process the message, it opens the database and executes the next process. (IRIS will manage the storage and re-opening of business processes in the database). ➡ Used when it is acceptable to switch the processing order of messages (i.e., when it is allowed to process more and more different messages received while waiting for a response). In the sample, **B)** is used. There are two types of editors for creating business processes: a Business Process Editor that allows you to place processing boxes (activities) and implement them while defining their execution, and a method for creating them using ObjectScript in Studio or VSCode. If you use the Business Process Editor, you will use the call activity to invoke the component, but this activity is **implemented** in the **B)** way. **Of course, you can also implement the** **A)** method in the Business Process Editor, except that you will not use the call activity in that case (you will use the code activity). In this section, I will explain how to create it. If you use the Business Process Editor, you write them in the Management Portal. You can also open the business process from the production configuration page. The figure below shows the procedure. ![image](/sites/default/files/inline/images/image1097jp.png) Icons like ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1098).png) in this editor are called activities, and those marked with are activities that can invoke other components. This symbol![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1099).png) indicates that a response message will be returned (i.e., a synchronous call will be made). The activity defaults to the asynchronous call setting, which can be changed as needed. Now let's look at business processes, which are components that are invoked upon receiving a request message, as well as business operations. In the sample, the request message: It is set to start when it receives a Start.Request and does not return a response message. ![image](/sites/default/files/inline/images/image1100jp.png) In the business process, messages appear in various situations. Request messages that are sent to business processes. Request message (+ response message) to be sent when calling another component using the activity. In the Business Process Editor, the names of the objects that store messages are clearly separated to be able to see which message was sent from which destination. ![image](/sites/default/files/inline/images/image1130jp.png) * request(basic requirements) The message that triggered the start of the business process, in our example, is Start.Request (the message to be specified in the Request settings on the Context tab in the Business Process Editor) * response(basic response) Response message to return to the caller of the business process (not used in the sample) (message to be specified in the settings of the response in the context tab in the Business Process Editor) * callrequest(request message) Request message to be sent when calling the component determined by the activity. * callresponse(response message) Response message returned from the component specified by the activity. **callrequest and callresponse are objects that will be deleted when the call processing of the activity is completed.** All other objects will not disappear until the business process is finished. Now comes the problem when callresponse disappears. That's because, as you can see in this sample, **When calling a component, if you want to use the response result of a previously called component, the response message will be lost, and the information that was to be used in the next component will be erased.** It is a problem 😓 What should we do?・・・・・ In such a case, you can use the context object. The context object, like request/response, is an object that survives until the end of the business process. Moreover, since context is a generic object, it can be defined in the process editor. In addition to the context, the response object can also be used if it has a property that matches the inherited data's saving. Now, let's go over the steps again. ![image](/sites/default/files/inline/images/image1103jp.png) Response message in the light blue balloon: Start.Response is an object that will be deleted when the process is finished. Since we want to use the response message (Start.Response) that contains the weather information as the message to be sent to the next [Business Operation for DB Update], we have to implement the context object in a way that all the property values of the response message (Start.Response) can be assigned to it. Then what is the setting for the context property? The properties are defined in "Context Properties" in the Context tab of the Business Process Editor. In this case, we would like to save all the properties of the response message (Start.Response) to the context object. Therefore, the property type specification is set to Start.Response. ![image](/sites/default/files/inline/images/image1104jp.png) Following that, check the settings in the activity. ![image](/sites/default/files/inline/images/image1105jp.png) The request and response messages have a button called ○○ Builder. Clicking on this button will launch a line-drawing editor that allows you to specify what you want to register in the properties of each message. ![image](/sites/default/files/inline/images/image1106jp.png) After this, the business operation for requesting a database update (Start.SQLInsertOperation or Start.InsertOperation) is called in the same way with the activity, and you are all set. (For more information, see Configuring ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1107).png) for Business Processes). Once you have completed the verification, you can test it. The testing method is the same as the one used for testing business operations (see this article). The trace after the test is as follows: ![image](/sites/default/files/inline/images/image1108jp.png) Since the business process is the coordinator, we could see that it invoked the defined components sequentially, keeping the synchronous execution. Note 1: The sample only deals with the call activity, but various other activities such as data transformation. Note 2: Business processes created by ObjectScript alone, other than the Business Process Editor, inherit from the Ens.BusinessProcess class. If it is created in the Business Process Editor, it inherits from the Ens.BusinessProcessBPL class. The business process is the coordinator of the system integration process.The Business Process Editor provides the following types of variables for messages (request/response/callrequest/callreponse/context).A business process created with the Business Process Editor can work in a way that does not delay other messages, even if there is synchronization in the component's calling. In the next section, we will finally show you how to develop the last component: business services.
Article
Mihoko Iijima · Mar 5, 2021

[InterSystems IRIS for the First Time] Interoperability: Creating Components (Business Operation)

**This article is a continuation of this post.** In the previous article, we reviewed how to create and define messages used to send and receive data between components. In this article, I will explain how to create a business operation from the component creation methods. * Production * Message(previous article) * **Components** * Business Services * Business Processes * **Business Operations** We will quickly check the code by referring to the sample.。 ![image](/sites/default/files/inline/images/image1129jp.png) | Component Name | Role | |---|---| | Start.FileBS | A business service that uses file inbound adapter to read files placed in a specified directory at regular intervals. | | Start.NonAdapterBS | Business services that allow applications and users to input information directly without using an adapter. | | Start.WS.WebServiceBS | Business services that allow people to enter information using web services. | | Start.WeatherCheckProcess | A business process that controls the procedure for acquiring weather information and then registering it in a database. | | Start.GetKionOperation | Business operation to pass the city name to the web service that provides weather information and sent back. | | Start.SQLInsertOperation | Business operations using SQL outbound adapters to request registration of weather and purchase information into the database. | | Start.InsertOperation | Business operations that perform updates to tables in InterSystems IRIS without the use of adapters. | Note: BS stands for Business Services, BP for Business Processes, and BO for Business Operations. You need to write ObjectScript in Business Services and Business Operations and can be created in VSCode or Studio. Business Processes can also be made in the Management Portal (see this article for more information on using VSCode). There is no particular order of creation, but the external site to be connected to is a public site and can be used immediately in this sample. In this case, it is convenient to start with the business operation to make testing easier. After creating the components, there are test page in the production for business processes and business operations. However, testing is disabled by default in the production definition to avoid random testing in the production environment. For details on how to allow "Testing Enables" in Production, use the following settings (the sample Production has been set to "Testing Enabled" in advance): ![image](/sites/default/files/inline/images/image1080jp.png) ### 1) Business Operations In the sample, two types of business operations are provided. One operation is to pass the city’s name to an external Web API via REST and request the acquisition of weather information. The other operation is to give the weather information and the name of the purchased product to the InterSystems IRIS database and ask for the update process. #### 1)-1 REST Business Operations Let’s start by creating an operation that calls an external Web API via REST. This operation starts the GetKion() method when a Start.Request message is entered, queries an external site, and returns the weather information in a Start.Response message. See here for code details. To create a business operation for REST, inherit from **EnsLib.REST.Operation** . ```objectscript Class Start.GetKionOperation Extends EnsLib.REST.Operation ``` Inheritance of this class provides the following methods in IRIS that match the HTTP methods. Please refer to the documentation for details. GetURL()— used for HTTP GET operations. PostURL()— used in HTTP POST operations. PutURL()— used in a HTTP PUT operations. DeleteURL()— used in a HTTP DELETE operations. For REST, use the adapter **EnsLib.HTTP.OutboundAdapter**. Set the adapter name to the **ADAPTER** parameter and the Adapter property, as shown in the example. The INVOCATION parameter configures the **Queue**. ```objectscript Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter"; Property Adapter As EnsLib.HTTP.OutboundAdapter; Parameter INVOCATION = "Queue"; ``` It is necessary to specify the OpenWeather API key to be obtained at runtime. There is a way to display settings that vary depending on the environment in the production settings. The procedure is as follows: 1. Define the properties 2. Specify the name of the property you created in the SETTINGS parameter (if there are multiple properties, separate them with commas). Optionally, you can also specify a category (use “property name: category name”). An example code is shown below. ```objectscript /// APIキーを指定します Property appid As %String; /// specify lang option for OpenWeather API (default = ja = japanese) Property lang As %String [ InitialExpression = "ja" ]; Parameter SETTINGS = "lang:OpenWeatherMap,appid:OpenWeatherMap"; ``` The Production Settings page displays the following. The description in the line immediately before the property definition is also displayed in the production settings page, as shown in the figure. ![image](/sites/default/files/inline/images/image1084jp.png) Then, we will review the message map, which is an essential setting for business operations. ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1085).png) The above definition is defined so that the GetKion() method will work when the **Start.Request message** is **sent**. In the GetKion() method, the city name can be obtained from the request message’s Area property passed as input information. By setting the city name as a parameter of the URL published by the external Web API and calling it, you can obtain weather information. The HTTP server and URL settings are configured in the Production page of the Management Portal. To obtain the settings, use the **Adapter** property provided by the HTTP outbound adapter. Example) to specify a URL, use ..Adapter.URL Use the GetURL() method provided by Business Operations for REST to call an external site. The first parameter is the URL to be executed (i.e., the URL specified in the required parameters such as city name). The second parameter is the HTTP response with parameters passed by reference. Since the weather information is stored in JSON format in the HTTP response, the operation is complete when the data is registered in the response message (=pResponse). ![image](/sites/default/files/inline/images/image1086jp.png) The response message class’s name is specified in the second parameter of the created method by passing reference. ```objectscript Method GetKion(pRequest As Start.Request, Output pResponse As Start.Response) As %Status ``` To return a response message to the caller, create an instance of the response message, store it in the second parameter variable (_**pResponse**_), and set the necessary information in the properties. ```objectscript set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description set pResponse.KionMax=weatherinfo.main."temp_max" set pResponse.KionMin=weatherinfo.main."temp_min" set pResponse.Area=weatherinfo.name // this code is fit to Japan time because weatherinfo.dt is UTC set unixEpochFormat=weatherinfo.dt+32400 set dt=$system.SQL.Functions.DATEADD("s",unixEpochFormat,"1970-01-01 00:00:00") set pResponse.AreaPublicTime=dt ``` Since HTTP responses from external sites are returned in JSON format, the stream that could be obtained from the HTTP response is used to convert it into a dynamic object that is convenient for JSON operations within IRIS. ```objectscript set weatherinfo={}.%FromJSON(tHttpResponse.Data) ``` An example of a returned JSON string is shown below: ```json { "coord": { "lon": 135.5022, "lat": 34.6937 }, "weather": [ { "id": 803, "main": "Clouds", "description": "broken clouds", "icon": "04d" } ], "base": "stations", "main": { "temp": 11.38, "feels_like": 8.33, "temp_min": 11, "temp_max": 12.22, "pressure": 1007, "humidity": 62 }, "visibility": 10000, "wind": { "speed": 2.57, "deg": 220 }, "clouds": { "all": 75 }, "dt": 1611820991, "sys": { "type": 1, "id": 8032, "country": "JP", "sunrise": 1611784750, "sunset": 1611822143 }, "timezone": 32400, "id": 1853909, "name": "Osaka", "cod": 200 } ``` The maximum temperature, minimum temperature, and weather can be obtained as follows: ```objectscript set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description set pResponse.KionMax=weatherinfo.main."temp_max" set pResponse.KionMin=weatherinfo.main."temp_min" ``` If you would like to learn more about JSON manipulation in IRIS, please refer to this article and documentation. Now, let’s use the production testing tool to see if we can get the weather information properly. Open the Production page (**Management Portal> Interoperability> Configuration> Production**), click Start.GetKionOperation, and then click the **"Test" button** on the "**Action**" tab. Specify a city name (Naha, Sapporo, Nagano, Shinjuku, etc.) for **Area**, and click the “**Run Test Service**” button. You can see the test results below, with the maximum and minimum temperatures and the weather listed. ![image](/sites/default/files/inline/images/image1089jp.png) Continue to learn how to use the Trace page. ![image](/sites/default/files/inline/images/image1090jp.png) Selecting a horizontal rectangle such as ![image](/sites/default/files/inline/images/image1093jp.png) in the left screen causes the information, in the right screen, to change. Messages sent and received during the system integration process are automatically saved in the database. Using the message Visual Trace page, you can see in detail what messages were passed to which components in chronological order and whether there was a response or not. Besides, if an error occurs, “An error occurred while sending/receiving/receiving □ message to the component from ○ to △.” a red mark will appear where the error occurred so that you can see it. Of course, in addition to tracing, we also have an event log page. **(Management Portal > [Interoperability] > [View] > [Event Log])** Moving on, let’s check out the operation to request an update to the database. #### 1)-2 Business operations that request updates to the database The sample provides two types of operations: Start.SQLInsertOperation and Start.InsertOperation. Each of them is an operation to request a database update, but Start.SQLInsertOperation uses the SQL outbound adapter, while Start.InsertOperation has no adapter. The difference between the two is, operation using the SQL outbound adapter is assumed to be accessed via ODBC/JDBC connections so that the database connection destination can be switched in the production settings. For operations that do not use adapters, it is assumed that the DB update target is a database within the range of visibility from the production configuration and that no connection destination switching occurs. The IRIS database can be used to store arbitrary data during system integration. However, suppose the system configuration changes for some reason a few years later, and the need to connect to a database on a different server arises. In that case, the operation without the adapter cannot be continued. On the other hand, operations using the SQL outbound adapter can be operated if there are no changes processing the content of the destination specification (if there is no problem with the SQL statement to be executed, it can be connected to databases of different products). During system integration, there may be cases where connection information changes due to external system reasons. Therefore it is vital to have a design that can flexibly respond to changes. For this reason, it is recommended to create components that support external connections in a loosely coupled manner. However, suppose there is no change in the configuration in the future. In that case, you can access the database in IRIS without using the ODBC/JDBC connection, so you can choose to use the adapter or not, depending on your usage. Let’s take a look at the Start.SQLInsertOperation code that uses the adapter. The adapter used in the sample is an SQL outbound adapter, which allows you to request the database to execute SQL statements. Different adapters provide different methods. Please refer to the documentation for details on the methods provided by the adapters. ![image](/sites/default/files/inline/images/image1094jp.png) Then review the code for Start.InsertOperation, without using the adapter. Whether you use an adapter or not, the message map and method definitions for the operation are required. If you do not use an adapter, you do not need to define the “Paramter” and “Property” for the adapter. ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1096).png) Business operations without adapters: In Start.InsertOperation, SQL is executed using ObjectScript (the comment statement is the update process in object operations). The implementation is satisfactory if the database to be updated is not detached from IRIS. We found out that operations using adapters provide a reliable method to request processing from the destination. We also confirmed that it is possible to create operations without using adapters and freely write code for them. Next, I would like to explain how to create a business process that calls the operations for getting weather information and updating the database in the correct order.
Article
Evgeny Shvarov · Feb 9, 2021

Deploying InterSystems IRIS Embedded Python Solutions with ZPM Package Manager

Hi developers! Recently we announced the preview of Embedded Python technology in InterSystems IRIS. Check the Sneak Peak video by @Robert.Kuszewski. Embedded python gives the option to load and run python code in the InterSystems IRIS server. You can either use library modules from Python pip, like numpy, pandas, etc, or you can write your own python modules in the form of standalone py files. So once you are happy with the development phase of the IRIS Embedded Python solution there is another very important question of how the solution could be deployed. One of the options you can consider is using the ZPM Package manager which is described in this article. I want to introduce you a template repository that introduces a deployable ZPM module and shows how to build such a module. The example is very simple and it contains one sample.py, that demonstrates the usage of pandas and NumPy python libs and the test.cls objectscript class that makes calls to it. The solution could be installed with ZPM as: zpm "install iris-python-template" NB: Make sure the IRIS you install the module contains an Embedded Python preview code. E.g. you can use the image: intersystemsdc/iris-ml-community:2020.3.0.302.0-zpm With commands: docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-ml-community:2020.3.0.302.0-zpm docker exec -it my-iris iris session IRIS USER>zpm "install iris-python-template" [iris-python-template] Reload START ... [iris-python-template] Activate SUCCESS The module installs sample.py python file and titanic.csv sample file along with test.cls to the system. E.g. sample.py exposes meanage() function which accepts the csv file path and calculates the mean value using numpy and pandas llibraries. test.cls objectscript class loads the python module with the following line code: set tt=##class(%SYS.Python).Import("sample") then provides the path to csv file and collects the result of the function. Here is how you can test the installed module: USER>d ##class(dc.python.test).Today() 2021-02-09 USER>d ##class(dc.python.test).TitanicMeanAge() mean age=29.69911764705882 USER> OK! Next, is how to deploy Embedded Python modules? You can add the following line to module.xml: <FileCopy Name="python/" Target="${mgrdir}python/"/> the line copies all python files from the python folder of the repository to the python folder inside /mgr folder of IRIS installation. This lets the python modules then be imported from ObjectScript via ##class(%SYS.Python).Import() method. Also if you want the data files to be packed into the ZPM module check another FileCopy line in the module that imports the data folder from the repository along with titanic.csv into the package: <FileCopy Name="data/" Target="${mgrdir}data/"/> this is it! Feel free to use the template as a foundation for your projects with Embedded Python for IRIS! Any questions and comments are appreciated! Hi Evgeny! I tried embedded Python in my multi model contest app but used an ugly approach to deploy Python code. I didn't realize that ZPM could do this for me... Nice tip! Thanks, Jose! Yes, indeed ZPM option of delivering files to a target IRIS installation looks elegant and robust. Maybe it could be used not only for Embedded python but e.g. for jar-files delivery and data. @Yuri.Gomes, what do you think? Nice option! OK. I did node.js, @Yuri.Gomes Java is yours. A suggestion is allows ZPM to copy from a HTTP URL like a github address.
Announcement
Benjamin De Boe · Oct 19, 2020

InterSystems IRIS and IRIS for Health 2020.4 preview now available!

Preview releases are now available for the 2020.4 version of InterSystems IRIS, IRIS for Health and IRIS Studio. As this is a preview release, we are eager to learn from your experiences with this new release ahead of its General Availability next month.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 of InterSystems IRIS. 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 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.524.0 docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.524.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.524.0 docker pull store/intersystems/iris-community-arm64:2020.4.0.524.0 docker pull store/intersystems/irishealth-community:2020.4.0.524.0 docker pull store/intersystems/irishealth-community-arm64:2020.4.0.524.0 Alternatively, tarball versions of all container images are available via the WRC's preview download site. InterSystems IRIS Studio 2020.4 is a standalone development image supported on Microsoft Windows. It works with InterSystems IRIS and IRIS for Health version 2020.4 and below, as well as with Caché and Ensemble. It can be downloaded via the WRC's preview download site. The build number for this preview release is 2020.4.0.524.0 (updated from 2020.4.0.521.0 on Nov 2nd) And we updated the images with ZPM 0.2.7 too: intersystemsdc/iris-community:2020.3.0.221.0-zpm intersystemsdc/iris-community:2020.4.0.524.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.524.0-zpm intersystemsdc/iris-community-arm64:2020.4.0.524.0-zpm intersystemsdc/irishealth-community-arm64:2020.4.0.524.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.524.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.524.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community-arm64:2020.4.0.524.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community-arm64:2020.4.0.524.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 Hi, SuperServer port since 2020.3 is 1972 : 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.521.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.521.0-zpm Thanks again, Guillaume! fixed! Thank's for this! UPDATE: We uploaded an updated version of our 2020.4 preview release, including a small number of additional enhancements in the broader SQL area that missed the boat for the scheduled preview release date. These features meet the quality requirements for inclusion in the GA release later this month so we thought it was worthwhile sharing them in preview mode for users to try ahead of time. The new build number is 524, up from 521. The new images have been posted on the ICR, Docker Store and WRC locations as described above and the docker pull scripts have been updated. As always, we're looking forward to your feedback! ZPM images are updated with a new IRIS 2020.4.0.524.0 build. Hi - Note that using the ZPM images to build a HealthShare Foundation namespace (interoperability enabled database and namespace), using the HealthShare -> Installer wizard -> Configure Foundation ; . OR you can try this, using this line: ZN "HSLIB"DO ##class(HS.HC.Util.Installer).InstallFoundation("MYNAMESPACE") will hang mid-way. However, above operations complete successfully using the standard, non-ZPM enhanced builds.I haven't tested any other functionality. Steve Thanks, Steve! Just to clarify: this issue is related to ZPM-enabled IRIS for Health images, right? Filed the issue. yes Just tested on 2020.4 zpm enabled: HSLIB>DO ##class(HS.HC.Util.Installer).InstallFoundation("HSFOUNDATION") HS.Util.Installer.Foundation:Install User 'irisowner' has %Admin_Manage:USE privilege HS.Util.Installer.Foundation:Install tComponent Foundation = HSFOUNDATION HS.Util.Installer.Foundation:Install About to Create Database HSFOUNDATION HS.Util.Installer.Foundation:Install Create IRIS.DAT in HSFOUNDATION HS.Util.Installer.Foundation:Install Made Namespace HSFOUNDATION HS.HC.Util.Installer:EnableEnsemble Created Ensemble Mappings HS.HC.Util.Installer:EnableEnsemble Configuration Loaded HS.HC.Util.Installer:EnableEnsemble Compiling Ensemble DeepSee Dashboard HS.HC.Util.Installer:EnableEnsemble Ensemble Enabled HS.Util.Installer.Foundation:SecureInstall Added Package mappings HS,HSMOD,SchemaMap HS.Util.Installer.Foundation:SecureInstall Added include mappings HSMOD.*,SchemaMap* HS.Util.Installer.Foundation:Install Created Portal CSP app HS.Util.Installer.Foundation:CreateProduction Compiled template HSFOUNDATIONPKG.FoundationProduction HS.Util.Installer.Foundation:AdditionalSetup Set Credential HS_Services Running HS.Util.Installer.Kit.PostInstall.SetupOIDRegistry:RunHub(HSFOUNDATION) Ran HS.Util.Installer.Kit.PostInstall.SetupOIDRegistry:RunHub with status OK Running HS.Util.Installer.Kit.PostInstall.AssignAuthTypes:RunHub(HSFOUNDATION) Ran HS.Util.Installer.Kit.PostInstall.AssignAuthTypes:RunHub with status OK HS.Util.Installer.Foundation:SecureInstall Recompiled XML extension classesSaving hl7.fhir.r3.core@3.0.2 Saving hl7.fhir.r4.core@4.0.1 Saving hl7.fhir.us.core@3.1.0 Load Resources: hl7.fhir.r3.core@3.0.2 Load Resources: hl7.fhir.r4.core@4.0.1 Resource Used in Multiple Packages: http://healthit.gov/nhin/purposeofuse|2.0(hl7.fhir.r3.core@3.0.2,hl7.fhir.r4.core@4.0.1) Resource Used in Multiple Packages: http://dicom.nema.org/resources/ontology/DCM|01(hl7.fhir.r3.core@3.0.2,hl7.fhir.r4.core@4.0.1) Load Resources: hl7.fhir.us.core@3.1.0 HS.FHIRServer.Installer:InstallNamespace Created FHIR web application HS.FHIRServer.Installer:InstallNamespace Created FHIR API web application Load of directory started on 11/04/2020 08:59:25 Loading file /usr/irissys/dev/fhir/gbl/XFReferenceField.xml as xml Imported global: ^HS.XF.ReferenceField Loading file /usr/irissys/dev/fhir/gbl/XFTransform.xml as xml Imported global: ^HS.XF.Transform Loading file /usr/irissys/dev/fhir/gbl/XFValueSet.xml as xml Imported global: ^HS.XF.ValueSet Loading file /usr/irissys/dev/fhir/gbl/XFConfig.xml as xml Imported global: ^HS.XF.Config Loading file /usr/irissys/dev/fhir/gbl/XFReferenceType.xml as xml Imported global: ^HS.XF.ReferenceType Load finished successfully. HS.Util.Installer.Foundation:SecureInstall Install HSFOUNDATION done at 2020-11-04 08:59:26 HSLIB>w $zv IRIS for UNIX (Ubuntu Server LTS for x86-64 Containers) 2020.4 (Build 524U) Thu Oct 22 2020 13:04:25 EDT HSLIB>zpm zpm: HSLIB>version %SYS> zpm 0.2.8 Locally installed zpm-registry not found https://pm.community.intersystems.com - 0.0.2 zpm: HSLIB> It works. I guess the issue is with your docker, it could run out of resources. @Steve.Pisani, if you perform docker cleanup (it's safe): docker system prune -f and test again? Another idea - your docker just doesn't have enough resources for this. I have 6GB memory and 200G space. well that sucks.... docker system prune -fDeleted Containers:98a246148a9bbe5dd84ca435368dcc072173660320c7b3198788d135bb4a17bbd53fcde88168b084928bda0a95daecfa08661efcdf5e04b875e75b9c45f373c154e4d30989a7b94a828d8e554acf6ad6caa9ca74928b28db011bfc30148cfe6842f1432d7f62bbd0b6a9f8c4dc6e1e74fb9d6717c3c45b8a53d4228506cf4599 then re-running .. worked... That may seem a great outcome to some, but, this un-predictability or, failure to report what the issue is (remember, the issue manifested in an IRIS process hanging), is not ideal. Also - I did try with non-ZPM containers successfully multiple times, whilst I was getting the issue, just to ensure, the issue was with only the zpm ones. It worked fine every time with non-ZPM containers. Steve Just to clarify again - these types of issues are not related to ZPM anyhow. But yes - this happens with docker sometimes, it's a "dark side" of docker-way of software development ;) If something doesn't work without a reason every time I do the following: 1) build without cache: docker-compose build --no-cache 2) clean up docker: docker system prune -f In a lot of cases, this helps. And maybe it's a trigger for us to make docker images smaller, @Steven.LeBlanc , @Luca.Ravazzolo ? Another approach is not having docker locally at all - e.g. Github Codespaces very promising way forward, you code in a browser and use Github's docker infrastructure (which is endless?). yes - I can't expect it was related to ZPM, but definitely seemed that way when it was the only image that didn't work in that state. Warning I guess for others reading this thread: docker system prune -f Did remove 3 containers I had created, run and stopped on my system (but was planning to get back to them and start them again). thanks for now.. Yes, it removes not used/stopped containers, but usually, it's safe: I hope you don't store anything important in a container. Hi Benjamin, does 2020.4 include Ebedded Python ? No, that capability is projected for official release with 2021.1. Please reach out to @Robert.Kuszewski if you are interested in joining an expert panel or join this Discord channel for the latest on our Python support. And they carry ZPM 0.2.8, see the release notes. added the line for IntegratedML image with ZPM: intersystemsdc/iris-ml-community:2020.3.0.302.0-zpm ARM images with ZPM added: intersystemsdc/iris-community-arm64:2020.4.0.524.0-zpm intersystemsdc/irishealth-community-arm64:2020.4.0.524.0-zpm The reply is updated accordingly We greatly appreciate the support for FHIR packages in 2020.4. We have encountered issues with long FHIR package names, however; it seems as though MAXLENs of strings are a little short in HS.FHIRMeta.Storage.Package. Does it make sense to report such issues with a preview edition somewhere? If so, I am happy to provide details on it. Only now will I be able to enjoy this wonder. I was very much looking forward to this. I hope that there is no very drastic change and that it forces me to change something. I would like to know which channels can get the trial version? I look forward to migrating and starting using this new version. Although, I already know that it got even better. Thank you!
Announcement
Janine Perkins · Nov 4, 2020

InterSystems Hands-On Experience Labs Available This Week to Virtual Summit Attendees

Get your hands on our technology with On-Demand Experience Labs available now through November 6th. Each lab is paired with an office hour session scheduled for this week. Learn more about how you can get hands-on with our technology. Join the office hours to get answers your questions about the labs, talk about how the technology fits into your environment, and discuss implementation. Sign up for the Office Hours/On-Demand Experience Labs today. The labs have gotten great reviews so far! Experience Lab Topics InterSystems ObjectScript Development in Visual Studio Code HealthShare Provider Directory: Sharing Clean Provider Data with FHIR Getting Started with InterSystems Reports Please complete the on-demand labs before arriving for office hours.
Article
Mihoko Iijima · Mar 5, 2021

[InterSystems IRIS for the First Time] Interoperability: Creating Components (Business Services)

**This article is a continuation of this post.** In the previous article, we discussed the development of business processes, which are part of the components required for system integration and serve as a production coordinator. This article will discuss creating a business service, which is the information input window for production. * Production * Message * **Components** * **Business services** * Business processes(previous post) * Business operation And finally, the last component of “Let's Use Interoperability!” The business service provides a window of input for information sent from outside IRIS, with or without using the adapter for external I/F. There are three types of business services in the sample (links in parentheses are links to the sample code): 1. [Business services for files using inbound adapters](#fileinboundadapter)(Start.FileBS) 2. [Business services for Web services using the SOAP inbound adapter](#soapinboundadapter)(Start.WS.WebServiceBS) 3. [Business service called by stored procedure or REST without using an adapter](#nonadapter)(Start.NonAdapterBS) Different connection methods used for inputting information will only increase the number of business services; however, the processing done within a business service is Create a request message to be sentusing externally inputted information and simply call the business component It's effortless. Now, let's outline how to create components that use file-inbound adapters. Business services are written in scripts, which can be created in VSCode or Studio (see this article on using VSCode). ### 1. Business services for files using inbound adapters(Start.FileBS) If you create a class in VSCode, you should create a class that inherits from Ens.BusinessService. As for adapters, you can use the **ADAPTER** parameter as ADAPTER class name (e.g., specify a file-inbound adapter class). If you do not use the adapter, no configuration is required. ```objectscript Class Start.FileBS Extends Ens.BusinessService { Parameter ADAPTER = "EnsLib.File.InboundAdapter"; ``` In the file-inbound adapter, you can specify the directory to be monitored in Settings→File Path for the production's business service. ![image](/sites/default/files/inline/images/image1114_0.png) If the file located in the "File Path" matches the information specified in the "File Spec," it opens the file as a stream object. It defines it as the first variable when calling the business service **ProcessInput()**. When **ProcessInput()** is started, **OnProcessInput()** is automatically called. OnProcessInput() is passed directly to **OnProcessInput()** with the parameters passed to ProcessInput(). ![image](/sites/default/files/inline/images/image1111.png) In **OnProcessInput()** the initial statement gets the information from the file stream object, which is passed as the first parameter, then creates a message to be given to the next component, writes the process of calling the next component, and completes the basic logic. * * * 【Memo】For Studio, launch the Business Services Wizard in the New Creation menu, select the adapter and press the Finish button. * * * The **OnProcessInput()** method definition is as follows: ```objectscript Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %RegisteredObject) As %Status ``` **pInput** is provided with an instance of the **%Stream.FileCharacter** class for text files or the **%Stream.FileBinary** class for binary files. In the sample, a file in text format will be inputted, and we have written it to accept multi-line requests and one request per line. **AtEnd property** is set to 1 when EndOfFile is deteced. You can use this property to stop loop. In a loop, we read the lines using the **ReadLine()** method, which enables us to obtain information about the contents of the file one line at a time (see the documentation for file adapter details). Compose the message, retrieving information line by line. Then, we execute the ..SendRequestAsync() method, which calls the other components. When executing the method, the first parameter should be the name of the component you want to call as a string, and the second parameter should be the request message you have created. Note that the ..SendRequestAsync() is an asynchronous call and does not wait for a response. Memo:There is also SendRequestSync() for synchronous calls.。 The sample code is as follows: ![image](/sites/default/files/inline/images/image1112-1.png) Reference:explanation of the usage of the $piece() function in the above example text $piece(“string”, ”delimiter mark”, ”position number”) The function to set/get a string with a delimiter, in the sample, to get the first and second value of comma-separated data, is written with the following syntax: ```objectscript set request.Product=$piece(record,",",1) set request.Area=$piece(record,",",2) ``` Now, let's check the function of Start.FileBS as it appeared in the above description. In the sample production, the "File Path" was set to **/irisdev/src**, and the "File Spec" was set to **check.txt**. Either prepare the same directory or change it to a different directory and register the sample data in the check.txt file using the following format: purchased product name, name of the city. ※If you are using the sample container, please rename [Test-check.txt] in the src directory under the directory created by the git clone. ![image](/sites/default/files/inline/images/image1112.png) ![image](/sites/default/files/inline/images/image1113.png) ### 2. Business services for Web services using the SOAP inbound adapter (Start.WS.WebServiceBS) Next, we will outline the creation of business services for Web services. The Business Service Class for Web Services acts as a Web Service Provider = Web Service Server. In the sample, we have two parameters in the Web service method for this sample production to have information sent from the Web service client. The web method uses the data entered in the parameters to create a message class and call other components. ![image](/sites/default/files/inline/images/image1115.png) When you define a Web service class, a test screen is created. However, it is not shown by default. Log in to IRIS (or start a terminal), go to the namespace where the production is located and do the following: For your reference:Access to the Catalog and Test Pages Here is a sample code configuration in the setting where the container was started with docker-compose up -d (run in the %SYS namespace) set $namespace="%SYS" set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInfo")=1 set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInvoke")=1 【Attention】Please note that the sentence is case-sensitive and should be written with care. Also, depending on the namespace in which the product is used, the specified script changes. The example sentence is written on the assumption that the sample is imported into the USER namespace.If you import the sample code into the ABC namespace, the fourth subscript should be "/csp/abc/." Once the configuration is complete, go to the following URL: http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls ![image](/sites/default/files/inline/images/image1116.png) If you want to provide the WSDL to your Web services client, specify WSDL=1 at the end of the following URL http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls?WSDL ### 3. Business services called by stored procedures or REST without using adapters(Start.NonAdapterBS) Next, we will introduce the Business Service without adapters (Start.NonAdapterBS). ![image](/sites/default/files/inline/images/image1117.png) For business services that use adapters, the adapter calls the business service's ProcessInput() method to detect the information. If you don't use adapters, you can still call the ProcessInput() method, but this method is not public. Therefore, if you implement a business service that does not use adapters, you will need to consider ProcessInput(). The sample utilizes the following two methods: * Stored procedures(Start.Utils) * Dispatch Class for REST(Start.REST)→This is the service we ran in this article. Now, here's an example of a stored procedure. ![image](/sites/default/files/inline/images/image1118-1.png) After adding a business service (Start.NonAdapterBS) that does not use adapters to the production (state added in the sample), run the following stored procedure call Start.Utils_CallProduction('piroshki','Russia') ![image](/sites/default/files/inline/images/image1119.png) A resulting trace of the running result is as follows: ![image](/sites/default/files/inline/images/image1120.png) Next, here is an example of creating a dispatch class for REST: ![image](/sites/default/files/inline/images/image1123_0.png) The XML described in the XData Url Map defines which methods are called in response to the URL at the time of the REST call. The example describes a definition that calls the **WeatherCheck()** method when the URL of the **/weather/first parameter (purchased product name)/ second parameter (name of the city)** are provided in the **GET request**. ```objectscript ``` Then, define the base URL for the above URL in the Management Portal's Web Application Path Settings screen, and it is complete. See this article for more details on the configuration. Once it is ready, try to run the information using a business service that allows you to send the REST information. Example)http://localhost:52773/start/weather/Takoyaki/Osaka ![image](/sites/default/files/inline/images/image1124.png) ![image](/sites/default/files/inline/images/image1125.png) If you do not use an adapter, as ProcessInput() cannot be called directly from outside, we have created an object for the business service in the logic executed through REST or stored procedures (using the CreateBusinessService() method of the Ens.Director class) and called ProcessInput() If you use an adapter, the adapter detects the input and stores the information in a unique object and passes it to the business service. In contrast, if you don't use an adapter, the rest is pretty much the same, only the difference is in the above-mentioned part of the process. The business service is simply designed to use the information entered outside IRIS to create request messages and call business components. Throughout the sample production, we were able to see the following: Different components play different roles in making a production run (business services, business processes, business operations). To transmit information between components, use the message. Messages are stored in the database unless deleted and thus can be traced at any time. Some adapters simplify the process of around the connection. These are the basic operations on how to use Interoperability in IRIS. There are also record maps (see: FAQ TOPIC) and data conversion tools that are useful for input and output of CSV files and other format-specific files. As well as this series, there is also an article on simple IoT applications developed with InterSystems IRIS using Interoperability. Please check it out. Besides, IRIS for Health also supports FHIR and HL7 (including SS-MIX2) transmissions. I would be pleased to explain it in another post. If you have something of interest to share, please leave a comment! Finally, training courses are also available to learn how to use Interoperability. If you'd like to take the time to try it out with an instructor, please consider joining one of our training courses!
Announcement
Anastasia Dyubaylo · Dec 12, 2020

New Video: InterSystems IRIS Native Python API in AWS Lambda

Hey Developers, Please welcome the new video by @Ron.Sweeney1582 on InterSystems Developers YouTube: ⏯ InterSystems IRIS Native Python API in AWS Lambda In this video, you will learn the seamless InterSystems IRIS functionality in the AWS Serverless ecosystem. Leave your questions in the comments to this post. Enjoy and stay tuned!
Announcement
Olga Zavrazhnova · Dec 14, 2020

Review InterSystems IRIS on TrustRadius and get $25 VISA Card

Hi Developers, We invite you to take a few minutes and leave a review about your experience with InterSystems IRIS on the TrustRadius. Submitting a review requires time and effort, so we'll be glad to reward you with a $25 VISA Gift Card for a published review! UPDATE: this promotion ended in 2021. To get a $25 VISA card from InterSystems follow these steps: ✅ #1: Follow → this link ← to submit a review (click on the "Start My Review" button). ✅ #2: Your review will have a title (headline). Copy the text of the headline of your review and paste it in this challenge on Global Masters. ✅ #3: After your review is published you will get the $25 VISA Cards and 3000 points on Global Masters. Please note: TrustRadius must approve the survey to qualify for the gift card. TrustRadius will not approve reviews from resellers, systems integrators, or MSP/ISV’s of InterSystems. TrustRadius does not approve the reviews that have been previously published online. Done? Awesome! Your gift card is on the way! Hmm. The link to GM says: Ooops! Sorry friend, looks like this challenge is no longer available. My title: " Never say IMPOSSIBLE with IRIS " Hi Robert, thank you for submitting a review for us! I made some corrections to the challenge, so the link should work for you now. THX. Just verified it. Hi, the GM link is broken. It says: Ooops! Sorry friend, looks like this challenge is no longer available. here it is:https://www.trustradius.com/reviews/intersystems-iris-2020-12-15-16-53-48 Hi Akshay,I see you registered recently - welcome to Global Masters! Could you please complete this challenge first? After it's done the TrustRadius challenge will be unlocked for you. Thank you, Robert! Your gift card is already opened for you on GM Thanks for your help. Here's the published review! https://www.trustradius.com/reviews/intersystems-iris-2020-12-23-14-00-04 Hi Akshay! So great, thank you! Your reward is opened for you on Global Masters. Happy New Year! There seems to be some error. I clicked on Redeem, and my card just disappeared. It is not showing in the Rewards section either! That's the way it works. You consume it once.You'll get a mail once processed. But probably not this year Ah no issues, I'll wait until next year. I've got nothing but time. Thanks though!! I can't see any challenges... What do I do now? Great Unable to paste in challenge on Global Master
Announcement
Anastasia Dyubaylo · Jan 20, 2021

Webinar in Spanish: Developing a chatbot with Google Dialogflow, Telegram and InterSystems IRIS

Hi Community, We are pleased to invite you to the upcoming webinar in Spanish: ➡️ Developing a chatbot with Google Dialogflow, Telegram and InterSystems IRIS Date & Time: February 2, 4:00 PM (CET) During the webinar: you will learn how to develop a chatbot that will permit users to interact with an appointment system. We will coordinate the appointment system's backend and the Google Dialogflow and Telegram services with InterSystems IRIS. you will know how to consider adding a chatbot to help users to use your services in a smarter way. we will go over the required concepts to implement a chatbot, what is needed and how you can coordinate the external services. Speaker: @Alberto.Fuentes, Sales Engineer, InterSystems Iberia Note: The language of the webinar is Spanish. We are waiting for you at our webinar! ➡️ Please register here!
Article
Botai Zhang · Jan 25, 2021

Built in multi model integration using InterSystems iris data platform

Built in multi model integration using InterSystems iris data platform Solution of hospital information inquiry business Integration of hospital information query business solutions using InterSystems IRIS data platform with built-in multiple models ### Summary: With the gradual improvement of hospital information construction, there are more and more hospital subsystems, and more and more interfaces between systems. At the same time, the interface cost is increasing, and the management work is becoming more and more complex. Among them, the number of query business interfaces is gradually increasing according to the business type differentiation, which brings problems such as large amount of interfaces, heavy development work, code redundancy, difficult maintenance and so on. In view of this dilemma, we use InterSystems IRIS data platform built-in multi model integration of hospital information query business solutions. The application can be configured to complete the query business interface implementation, greatly reducing the key operation cycle of development, maintenance, implementation and other projects.Key applications: IRIS, Rest API, ObjectScript, Globals, SQL, data lookup tables ### Application model and Application Introduction: 1. Using the model 1. Globals (key-value) Globals is a sparse multidimensional array that can be stored and managed in IRIS database. You can use ObjectScript and native APIs to work with globals. **Tools:** https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_MANAGING **Application:** According to the key value pair of globals, the application program has the characteristics of fast access speed. It is applied in the rest dispatch class and BP process management of this program, which solves the problem of frequent value taking, slow speed and configuration operation on the front page of the lookup table, such as storing SQL model, service configuration information and so on. 2. SQL access InterSystems iris provides SQL access to data through ObjectScript, rest API and JDBC **Tools:** https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=GSQL_smp **Application:** In the query business, the three-party system does not cooperate with the interface transformation, which leads to the difficulty of interface implementation. At this time, we use iris embedded model ObjectScript, rest API and JDBC to realize SQL access to data and establish business interface. 3. Object access Through ObjectScript and rest API, InterSystems iris provides a way to store and change object instances in globals. **File:** https://docs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=PAGE_multimodel_object **Application:** During the whole interaction process, the InterSystems iris object is manipulated directly. ObjectScript class definitions are often used as templates for creating objects such as patients, departments, or healthcare workers. 2. Establish application cases (this application takes patients as an example) 1. application construction: 1. basic environment Iris version information: iris for windows (x86-64) 2020.1 (build 215u) mon Mar 30 2020 20:14:33 EDT \[Health Connect:2.1.0] Iris has java and JDBC environment Postman can be used for testing 2. installation steps ① Establish rest Service New web application → configure dispatch class → configure permission. This step can be seen in the following pictures: application running / webreplication (query). PNG and webreplication (role). PNG ② Configure sql-jdbc Establish SQL connection, connect to test database mysql, import test jhip_ patient_ info.sql ③ Configuration lookup table Global-^ Ens.LookupTable Look up table file import in ④ Import code Import the code in applicationcode, compile and open production, Note: modify Bo configuration information (DNS), configure Java gateway, etc 2. application process Omitted (see PDF) 3. Application Test The postman tool (or other tools) can be used for test verification Postman can import Query.postman_ collection.json , change IP, port number information and URL for testing. 4. application summary This application takes patient service query as a case, which can be configured with inbound and outbound protocols, query conditions and business types to solve the problem of query business interface. Finally, if you agree with this solution, please vote for the application in the inter systems multi model database contest. Voting links Application name:HealthInfoQueryLayer Thank you very much for your support!