Eduard Lebedyuk · Apr 17, 2023 go to post

ISC's Interoperability business rule editor has some quirks; it does not allow the passing of variables by reference to custom methods

Interesting. Can you post sample code please?

Eduard Lebedyuk · Apr 17, 2023 go to post

Now, why isn't $ZOBJREF() in the documentation?

What's the use case for this function?

Here's some (autotranslated) info about thesefunctions.

Also $zobjref accepts only integers, so you can pass just the part before @:

set a={}
set b={}
set obj1=$zobjref(1)
set obj2=$zobjref("1@Sample.Person")
zw

Results in:

a=<OBJECT REFERENCE>[1@%Library.DynamicObject]
b=<OBJECT REFERENCE>[2@%Library.DynamicObject]
obj1=<OBJECT REFERENCE>[1@%Library.DynamicObject]
obj2=<OBJECT REFERENCE>[1@%Library.DynamicObject]

There's also no guarantee that the object would be the same i.e.:

set a={"a":1}
set b={"b":1}
set aoref = ""_ a
kill a
set c={"c":1}
set obja=$zobjref(aoref)
zw obja
> obja={"c":1}  ; <DYNAMIC OBJECT>
Eduard Lebedyuk · Apr 14, 2023 go to post

Depending on the fidelity you need, something like this would work:

set str = "abc def!  xyz"
set punctuation = "'!""#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"
set strNoPuncuation = $tr(str, punctuation, $j("", $l(punctuation)))
set strDedupeWhitespaces = $zstrip(strNoPuncuation,"<=>P")
set out = $lfs(strDedupeWhitespaces, " ")

Another approach. Simpler and likely faster but it will merge sentence ends without whitespace afterwards:

set str = "abc def!  xyz"
set strNoPuncuation = $zstrip(str,"*P",," ")
set strDedupeWhitespaces = $zstrip(strNoPuncuation,"<=>P")
set out = $lfs(strDedupeWhitespaces, " ")

Check $translate, $zstrip.

If you want more fidelity/features check %iKnow.Stemming package.

Eduard Lebedyuk · Apr 14, 2023 go to post

Replace

Set tSC1 = tStream.Write(dynObject1.%ToJSON())

with:

Do dynObject1.%ToJSON(tStream)
Eduard Lebedyuk · Apr 12, 2023 go to post

I recommend you to check this article, but here's a summary:

1. Calculate a list of BHs which need a restart (not sure why you need regexp, all BHs are in Ens_Config.Item table):

SELECT %DLIST(Name) bhList
FROM Ens_Config.Item 
WHERE 1=1
  AND Enabled = 1
  AND Production = :production
  AND ClassName %INLIST :classList -- or some other condition

2. Restart them all at once instead of one by one:

for stop = 1, 0 {
  for i=1:1:$ll(bhList) {
    set host = $lg(bhList, i)
    set sc = ##class(Ens.Director).TempStopConfigItem(host, stop, 0)
  }
  set sc = ##class(Ens.Director).UpdateProduction()
}
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 = ?
ORDER BY 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 *-3
	do ..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?