go to post Guillaume Rongier · Oct 29, 2020 What a great idea :) Here is my contribution : { "Request Class": { "prefix": "ClassRequest", "body": [ "Class ${0:ClassName} Extends Ens.Request", "{", "\t$1", "}" ], "description": "Message helper" }, "Response Class": { "prefix": "ClassResponse", "body": [ "Class ${0:ClassName} Extends Ens.Response", "{", "\t$1", "}" ], "description": "Message helper" }, "Operation Class": { "prefix": "ClassOperation", "body": [ "Class ${0:ClassName} Extends Ens.BusinessOperation", "{", "\tParameter ADAPTER = \"${1:Adapter}\";", "\tProperty Adapter As ${1:Adapter};", "\tParameter INVOCATION = \"Queue\";", "\n", "Method ${2:Methode}(pRequest As ${3:Request}, Output pResponse As ${4:Response}) As %Status", "{", "\tset tStatus = $$$$OK", "\tset pResponse = ##class(${4:Response}).%New()", "", "\ttry{", "\t\t\n", "\t}", "\tcatch exp", "\t{", "\t\tset tStatus = exp.AsStatus()", "\t}", "\tQuit tStatus", "}", "XData MessageMap", "{", "<MapItems>", "\t<MapItem MessageType=\"${3:Request}\">", "\t\t<Method>${2:Methode}</Method>", "\t</MapItem>", "</MapItems>", "}", "}", ], "description": "Operation helper" }, "Service Class": { "prefix": "ClassService", "body": [ "Class ${0:ClassName} Extends Ens.BusinessService", "{", "Parameter ADAPTER = \"${1:Adapter}\";", "Property TargetConfigNames As %String(MAXLEN = 1000) [ InitialExpression = \"${2:BusinessProcess}\" ];", "Parameter SETTINGS = \"TargetConfigNames:Basic:selector?multiSelect=1&context={Ens.ContextSearch/ProductionItems?targets=1&productionName=@productionId}\";", "Method OnProcessInput(pDocIn As %RegisteredObject, Output pDocOut As %RegisteredObject) As %Status", "{", "\tset status = $$$$OK", "", "\ttry {", "", "\t\tfor iTarget=1:1:$L(..TargetConfigNames, \",\") {", "\t\t\tset tOneTarget=$ZStrip($P(..TargetConfigNames,\",\",iTarget),\"<>W\") Continue:\"\"=tOneTarget", "\t\t\t$$$$ThrowOnError(..SendRequestSync(tOneTarget,pDocIn,.pDocOut))", "\t\t}", "\t} catch ex {", "\t\tset status = ex.AsStatus()", "\t}", "", "\tQuit status", "}", "", "}", ], "description": "Operation helper" }, }
go to post Guillaume Rongier · Oct 28, 2020 Are you looking for thoses classes : HS.Hub.Standalone.HL7.DTL.SubTransform.PD1ToSDA3 HS.Hub.Standalone.HL7.DTL.SubTransform.PIDToSDA3 and co ? And you can have a look at this code to convert any HL7 and all his segment into SDA : https://github.com/grongierisc/FHIR-HL7v2-SQL-Demo/blob/master/src/FHIRD...
go to post Guillaume Rongier · Oct 27, 2020 Hi Yakov, Have you tried to extend you target message by %SerialObject rather than %RegistredObject. In fact, %RegistredObject are in memory object and can't be transmitted in Messages. More details in this documentation : https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI...
go to post Guillaume Rongier · Oct 25, 2020 Hi Ravikumar, All can be done in InterSystems IRIS with almost no code. Have a look at this demo to convert HL7v2 to FHIR : https://openexchange.intersystems.com/package/FHIR-HL7v2-SQL-Demo For JSON/XML to FHIR, you can have a look here : https://github.com/grongierisc/HL7ToJson For HL7 SIU, the same can be achieved with the first link. For CDA/FHIR you have example here : https://github.com/grongierisc/FHIRaaS/blob/master/src/Interop/BP/CCDATr... If you need more help, let me know.
go to post Guillaume Rongier · Oct 23, 2020 I agree with you in most cases. The most important announcement for me would be Embedded Python.This will bring to the community the power of python libraries, it's a giant step forward. https://www.youtube.com/embed/widxuV4Ov9s[This is an embedded link, but you cannot view embedded content directly on the site because you have declined the cookies necessary to access it. To view embedded content, you would need to accept all cookies in your Cookies Settings]
go to post Guillaume Rongier · Oct 23, 2020 Hi, you have to use irisinstall with elevated privileges. cf: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/Doc.View.c...
go to post Guillaume Rongier · Oct 22, 2020 Thanks @Henrique Dias It is the principle of a community, between helping and sharing.BTW, I really liked the last video with the other members of the community about your NPM project. https://community.intersystems.com/post/promo-video-screencast-no-projec...
go to post Guillaume Rongier · Oct 20, 2020 Hi, SuperServer port since 2020.3 is 1972 : docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.4.0.521.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.4.0.521.0-zpm
go to post Guillaume Rongier · Oct 8, 2020 Don't forget that SuperServer port changed from 51773 to 1972 cf : https://irisdocs.intersystems.com/iris20203/csp/docbook/Doc.View.cls?KEY... docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/iris-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:51773 --publish 9092:52773 intersystemsdc/iris-community:2020.2.0.204.0-zpm docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community:2020.3.0.221.0-zpm docker run --rm --name my-iris -d --publish 9091:51773 --publish 9092:52773 intersystemsdc/irishealth-community:2020.2.0.204.0-zpm
go to post Guillaume Rongier · Sep 1, 2020 Don't know if that can help, but with this module, you can do the other way around from swagger generate persitent classes. https://openexchange.intersystems.com/package/objectscript-openapi-defin...
go to post Guillaume Rongier · Jun 22, 2020 Hi Klaus, You have to proxy IRIS to use https. To do so, use this git : https://github.com/grongierisc/Https-Proxy-IRIS-Docker Simple https proyx https://github.com/lscalese/isc-webgateway-letsencrypt More robust Https proxy with certbot and https between proxy and IRIS https://github.com/grongierisc/IRIS-Oauth2-Server-Client An example of IRIS as an Oauth2 server + embedded apache https proxy + full implementation of those tutos : https://community.intersystems.com/post/intersystems-iris-open-authoriza...
go to post Guillaume Rongier · Jun 12, 2020 Hi Yuri, You have to use a proxy server to do that. Have a look at this git : https://github.com/grongierisc/Https-Proxy-IRIS-Docker or this one : https://github.com/lscalese/isc-webgateway-letsencrypt
go to post Guillaume Rongier · May 25, 2020 Hi Tom, You can have a look at this documentation : https://cedocs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=EDIC... to help you to create a dicom production to send document to pacs. If you are not on Ensemble, you have in the community installer for ENSDEMO production : https://openexchange.intersystems.com/package/irishealth-ensdemo But in short, you have to create an EnsLib.DICOM.Document Fill it with information about the patient, ect. e.g Set pDocOut = ##class(EnsLib.DICOM.Document).%New() // Set patient data $$$THROWONERROR(tSC, pDocOut.SetValueAt("Toto^Toto", "DataSet.PatientName")) $$$THROWONERROR(tSC, pDocOut.SetValueAt(1, "DataSet.PatientID")) //Set pdf in EncapsulatedDocument $$$THROWONERROR(tSC, pDocOut.SetValueAt("application/pdf","DataSet.MIMETypeOfEncapsulatedDocument")) /// File is you binary pdf document IF '$IsObject(file) $$$THROWONERROR(tSC, $$$ERROR($$$FailedToNewClass, "%Stream.TmpBinary")) // DICOM Standard PS3.5: The Value Field containing Pixel Data, like all other Value Fields in DICOM, shall be an even number of bytes in length // Thanks Michel Liberado for this hack IF (($L(binary) # 2) '= 0) { // Any char would be fine but I want to have the End Of Transmission ASCII character $$$THROWONERROR(tSC, file.Write($CHAR(4))) } $$$THROWONERROR(tSC, pDocOut.SetValueAt(file,"DataSet.EncapsulatedDocument")) Once you have your pDocOut you can send it to business process Demo.DICOM.Process.Storage
go to post Guillaume Rongier · Apr 7, 2020 Adaptor now aviable on zpm : zpm install sql-batch-outbound-adaptor
go to post Guillaume Rongier · Mar 10, 2020 Hi, here is a similar article about ensdemo for IRIS and IRIS for health. https://community.intersystems.com/post/install-ensdemo-iris
go to post Guillaume Rongier · Jan 30, 2020 Hi Lucas, All security settings are store in the %SYS databases. You can access then with this query : select * from Security.System Or with this procedure select * from Security.System_List() If you want to do this in COS : s ResultSet=##class(%ResultSet).%New("Security.System:List") d ResultSet.Execute() While ResultSet.Next() { zw ResultSet.Data("Name") } Like that you don't have to use the export function who only create files. Now you can parse data and build your report directly from an homemade object.
go to post Guillaume Rongier · Jan 30, 2020 Hi Blaise, You can pass %OnNew expection to %New with this code snippet : Class Test.PersitenceTest Extends %Persistent { Property mandatory As %String [ Required ]; Method %OnNew(mandatory As %String = "") As %Status { set ..mandatory = mandatory $$$ThrowOnError(..%ValidateObject()) Quit $$$OK } } Now when you call the new method : USER>set test = ##class(Test.PersitenceTest).%New() If $isobject($get(newerror))=1 Throw newerror ^<THROW>%Construct+9^Test.PersitenceTest.1 *%Exception.StatusException ERROR #5659: Property 'Test.PersitenceTest::mandatory(10@Test.PersitenceTest,ID=)' required Now you can catch you %OnNew expection anywhere : ClassMethod test() As %Status { try { set test = ##class(Test.PersitenceTest).%New() } catch ex { Return ex.AsStatus() } Return $$$OK }
go to post Guillaume Rongier · Jan 16, 2020 Hi Kevin, You can use IOAddr property from EnsLib.TCP.CountedInboundAdapter IOAddr property come in this format : 57777<-127.0.0.1:54844 To extract the source IP adresse you can parse it like that : set fullIOAddr = ..Adapter.IOAddr //57777<-127.0.0.1:54844 set remoteIP = $P($P(fullIOAddr,"-",2),":",1) //127.0.0.1
go to post Guillaume Rongier · Jan 9, 2020 Studio : Like : It's fast Find in files directly on the server side Intuitive Debugging is not perfect but manageable Dislike : Only on windows No easy to use with other third party file or software Atelier : Like : Easy to use with source control Dislike : File synchronization with server especially BPL, DT, RecorMap Complicate to configure Slow VS Code with Dmitriy's plugin Like : Modern UI Crossplatform Lite Intuitive with no file synchronization concern Fast Dislike : Can't edit, manage CSP files No find in file on server side Debugging not easy to use Serenji : I haven't tried it yet because you need to install some classes on the server side, but sound very promising for debugging. Conclusion : My main IDE is VSCode with Dmitriys's plugin and some times Studio for find in files, csp managment and debugging. Do you expect to be writing code in a web-based editor five years from now? Yes, why not, already a lot of people do it on Jupyter Notebook.