go to post Steven LeBlanc · Nov 20, 2019 I think this would be much easier with BPL/DTL. Why not have your ObjectScript Business Process do its thing, then hand the result to a BPL to loop over OBRs and break it into multiple messages? Or put the BPL first, if your 'trickery' should happen to each generated message individually. -Steve
go to post Steven LeBlanc · Nov 5, 2019 I wasn't sure what RPMS was, but a Google search tells me it's an application for Indian Health Service. Are you trying to migrate the app from Caché to IRIS? Or is it already on IRIS and you want to know how to run it inside a Docker container? Or none of the above? The steps would be different depending on your answer. Given that we're pretty far nested into a comment thread on an unrelated topic, I would recommend you either create a new DC post with more detail/background, or contact your Sales Engineer for advice on how to proceed with your migration or project. Steve
go to post Steven LeBlanc · Nov 4, 2019 Hi Stefan, I believe Fabian was describing creating a new image, based off of the default InterSystems image, but modifying the user and group. (By the way, even though you are on Docker for Windows, InterSystems IRIS images are based on Ubuntu, and Docker for Windows runs in a Linux VM) The excerpt above would be placed in a new Dockerfile and you would build a new custom image. This approach is described here: https://irisdocs.intersystems.com/irislatest/csp/docbook/Doc.View.cls?KEY=ADOCK#ADOCK_iris_creating However, may I ask, what version of InterSystems IRIS are you using? I have seen these "Sign-on inhibited" errors frequently in the past, but I think they've been mitigated in recent versions. 2019.3 was just released, and should be available in the Docker Store and cloud marketplaces in the next few days. -Steve
go to post Steven LeBlanc · Nov 4, 2019 Hi David, Please refer to this answer from another post, and follow the links at the bottom as a guide for setting this up: https://community.intersystems.com/post/password-change-inbound-web-services#answer-427611 -Steve
go to post Steven LeBlanc · Nov 4, 2019 Yes it does, IRIS includes interoperability, just without the healthcare-specific standards built in (HL7, FHIR, IHE, etc.) Unhealthy, nice :-)
go to post Steven LeBlanc · Nov 4, 2019 I'm not sure why that would be, and I'm not able to reproduce it. The IRIS for Health Community instance on GCP has not yet been updated to the latest 2019.4 preview build. The standard IRIS Community instance has, and that appears to work out of the box for me. I'm told that the IRIS for Health listings should be updated in the next few days as well.
go to post Steven LeBlanc · Nov 4, 2019 Strange... try logging in with: Username: _SYSTEM Password: SYS instead? Maybe you had a typo with your new password? I'm not sure what else it could be. If this does not work, you may want to try blowing away the instance and launching a new one.
go to post Steven LeBlanc · Nov 4, 2019 Hi Ignacio, It looks like the container does not run automatically by the GCP launcher. I was able to start it manually: leblanc@intersystems-iris-health-community-editio-2-vm:~$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESleblanc@intersystems-iris-health-community-editio-2-vm:~$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEintersystems/irishealth 2019.1.0S.111.0-gcp a39d75e7a42b 9 months ago 1.61GBleblanc@intersystems-iris-health-community-editio-2-vm:~$ sudo docker run -d -p 52773:52773 --name iris --init intersystems/irishealth:2019.1.0S.111.0-gcp1932a6736c70d5e5dbd604b040f11907e8cdffa0aaccbbfce14bc37114c1ec46 Then I can launch the Management Portal, log in with SuperUser/SYS (then prompted to change my password), and use the instance. I'll follow up internally to make sure the environment launches as intended, or at least see that the instructions are modified if this is how it is intended to work. -Steve
go to post Steven LeBlanc · Feb 27, 2019 I think you want to use the DirectoryIndex directive in Apache to redirect to a default page, or something similar if using IIS, as described here:https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...-Steve
go to post Steven LeBlanc · Apr 18, 2018 Oops, yes it was! I couldn't find the code on my machine, so I rebuilt a production around these components and re-exported. Please try the new export, and let me know if you have issues.Thanks,Steve
go to post Steven LeBlanc · Mar 28, 2018 Hi James,Why do you need to convert the HL7 message to a stream at all? You can use EnsLib.HL7.Operation.HTTPOperation, which expects a message of type EnsLib.HL7.Message, and handle the conversion and HTTP POST for you. Then you can apply HL7 routing rules and transformations in your production, and see the HL7 parsed out with the appropriate schema overlaid in the message trace.Steve
go to post Steven LeBlanc · Oct 25, 2017 Does your router apply a data transformation to map the Record Map into an object of type EnsLib.EDI.XML.Document? If you have a schema for the target XML format, you can import that into Ensemble under Interoperate > XML > XML Schema Structures, and then create a Data Transformation to go from your Record Map to an EnsLib.EDI.XML.Document, with your imported schema. Then send the result to your XML FileOperation, as that should be in the format that the operation expects.
go to post Steven LeBlanc · Jun 27, 2017 There's no Service/Operation setting to do this automatically. Warnings are written to the Event Log, so one approach that has been recommended before is to set up a task that mines the Event Log periodically to find new warnings, and handle them that way.Are there specific warnings that you're concerned about? If it's something that you want to be alerted, perhaps those should be considered errors and not warnings.
go to post Steven LeBlanc · Jun 7, 2017 Not in the Constraint as far as I know, but you can access the original filename within the When condition using the Document.Source keyword and route that way. For example:
go to post Steven LeBlanc · May 3, 2017 Scott, While there's nothing officially supported in the product, I've pulled some code from a sample that a colleague wrote years ago that should do what you need. Please note that I have not personally tested this code, and since it is not part of the product, it has not been through any QA testing by InterSystems, so you would need to test and use at your own risk. /// This method takes in an UUencoded GlobalCharacterStream and /// returns an UUdecoded GlobalBinaryStream. /// UUencoding is a form of binary-to-text encoding that originated in the Unix program /// uuencode, for encoding binary data for transmission over the uucp mail system. /// The name "uuencoding" is derived from "Unix-to-Unix encoding". Since uucp converted /// characters between various computers' character sets, uuencode was used to convert /// the data to fairly common characters that were unlikely to be "translated" and /// thereby destroy the file. This method UUDECODE reverses the effect of uuencode, /// recreating the original binary file exactly. /// ref.: http://en.wikipedia.org/wiki/Uuencoding Method UUDECODE(ByRef sUUE As %GlobalCharacterStream, Output sUUD As %GlobalBinaryStream) As %String { S UUDFilename="" D sUUE.Rewind() S data=sUUE.ReadLine() // A file in uuencoded format starts with a header line of the form: // begin (mode) (filename) // where (mode) is the file's Unix read/write/execute permissions as three octal digits, // and (filename) is the name to be used when recreating the binary data. S data=$e(data,$f(data,"begin"),$l(data)) F { Q:" 01234567"'[$e(data,1,1) S $e(data,1,1)=$tr($e(data,1,1)," 01234567","") ; ignore (mode) } S UUDFilename=data While('sUUE.AtEnd) { S data=sUUE.ReadLine() // The file ends with two trailer lines: // ` // end // (The grave accent indicates a line that encodes zero bytes) Q:data="end" // Each data line starts with a character indicating the number of data bytes // encoded on the line and ends with a newline character. All data lines, // except perhaps the last, encode 45 bytes of data. The corresponding encoded // length value is 'M' (see uudec() below), so most lines begin with 'M'. S n=$$uudec($e(data,1,1)) // Each group of four bytes will be decoded back to a 24-bit value. This // 24-bit value is formed by 4 groups of 6-bit values, each corresponds // to every byte in the encoded group. F i=2:4:$L(data) { Q:n<=0 if n>=1 { ; decode(first 6-bit)<<2 | decode(second 6-bit)>>4 ; first 6-bit: 00XXXXXX --> XXXXXX00 ; second 6-bit: 00YYbbbb --> 000000YY ; first decoded byte: XXXXXXYY S ch=$zb($zb($$uudec($e(data,i,i))*4,255,1),$$uudec($e(data,i+1,i+1))\16,7) D sUUD.Write($c(ch)) } if n>=2 { ; decode(second 6-bit)<<4 | decode(third 6-bit)>>2 ; second 6-bit: 00bbXXXX --> XXXX0000 ; third 6-bit: 00YYYYbb --> 0000YYYY ; second decoded byte: XXXXYYYY S ch=$zb($zb($$uudec($e(data,i+1,i+1))*16,255,1),$$uudec($e(data,i+2,i+2))\4,7) D sUUD.Write($c(ch)) } if n>=3 { ; decode(third 6-bit)<<6 | decode(fourth 6-bit) ; third 6-bit: 00bbbbXX --> XX000000 ; fourth 6-bit: 00YYYYYY ; third decoded byte: XXYYYYYY S ch=$zb($zb($$uudec($e(data,i+2,i+2))*64,255,1),$$uudec($e(data,i+3,i+3)),7) D sUUD.Write($c(ch)) } S n=n-3 } } Q UUDFilename // Each uuencoded byte has a range of values from 0 to 63. When 32 is added, // the ASCII characters will lie in the range 32 (space) to 95 (underscore). // ASCII characters greater than 95 may also be used, but only the six // right-most bits are relevant. Since the space character is deemed // problematic for data transmission, so the grave accent (` or ASCII 96) is // used to represent the encoded zero value. uudec(ch) Q $zb($a(ch)-32,63,1) ; 6 bits AND }
go to post Steven LeBlanc · May 3, 2017 Tom,I presume by now you've had this answered by the WRC, but the issue is most likely that the private Apache web server that ships with Caché/Ensemble does not currently support SSL. In order to configure SSL, you would need to configure a full Apache or IIS web server, which is typically recommended for any public-facing, production-level deployment anyway.-Steve
go to post Steven LeBlanc · May 1, 2017 Hi,Thanks for your response. I'm not necessarily asking HOW to do this, but rather I'm interested in whether or not this is something you SHOULD do. Should these outgoing calls go through the ESB, or should the calls just be made directly from the back-end Caché application? I suppose you gain tracing/monitoring capabilities, but is it worth the extra stop/point of failure?Thanks,Steve
go to post Steven LeBlanc · Apr 26, 2017 Hi,There are a few ways. Are you using Caché or Ensemble?In Ensemble, you can use a REST Operation, as described here: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...In a Caché class, you can use the %Net.HttpRequest class to issue any GET/POST request to a REST URL: http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?P...Steve
go to post Steven LeBlanc · Jul 7, 2016 Thanks Mike. That should give me what I need to get it working. I was hoping I could get it done with a routing rule, if I could find a way to pass the ID as a parameter, but I'm not sure it's an option. I'll give this a try.Steve