go to post Guillaume Rongier · Aug 7, 2023 In theory you are all set. Just take for example the dockerfile. You can also read the pom.xml file to take some insperation. For example take a look how the jdbc driver is added to the project. <dependency> <groupId>intersystems</groupId> <artifactId>jdbc</artifactId> <version>3.3.0</version> <scope>system</scope> <systemPath>${pom.basedir}/lib/intersystems-jdbc-3.3.0.jar</systemPath> </dependency> To sum up, you need obviously the jdbc drive (you have one in the repo), the hibernate dialect, you also have one in the repo, for the hibernete dialet you can also have a look to the article of yuri : https://community.intersystems.com/post/using-new-intersystems-iris-hibe.... Have fun with Iris and quarkus.
go to post Guillaume Rongier · Aug 7, 2023 Hi, you will find here an example of Quarkus + IRIS + Hibernete : https://github.com/grongierisc/iris-orm-examples
go to post Guillaume Rongier · Jul 13, 2023 That how i read Stream and Write stream with Embedded Python : Read Stream : def stream_to_string(stream)-> str: string = "" stream.Rewind() while not stream.AtEnd: string += stream.Read(1024) return string Write Stream : def string_to_stream(string:str): stream = iris.cls('%Stream.GlobalCharacter')._New() n = 1024 chunks = [string[i:i+n] for i in range(0, len(string), n)] for chunk in chunks: stream.Write(chunk) return stream
go to post Guillaume Rongier · Jul 3, 2023 SELECT COUNT(*) from Ens.MessageHeader WHERE SourceConfigName = 'EPIC_SIU_IN' AND TO_NUMBER(SessionId) = %ID AND %ID >= (SELECT TOP 1 %ID FROM Ens.MessageHeader a WHERE TimeCreated >= '2016-07-27 05:00:00.000' ORDER BY TimeCreated ASC) AND %ID <= (SELECT TOP 1 %ID FROM Ens.MessageHeader a WHERE TimeCreated < '2016-07-28 05:00:00.000' ORDER BY TimeCreated DESC) Just change the date here and see how fast it is. The idea is to use index and the fastest index in MessageHeader is %ID.
go to post Guillaume Rongier · Jun 29, 2023 If you want mock ObjectScript classes use this : https://github.com/GendronAC/InterSystems-UnitTest-Mocking I had used it, it work quiet well.
go to post Guillaume Rongier · Jun 12, 2023 Hi, Do you know that every component in a production has a OnInit() method that is called when the component starts? You can use this method to set the value of the parameter. For example: Method OnInit() As %Status { Set ..#Token = $System.Util.GetEnviron("Token") Quit $$$OK } May be it's more elegant to do so than update the parameter in the Production file. FYI, that what i do in IOP (Interoperability On Python) to set the value of the parameter of any component in a production. def on_init(self): self.my_param = os.environ.get("MY_PARAM", "default_value")
go to post Guillaume Rongier · Jun 5, 2023 Hi Evegny, You can do it in the following way: * in the production settings, with DefaultSettings docs here * but default settings is a kind of replacement for environment variables * you can to it in the code : * ObjectScript: $system.Util.GetEnviron("MY_ENV_VAR") * Python: os.environ['MY_ENV_VAR'] * you can use iop (interoperabilty on python) to import production in python way : settings.py import os PRODUCTIONS = [ { 'shvarov.i14y.Production': { "Item": [ { "@Name": "shvarov.i14y.ChatOperation", "@ClassName": "Telegram.BusinessOperation", "@Category": "Reddit", "@PoolSize": "1", "@Enabled": "true", "@Foreground": "false", "@Comment": "", "@LogTraceEvents": "false", "@Schedule": "", "Setting": [ { "@Target": "Adapter", "@Name": "SSLConfig", "#text": "default" }, { "@Target": "Adapter", "@Name": "Token", "#text": os.environ['TELEGRAM_TOKEN'] } ] } ] } } ] and then in the terminal: $ iop -M settings.py More information about iop and settings.py here
go to post Guillaume Rongier · Mar 29, 2023 Another good way is to set the header : Prefer: return=representation The payload will be sent you back with the id. Example : POST http://localhost:33783/fhir/r4/Patient HTTP/1.1 Content-Type: application/json+fhir Accept: application/json+fhir Prefer: return=representation { "resourceType": "Patient", "active": true, "name": [ { "use": "official", "family": "Donald", "given": [ "Duck" ] } ] } Response : HTTP/1.1 201 Created Date: Wed, 29 Mar 2023 12:13:40 GMT Server: Apache CACHE-CONTROL: no-cache ETAG: W/"1" EXPIRES: Thu, 29 Oct 1998 17:04:19 GMT LAST-MODIFIED: Wed, 29 Mar 2023 12:13:40 GMT LOCATION: http://localhost:33783/fhir/r4/Patient/2011/_history/1 PRAGMA: no-cache CONTENT-LENGTH: 177 Connection: close Content-Type: application/fhir+json; charset=UTF-8 { "resourceType": "Patient", "active": true, "name": [ { "use": "official", "family": "Donald", "given": [ "Duck" ] } ], "id": "2011", "meta": { "lastUpdated": "2023-03-29T12:13:40Z", "versionId": "1" } }
go to post Guillaume Rongier · Mar 17, 2023 nc -z -v localhost 1972 Use netcat, it will tell you if the port is open, if not then it's may be because superserver is not ready
go to post Guillaume Rongier · Mar 2, 2023 have you tired this python module ? pip3 install iris-dollar-list it can convert $list to python list.
go to post Guillaume Rongier · Jan 16, 2023 Hi Joe, The 2 dots syntax is used to access the properties and methods of the current object. You can also use $this to access the current object. For example, if you have a class called "MyClass" and you have a property called "MyProperty" in that class, you can access the property value by using the following syntax: User.MyClass Extends EnsLib.BusinessService { Property MyProperty; Method MyMethod() { set ..MyProperty = 10; set $this.MyProperty = 10; } } In your case, you can use the following syntax to access the methods of the EnsLib.File.InboundAdapter class: User.MyClass Extends EnsLib.BusinessService { Parameter ADAPTER = "EnsLib.File.InboundAdapter"; Property Adapter = "EnsLib.File.InboundAdapter"; Method MyMethod() { do ..Adapter.AdapterMethod() do $this.Adapter.AdapterMethod() } } Hope this helps.
go to post Guillaume Rongier · Oct 21, 2022 Hi, You need to fill in some environment variables that allow you to authenticate yourself and therefore connect. The variables are : IRISUSERNAME IRISPASSWORD IRISNAMESPACE In a docker file for example : # environment variables for embedded python ENV IRISUSERNAME "SuperUser" ENV IRISPASSWORD "SYS" ENV IRISNAMESPACE "IRISAPP" In a shell : export IRISUSERNAME=SuperUser export IRISPASSWORD=SYS export IRISNAMESPACE=IRISAPP
go to post Guillaume Rongier · Oct 9, 2022 query is the way to go : import iris g = iris.gref("^MyGlobal") # Insert some data g[1] = "my first line" g[2] = "my second line" g[1,"a"] = "my first line with a key" g[1,"b"] = "my first line with a key" g[2,"a"] = "my second line with a key" g[2,"b"] = "my second line with a key" g[3,"a",1] = "my third line with a key and a subkey" for (key, value) in g.query(): print(f"{key} -> {value}") result : ['1'] -> my first line ['1', 'a'] -> my first line with a key ['1', 'b'] -> my first line with a key ['2'] -> my second line ['2', 'a'] -> my second line with a key ['2', 'b'] -> my second line with a key ['3'] -> None ['3', 'a'] -> None ['3', 'a', '1'] -> my third line with a key and a subkey
go to post Guillaume Rongier · Sep 26, 2022 I have partially found a solution: First I create an SQL function with python code : CREATE FUNCTION sqliknowparser(tText VARCHAR(50000)) RETURNS VARCHAR(50000) LANGUAGE PYTHON { import iknowpy engine = iknowpy.iKnowEngine() # index some text text = tText engine.index(text, 'en') t_output = "" # or make it a little nicer for s in engine.m_index['sentences']: for e in s['entities']: if e['type'] == 'Concept': t_output = t_output + e['index']+ "|" return t_output[:-1] } Then I use this function in my query : SELECT ID, sqliknowparser(Text) as entities FROM AA.Goal Then I "piece" it an use a union query : SELECT ID, $piece(sqliknowparser(Text),'|',1) as entities FROM AA.Goal union SELECT ID, $piece(sqliknowparser(Text),'|',2) as entities FROM AA.Goal Any improvement are welcome :)
go to post Guillaume Rongier · May 16, 2022 Hi, BTW, starting with IRIS 2021.1+ you can enable the interoperability metrics with those command lines : // Enable Intero metrics for SAM zw ##class(Ens.Util.Statistics).EnableSAMForNamespace() zw ##class(Ens.Util.Statistics).EnableSAMIncludeHostLabel()
go to post Guillaume Rongier · May 12, 2022 Another solution can be with SAM : https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls... https://community.intersystems.com/post/new-video-viewing-customizing-me... You can also enable interoperability metrics (only on IRIS 2021.1+) with : // Enable Intero metrics for SAM zw ##class(Ens.Util.Statistics).EnableSAMForNamespace() zw ##class(Ens.Util.Statistics).EnableSAMIncludeHostLabel()
go to post Guillaume Rongier · Apr 6, 2022 Since the launch of IRIS, ENSDEMO namespace is gone. Now to have demo or anything else you have to go with ZPM : https://community.intersystems.com/post/install-zpm-one-line (the package manager). Check the list here : https://openexchange.intersystems.com/ If you still want EnsDemo check those githubs : https://github.com/grongierisc/InstallEnsDemoLite https://github.com/grongierisc/InstallEnsDemoHealth https://github.com/OneLastTry/irishealth-ensdemo
go to post Guillaume Rongier · Apr 5, 2022 BTW, there were an issue on the transformation from FHIR to HL7 on the github demo. This has been fix with this commit : https://github.com/grongierisc/iris-healthtoolkit-service/commit/c9d68cc...
go to post Guillaume Rongier · Apr 5, 2022 Have a look those depots : https://github.com/grongierisc/FHIR-HL7v2-SQL-Demo https://github.com/grongierisc/iris-healthtoolkit-service