Article Eduard Lebedyuk · Oct 21, 2019 4m read

InterSystems API Management (IAM) - a new feature of the InterSystems IRIS Data Platform, enables you to monitor, control and govern traffic to and from web-based APIs within your IT infrastructure. In case you missed it, here is the link to the announcement. And here's an article explaining how to start working with IAM.

In this article, we would use InterSystems API Management to Load Balance an API.

In our case, we have 2 InterSystems IRIS instances with /api/atelier REST API that we want to publish for our clients.

There are many different reasons why we might want to do that, such as:

  • Load balancing to spread the workload across servers
  • Blue-green deployment: we have two servers, one "prod", other "dev" and we might want to switch between them
  • Canary deployment: we might publish the new version only on one server and move 1% of clients there
  • High availability configuration
  • etc.
3
4 1009
Question Markus Kogler · Jan 16, 2021

Hi Community,

is there a possibility to implement a "remember password" feature in a ZEN Application?

In the management portal I added a web-application for a ZEN application with password authentification. I created an own login page, and now I want to implement a "remember password" feature (User should not have to login again after the session times out or when the browser window is closed).

2
0 331
Announcement Olga Zavrazhnova · Feb 26, 2021

Hi Developers,
A new exciting challenge introduced for Global Masters members of "Advocate" level and above: we invite you to record a 30-60 sec video with an answer to our question:

➥ What is the value of InterSystems IRIS to you?

🎁 Reward of your choice for doing the interview: $50 Gift Card (VISA/Amazon) or 12,000 points!

Follow this direct link to the challenge for more information. Please note that the link will work for GM members of "Advocate" level and above. More about GM levels you can read here.  

 

0
0 170
Question Nicole Febres · Nov 12, 2020

Hi, I am trying to filter transactions based on a value within OBX 3.1 and OBX 5.1 within the same repeating segment.  The segment looks like this

OBX|60|ST|RADONCPT||Y|

I originally tried this within a routing rule

(HL7.{OBX():3.1} Contains "<RADONCPT>")&&(HL7.{OBX():5.1} Contains "<Y>"))
This didn't work because if the RADONCPT was present and another OBX segment contained Y, it would still pass.  I am now looking to do this via a DTL, but I am stuck.  Is there a way to skip transforming a message based on if a value matches both OBX 3.1 and OBX 5.1 within the same segment?
5
0 712
Question Menno Voerman · Feb 11, 2021

Hi All,

I hope someone can help me with the following, it's about the usage of the class EnsLib.HL7.Service.HTTPService.

Working situation right know.

In IIS we've got a site configured who is dealing with the client certificate, etc and redirect the full request to http://localhost/csp/healthshare/NAMEPSACE/EnsLib.HL7.Service.HTTPServi… and the web gateway redirects the request to Business Service 'EnsLib.HL7.Service.HTTPService.cls'.

Preferred situation:

We would like to have multiple available endpoints per namespace. According the documentation of the class 'EnsLib.HL7.Service.

2
0 630
Question Ahmad Bukhtiar · Feb 25, 2021

Hi 

I am using below function and it works fine but i want to match the value ignoring the first 4 chars as they are only added to sort the data.

##class(Ens.Rule.FunctionSet).Lookup

For example

My table has following values

0001EMRNameB

0002EMRNameA

0003EMRNameC

w ^Ens.LookupTable("EMRName","0002EMRNameA") this works 

But i want to use something like that

w ^(Ens.LookupTable("EMRName","%EMRNameA") this doesnt works 

3
0 334
Question Andy Coutinho · Feb 25, 2021

Does anyone know how to get the closing tab/menu changing event in a CSP? I've tried the JS "OnBeforeUnload" already but it seems the browsers aren't allowing it anymore. I need to show a pop-up that holds the user if trying to get away before completing the stage.

1
0 175
Question Kurro Lopez · Feb 25, 2021

Hi all,

I have a API operation that is calling to a external process. The answer is a big json but I only want a pice of the full content.

My first attempt is:

.....
// The code of prepare the request is omitted.
set tSC = ..Adapter.SendFormDataArray(.tHttpResponse,"POST",tHttpRequest,,,tURL)
if $$$ISERR(tSC) $$$ThrowStatus(tSC)
// Get the response directly
set response = ""
while (tHttpResponse.Data.AtEnd = 0) {
    set response = respuesta_tHttpResponse.Data.Read()
}
// Convert Json to generic object, get the node returnValue.data and convert to JSon again
set objJson =
2
0 309
Announcement Kate Schell · Feb 24, 2021

Hello All,

InterSystems Certification has designed a certification exam for technical specialists who work with HealthShare Patient Index. We need input from our community to help validate the exam topics. Here's your chance to have your say in the knowledge, skills, and abilities that a certified HealthShare Patient Index Technical Specialist should possess.

0
0 345
Question Scott Roth · Feb 23, 2021

So now that I have figured out how to send a Page via HTTP.OutboundAdapter, I have another question. I want to use a Function that all I have to do is pass two variables and it is sent to the HTTP.OutboundAdapter I created to send the Page. 

So.. If I have a class file that ExtendsEns.Rule.FunctionSet, how do I force it to send a Request to my HTTP Business Operation, without having to go through a DTL, or Business Process?

Thanks

Scott

3
0 916
Article Alberto Fuentes · Feb 24, 2021 1m read

Hi Community!  Today I'd like to share with you a link to some exercises from a workshop about developing REST APIs and how to manage them using InterSystems API Manager.

It includes step by step exercises to:

  • Developing REST APIs from OpenAPI specifications.
  • Adding the created API in an interoperability production (optional).
  • Basic API management in InterSystems API Manager (service, route, auth, consumers, rate limiting, etc.).
  • Some other more complex scenarios in InterSystems API Manager like load balancing, or routing by header.

You will find it all here: https://openexchange.intersystems.

0
0 353
Article Iryna Mykhailova · Feb 24, 2021 13m read

In the first installment of this article series, we discussed how to read a “big” chunk of data from the raw body of an HTTP POST method and save it to a database as a stream property of a  class. Now let’s look at how to save such data and metadata in JSON format.

Unfortunately, Advanced REST Client doesn’t let you compose JSON objects with binary data as a value of a key (or maybe I simply haven’t figured out how to do it), so I decided to write a simple client in ObjectScript to send data to the server.

I created a new class called RestTransfer.

0
0 645
Question Yone Moreno · Feb 23, 2021

We would need some help,

Thanks in advance for your replies,

We can POST directly via POSTMAN only if we disable "SSL certificate verification"

We see the response:

However if we turn on "SSL certificate verification" it shows:

So, when we use Ensemble and a REST Operation, it outputs:

ERROR <Ens>ErrException: <THROW>zdoLoginToken+22^Operaciones.REST.HistoriaClinica.VacunasAPI.1 *%Exception.StatusException ERROR <Ens>ErrHTTPStatus: Recibido estado no correcto 403 del servidor HTTP remoto: 'HTTP/1.1 403 Forbidden' -- - registrado como '-' número - @' Set sc=tSC Throw:('sc) ##class(%Exception.

1
0 488
Question Scott Roth · Feb 23, 2021

I am trying to figure out how to send a Page via a HTTP.OutboundAdapter to a URL from Ensemble.

We have a URL that I am able to pass PNo=xxxx%PMsg=xxxx as parameters to send the page to a pager.

http://xxxxx.xxxxx.xxx/Employee/Tools/Paging/SendPage.aspx?PNo=1817&PMs…

When I send the above URL through a REST client I receive a Response of "SENT".

But when I try to send it through the HTTP.OutboundAdpater I do not get a response.

Method Sample(pReq As osuwmc.Page.DataStructures.Page, Output pResp As %Net.HttpResponse) As %Status
{
    set pInput = "PNo="_pReq.PagerNumber_"&PMsg="_pReq.
3
0 348
Article Benjamin De Boe · Feb 23, 2021 1m read

Hi, 

I just published isc-mem-config on OpenExchange and ZPM. It's a prototype to test whether this kind of user experience (UX) is a good fit for novice and / or more seasoned users. The settings it generates are already fairly-good-practice :-), but also being reviewed by experts within InterSystems in parallel.

Happy to hear your feedback on the applicability to your and/or your customers' day-to-day business, where this would fit best in the broad spectrum ranging from documentation, over installation to standalone tools.

2
1 262
Article Iryna Mykhailova · Feb 22, 2021 6m read

A question came up in the InterSystems developer community concerning the possibility of creating a TWAIN interface to a Caché application. There were several great suggestions on how to get data from an imaging device on a web client to a server, then store this data in a database. 

However, in order to implement any of these suggestions, you need to be able to transfer data from a web client to a database server and store the received data in a class property (or a table cell, as was the case in the question).

1
1 969
Question Roberto Cahanap · Feb 19, 2021

Currently in Visual Studio Code when we connect to a Cache server and export the CLS and MAC files, they get placed in the following:

\Comp;anyName\src\Packages

Where the Packages folder corresponds to the different class packages we have. The MAC files are placed in the src folder and not contained in it's own folder.

Is there a way to configure the export for the MAC files so that it's contained in it's own folder like this:

\CompanyName\src\mac

Thanks in advance for your help.

-Roberto

2
0 403
Question Martin Staudigel · Feb 19, 2021

Hello community,

I would like to report about a security issue, that engages us for some time meanwhile.

We configured a restricted user to read data from a csp page to feed our nagios server with information about configuration items we would like to have an eye upon. The configuration of this user is the same in our production and in our development environment. The called method mainly reads data from lookup tables by sql queries and writes data to a temporary table, which is deleted in the begining.

2
0 543
Question George Hodder · Feb 19, 2021

Hi,

I am wanting to get the results of SYS.Database class's List query into a result set.

I have code that does it, but I get a cursor error at the end.... should I just to a try/catch and ignore this error below?  Or can I call this in a different way to avoid the error?  
My code, in the %SYS namespace
Set Statement=##class(%SQL.Statement).%New()
Set status=Statement.%PrepareClassQuery("SYS.Database","List")

Set rset=Statement.%Execute()
//
while (rset.%Next())
{
        W !,rset.%Get("Directory"),?30,rset.%Get("Size"),?40,rset.%Get("MaxSize")
}
when I call

2
0 431