Just to check, how did you "build index on both EnsLib.HL7.SearchTable and OSU.HL7.SearchTable."?

How is configure the "Stay Connected" setting in the BO that use the EnsLib.SQL.OutboundAdapter?

How many/how often you have messages sent to this BO?

What puzzle me is the "EnsLib.NullAdapter"!

EnsLib is a "system" package mapped to a read only database.

There is no such a "EnsLib.NullAdapter" class in the ENSLIB database.

Does this class even compile?!

The last message/error is pretty clear:
Unable to allocate shared memory minimum of 146MB

Although it seems strange to me that a modern system is not able to allocate 146MB of memory!

Can you try to reboot the system?

I advise to use:

TROLLBACK 1

Instead of

TROLLBACK

This way you rollback "your stuff", not EVERYTHING...god knows what! 😉

What is reported in the WIndows Event log?

In addition, check the cconsole.log in the installation mgr directory.

Is this on Windows or Linux?

Are you using 32 or 64 bit Cachè/Ensemble?

If Windows, did you configure the DSN named "DSN" in windows? 32 bits or 64 bits?

What do your refer to with "Iris Health dashboard"?

What web server are you using? Apache?
Is the web server installed on the same system where IRIS is running?

Did you install IRIS after installing the web server?

During IRIS installation, was the web server configured?

You mentioned a "VM", is this a "normal" or a container installation?

I'm not familiar with ODBC on Linux, however it seems that Caché is unable to use the configured DNS named "DSN".

Is that DSN properly configured and successfully tested in Linux?

For configuring ODBC, have a look to this "Ask AI" answer.

If you still have issues, I suggest to open a new question and provide detailed information on what you have configured/done and the results/errors you had.

I think you are mixing hosts (production component) and jobs.

A host can be enabled or disabled, when a host is enabled there are a number (PoolSize) of jobs and each job has a status.

You can view/list the status/details of production jobs in the Management portal Interoperability -> Monitor -> Jobs.

You already know how to get if an host is enabled/disabled, to get the status of all jobs you can use the query Enumerate in the Ens.Job class, to test it:

Set rs=##class(Ens.Job).EnumerateFunc()

Do rs.%Display()

I strongly discourage the use of embedded sql, it has many disadvantages.

Sorry Theo but I don't agree at all.

The differences (disadvantageous or not) between Embedded SQL and Dynamic Queries have evaporated since few years now, please have a look to this article from @Benjamin De Boe :

New in 2020.1: the Universal Query Cache

In general, I advice to use the query type (Embedded vs. Dynamic) that best fit in given code pattern, for example Embedded SQL is very convenient for query that returns 1 row.

Or maybe you have other issues with Embedded SQL?

If the header is called "AUTHORIZATION", then use:

Set authHeader = %request.GetCgiEnv("AUTHORIZATION")

In the very first line at the top of your class insert the line:

Include %syLDAP.INC

Edit to correct, as pointed out below, sorry!

Include %syLDAP

To can get a base64 encoded value from JSON DynamicObject into a stream you don't need to write any conversion code using:

Set stream = jsonObject.%Get("data", , "stream<base64")

Bonus: this works with any data length, is not limited to the IRIS max string size as in the above article.

Just a little trick, instead of:

set file="/ext/Stream.html"set stream=##class(%Stream.FileCharacter).%New()
 set sc=stream.LinkToFile(file)

You can use:

set file="/ext/Stream.html"set stream=##class(%Stream.FileCharacter).%OpenId(file)

😉

It really seems that there is no java executable in the (supposed?) java home directory you specified.

Can you check if the following file exists:

C:\Program Filey\Java\jdk-11\bin\java.exe

Then there may be issues with the java version, maybe not.

I think you need to "HTML escape" your output.

If your json is (relatively) small (<~3.5MB) then change:

Write formatter.Format(json)

With:

Set sc=FormatToString(json,.fsonFormatted)
If$$$ISERR(sc) {
    Write$zconvert(sc,"O","HTML")
} Else {
    Write$zconvert(fsonFormatted,"O","HTML")
}

If your json is potentially big (>~3.5MB), the you have to use FormatToStream() instead of FormatToString() and $zconvert in chunks, see $zconvert documentation.

Can you please provide some context on how/where you are using try/catch within DTL?

What exactly you want to happen when an error occur?

Depending on your requirements, maybe writing a custom function is easier to handle this situation?

I don't think Try/Catch is the solution, but I don't know what you want to happen when an error occur.

Maybe an option could be using the "erropt" parameter in $ZDTH, like:

Set dateH=$ZDTH(whatevervalue,,,,,,,,,"invalid")
If dateH="invalid" ....

Hi @Ariel Glikman, thank you for the tip regarding the HSSYS Mirroring Utility.

Is there any reason why that utility is mentioned in the "Upgrade reference" part of the documentation and not in the "Healthcare Mirroring" (installation) documentation?

This gives the impression that the utility is (only?) for upgrading IRIS for Health.

Are you sure that the tool (browser? does not look like Postman) you use in the first picture is using a POST andf not a GET method?

The "405 Method Not Allowed" error means that POST (as used in your code) is not allowed.