Hi Alexender, I'll send you the WSDL in PM.

But I guess I found a workaround :

I created a new method that parse the XML with %XML.Reader and correlate the payload with my destination class :

 set reader = ##class(%XML.Reader).%New()
 // pRequest.GetPatientsByClinicResult.any.GetAt(1) <-- Header
 // pRequest.GetPatientsByClinicResult.any.GetAt(2) <-- Payload
 do reader.OpenString(pRequest.GetPatientsByClinicResult.any.GetAt(2))
 do reader.Correlate("Patients","FME.Object.Patient")

 while reader.Next(.object,.status) {
   do pResponse.Patients.Insert(object)
 }

Where FME.Object.Patient is :

Class FME.Object.Patient Extends (%SerialObject, %XML.Adaptor)
{

Property LastName As %String;

Property FirstName As %String;

Property Datex0020ofx0020Birth As %String(XMLNAME = "Date_x0020_of_x0020_Birth");

Property Gender As %String;

Property Code As %String;

Property Insurance As %String;

Property GUID As %String;

Property CLINICGUID As %String;

}

Hi Mike,
To retrive multi-part from %resquest you have do to this in the %CSP.REST class :

    // Get properties
    set body = %request.Get("body")
    if '$d(body) {
      $$$ThrowOnError($$$ERROR(9200,"no parameters"))
    }
    set dynaBody = {}.%FromJSON(body)

    // Get stream
    set stream = %request.GetMimeData("file")
    if ('$IsObject(stream) {
      $$$ThrowOnError($$$ERROR(9200,"no file"))
    }

To get property you have to use Get and for stream GetMimeData
In my example my body is a json.

Hi Yuri,
Have a look at this : https://github.com/grongierisc/iris-csvgen-ui/blob/master/src/CSVGEN/API...
Here you will find and example of a multi-part upload on a %CSP.REST class.

To get the stream from the multi part you have to do this ligne 39 to 43 :

    // Get stream
    set stream = %request.GetMimeData("id")
    if ('$IsObject(stream) {
      $$$ThrowOnError($$$ERROR(9200,"no file"))
    }

Where id is the name of you multi-part

To send the stream to a business service :

        $$$ThrowOnError(##class(Ens.Director).CreateBusinessService(BsName,.tService))

        $$$ThrowOnError(tService.ProcessInput(stream,.output))

Where BsName is the name of your business service in the active production of your namespace.
And stream you stream.

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"
    },
}

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.

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]

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

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

Hi Klaus,

You have to proxy IRIS to use https. To do so, use this git :