Eduard Lebedyuk · Apr 12, 2023 go to post

1. Do you need to restart several BHs at once or do you need to restart them one by one?

2. How long does it take currently and what's your goal timing-wise?

Eduard Lebedyuk · Apr 1, 2023 go to post

Calling @Robert.Kuszewski.

  My JAVA_HOME is a is a JRE (C:\Program Files\Java\jre1.8.0_361) not a JDK if that matters? 

No, it should not.

I can't seem to edit the External Language Servers in the management portal

Please stop it before editing.  You also should be able to create a new External Language Server.

Eduard Lebedyuk · Mar 23, 2023 go to post

here I want to capture the error details in trace , log , that I can see in production web page

If you want to quit processiong, it's enough to either quit:

quit:$$$ISERR(sc) sc

Or raise an error (if you're several levels deep for example):

$$$TOE(sc, sc)

If you don't want to interrupt processing, use $$$LOG macroes, for example:

$$$LOGWARNING($System.Status.GetErrorText(sc))

This code would create a new Log entry of a warning type.

Eduard Lebedyuk · Mar 10, 2023 go to post

Project the list of geo.model.Point as a separate table:

Class geo.model.Line Extends%Persistent
{
Property points As list Of geo.model.Point(SQLPROJECTION = "table/column");
}

And you can use SQL query (via iris.sql) to get all points in line:

SELECT
    points_latitude, 
    points_longitude
FROM geo_model.Line_points
WHERE Line = ?
ORDERBY element_key

If you have thousands of points that would likely be the fastest way to transfer (barring callin/callout shenanigans).

Eduard Lebedyuk · Mar 6, 2023 go to post

I guess you need to flush the buffer so only python writes? Something like this should work:

Class Python.App.Dispatch Extends%CSP.REST
{

XData UrlMap [ XMLNamespace = "https://www.intersystems.com/urlmap" ]
{
<Routes>
    <Route Url="/test" Method="GET" Call="Wrapper" />
</Routes>
}

ClassMethod Wrapper()
{
	write *-3do..Hello()
	q$$$OK
}

ClassMethod Hello() [ Language = python ]
{
    import iris

    print('Hello World')
}

}

Calling @Bob Kuszewski

Eduard Lebedyuk · Mar 2, 2023 go to post

Oh, right. You're on Ensemble 2014.1. I highly recommend updating to the latest Ensemble version or even better migrating to InterSystems IRIS.

Eduard Lebedyuk · Feb 16, 2023 go to post

Yes, that'll work. Just need to be careful to export everything. Classes? Routines? Custom Schemas? LUTs? SDS?

Eduard Lebedyuk · Feb 16, 2023 go to post

I usually follow these steps when I have two similar but distinct codebases:

  1. Create a new repo.
  2. Export everything from the LIVE server into the repo. Commit.
  3. Export everything from the TEST server into the repo. Commit.

Commit from step (3) would have all the differences between LIVE and TEST. I assume the code on TEST is newer, so that should be a later commit, but it you want to, you can swap the export order.

Before making a commit (3) you might want to remove trivial differences such as whitespaces, etc. Also Gitlab has a compare mode for commits which automatically ignores whitespace differences.

Eduard Lebedyuk · Feb 10, 2023 go to post

1. Try running:

 cd <IRIS>\bin
 ./irispython "C:\InterSystems\IRIS\lib\python\Scripts\pywin32_postinstall.py" -install

It might fix your error.

If that does not help, add win32 folder to path explitictly and try import again:

import sys
sys.path.append("<IRIS>\Mgr\python\win32")
import win32api
Eduard Lebedyuk · Feb 9, 2023 go to post

While testing, I see I can easily set %session.Data to hold data I want to preserve.  

No problem! I thought you were having issues with that part.

how, on my next API call can I use that session  

You just need to supply the cookies CSPSESSIONID and CSPWSERVERID. With that you'll have the same session. In browsers (and I think in postman) that's automatic, so you don't have to do anything. It should work out of the box as long as you have UseSession set to 1.

Eduard Lebedyuk · Feb 8, 2023 go to post

From the documentation (even better docs):

1. Open the spec class.

2. Add

Parameter UseSession As BOOLEAN = 1;

3. Recompile the spec class.

4. Now your disp class has the same parameter and you can use sessions in your impl class.

If you need a larger change than adding a parameter to a dispatcher class, do this (docs):

1. Create a custom subclass of %CSP.REST, i.e. test.REST.
2. Modify your swagger spec by adding x-ISC_DispatchParent:

"info":{
    "version":"1.0.0",
    "x-ISC_DispatchParent":"test.REST",

3. Recompile.

Now your disp class extends test.REST and you can modify anything there.