go to post Rich Taylor · Jun 5, 2019 Edrian,You state that Request.JSON is a simple string. The %ToJSON() method only exists as part of the DynamicObject and DynamicArray classes. Actually I am surprised that this is not failing completely before you even send the request because of this. If your variable already has well formed JSON as the value then you can just write that into the EntityBody.BTW, When you deal with JSON in the future you may find an advantage in using the Dynamic object handling for JSON. For example take the following JSON {"NAME":"RICH","STATE":"MA"}If this is in a variable, say jsonStr, I can load this into a Dynamic Object using the following command:set obj = {}.%FromJSON(jsonStr)Now you can use object references to work with the JSONWrite obj.NAME -> displays RICHI can add new properties dynamicallyset obj.ZIPCODE = "99999"Finally convert this back to a json string with:write obj.%ToJSON()which would display {"NAME":"RICH","STATE":"MA","ZIPCODE":"99999"}See the documentation at https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GJSON_preface
go to post Rich Taylor · May 21, 2019 I would say that this is definitely not recommended. It does violate the intent of the object design. You are probably not privy to why this was marked private and internal. Providing a method to bypass that could create problems. Of course if this is only for debugging a class that you don't have the ability to edit it may be acceptable.
go to post Rich Taylor · Apr 9, 2019 I find the easiest way is to log into the CSP Gateway for the web server you are using. If this is a development machine and you are using the stripped down web server internal to Cache you can access this from the management portal. The path is System Adminstration -> Configuration -> CSP Gateway Management. If you looking to do this against the traffic on an external web server then you need to the path to the Module.xxx. On my Windows VM this is http://192.168.x.xxx/csp/bin/Systems/Module.cxw.You will need the Web Gateway Management username and password. The user is typically CSPSystem. Once logged in look for the View HTTP Trace on the left hand menu.Click on that and you will see a screen with 'Trace OFF' and 'Trace ON' at the top of the left hand menu. You will also see options to refresh and clear. Below that will appear any requests that have been traced. This is probably blank at this time. Click Trace ON (it should change to RED. Now go make a request that you want to trace. Once your request is complete go back and turn off the trace so you don't get a bunch of requests that have nothing to do with what you want to examine. I did this and made a request for the System Management Portal. Here is the list I get.Note that I see two requests. Only one is what I want to look at which, in my case is the first. When you select a trace you will see the request a the top followed by the response. Note if the body of the response is not readable you likely have gzip compression on. Go to the Application settings in the web gateway and turn this off to actually be able to see the body. Remember to turn it back on later though.Here is my results (truncated). Hope this helps you
go to post Rich Taylor · Mar 19, 2019 John,I thought I would add another example to this as I have never needed to use the control wrapper solution. I found I had to add gzip as an installed package in my docker file. Below is a docker image built for centos. The installation is HealthShare rather than Cache, but the that is just a change in the InterSystems installer referenced. The overall process should work with value that make sense for your environment. One very important change is that the entry point should be ccontainermain. The reason for this is the entry point needs to stay running to keep the container up and running. Ccontrol will start Cache then end which will actually exit and shutdown the container. There is a link to where to find this program at https://community.intersystems.com/post/cache-db-docker-container# pull from this repository# note that if you don't have the distribution you're after it will be automatically# downloaded from Docker central hub repository (you'll have to create a user there)#FROM centos:latest# setup vars section___________________________________________________________________#ENV TMP_INSTALL_DIR=/tmp/distrib# vars for Caché silent installENV ISC_PACKAGE_INSTANCENAME="HSPI" \ ISC_PACKAGE_INSTALLDIR="/opt/intersystems/healthshare" \ ISC_PACKAGE_INITIAL_SECURITY="Normal" \ ISC_PACKAGE_CLIENT_COMPONENTS="" \ ISC_PACKAGE_USER_PASSWORD="xxxx" \ ISC_PACKAGE_CSPSYSTEM_PASSWORD="xxxx" \ ISC_PACKAGE_HSMODULES="coretech,hscore,mprl,hspi"# distribution file________________________________________________________________# set-up and install from distrib_tmp dirRUN mkdir ${TMP_INSTALL_DIR} && \ mkdir -p ${ISC_PACKAGE_INSTALLDIR}/mgrWORKDIR ${TMP_INSTALL_DIR}# update OS + dependencies & run silent install___________________________________RUN yum -y update && \ yum -y install tar gzip which java-1.8.0-openjdkADD HealthShare-2018.1-Exchange_Insight_Index-b7718-lnxrhx64.tar.gz .RUN ./HealthShare-*/cinstall_silent && \ rm -rf ${TMP_INSTALL_DIR}/* && \ ccontrol stop $ISC_PACKAGE_INSTANCENAME quietly COPY cache.key $ISC_PACKAGE_INSTALLDIR/mgr/# TCP sockets that can be accessed if user wants to (see 'docker run -p' flag)EXPOSE 57772 1972# container main process PID 1 (https://github.com/zrml/ccontainermain)WORKDIR /ADD ccontainermain .ENTRYPOINT ["/ccontainermain","-cconsole","-i", "HSPI"]
go to post Rich Taylor · Mar 15, 2019 Leo,I would go to the "Building Your First HL7 Produciton" learning path in the links I sent earlier. There are several learning resources listed here. If you are in hurry you can skip the introduction components and go direct to the "Integration Architecture" course. Then follow along with the other courses in order. I would recommend at least the:HL7 I/O courseall three courses under the message router sectionData Transformation BasicsPractice building data transformationsthe two courses under troubleshooting would be advisable tooDo the Final Exercise.You can always go back and review other courses as needed. Also search our Learning Services area (Learning on the top bar) for other courses and presentations.You can contact me directly (my email is in my profile)) if you want to take this offline.
go to post Rich Taylor · Mar 13, 2019 Yes that would be a good course. There is a date coming up on April 8th. In the meantime the online learning can get you started. You should be able to accomplish quite a bit without any programming. Where you will need to do some is in creating a message class to contain the extracted data that is to be sent to SQL Server and to create the actual SQL operation to update SQL server. Neither is difficult to do. I would definitely suggest engaging with your InterSystems Sales Engineer for guidance.
go to post Rich Taylor · Mar 13, 2019 Not to worry. You don't need to do C# programming or deal with obscure libraries. With Ensemble you can accomplish much of what you need to do without alot of programming. I would start with the "Build your first HL7 production" learning path to discover how to create an HL7 integration. There is also Classroom training that you can sign up for. Check our learning services site for class schedules.To update SQL Server you would create a Business operation (which will require some coding using ObjectScript) that uses our SQL Outbound adapter to update SQL Server. Here is a link to that documentation. Using the SQL Outbound AdapterFinally, if you need more direct assistance I would recommend engaging with the Sale Engineer assigned to your account. We're always here to help get you moving in the right direction.
go to post Rich Taylor · Mar 13, 2019 Leo,First can I ask which InterSystems product you are working with? Ensemble, Health Connect, and IRIS for Health all provide tools that make handling of HL7 much easier. Further these are all interoperability platforms which provide tools for building these types of integrations efficiently and fast.A further question is what are you intending to do with this HL7 message? Just put the entire message file contents into SQL Server as a blob or are you looking to pull out specific data to put into columns in a SQL table? From your further comments I believe it is the latter, but clarity would help here.For the moment I make an assumption that you are using either Ensemble or Health Connect and point you at some documentation that can help you.Ensemble HL7 Version 2 Development GuideAlso some Learning Services linksIntegration ArchitectureBuilding Your First HL7 Production learning pathHope this helps
go to post Rich Taylor · Feb 6, 2019 You don't indicate which product you are using (IRIS, Cache, Ensemble) which may impact on some details. However the basic code to load the form data and execute the Post call is going to be the same.You need an instance of %Net.HTTPRequest. If you are in Ensemble then you would work through the adapter. For Cache or IRIS create an instance of this class and configure it for the server end point.Add your form data to the request by calling the InsertFormData method.ex. req.InsertFormData("NameFld", "NameValue")To cause the request to be performed call the Post methodex. set status = req.Post(REST resource URL)If you assign the server and port properties of the request then do not include them in the URL here. You can access the response in the HTTPResponse property of the request. This will be an instance of the %Net.HTTPResponse class.You can read more on the %Net.Request class in the class reference at https://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls
go to post Rich Taylor · Dec 28, 2018 Connor,This is true for the Docker0 bridge which I have setup and noted in the post. The problem is that docker-compose does not use this setting at all. Unless you configure the docker-compose.yml file using one of the methods I mention you will still get a 172.x.x.x address.Rich
go to post Rich Taylor · Oct 8, 2018 You can use the community license for what ever you want. There are limitations on configuration. Once you exceed the capabilities enabled by this license you would need to move up to some kind of paid license. Using it for learning the product should not come close to the limit however. Have fun!!
go to post Rich Taylor · May 30, 2018 I see that the ID is not in the export. However the import does figure out how to match an import to an existing item since it does not allow you to overwrite that existing records. Otherwise we would see a duplication of records under new ID's. As far as the methods to use I would have to disagree with this recommendation. A system administrator should not have to write code to maintain the systems under their care. Documentation is important, however that can be accomplished with a literal document. Then, failing to have a export/import or enterprise management function, those changes would manually be done to all effected systems. Writing code is less clear to everyone and is no less work.
go to post Rich Taylor · May 30, 2018 Let me clarify. this has to do with the ExportTasks and ImportTasks methods of %SYS.Task class. I need to know the qspec options that have impact on these processes.as to question 2. The process is that they are setting up a new server for backup and want to replicate what they have setup for the current server. Exporting and importing what is currently present is the best way. If they are going to write a program then they could just as well compare each existing task and do the changes manually. There is an ongoing maintenance side to this which would also be better done with an export an import.So to the original question is there anyway to tell ImportTasks to override the tasks that exist?
go to post Rich Taylor · May 30, 2018 Eduard,I had some additional questions.What are the options for qspec beyond the default 'd'?What if I want to override system defined tasks because I have adjusted things like schedules? Is there an option to do this? qspec?
go to post Rich Taylor · May 10, 2018 Eduard,Ok, I had not noticed that, but you are correct. I had tried other methods first as I noted before and ran into issues loading onto the new systems. I had obviously skipped the step of verifying the export file when I tried this method. So I gather that you HAVE to pass in a list of IDS to export. Leaving it blank does not export all. As I mentioned the documentation is extremely sparse on this api. I will test this again later.
go to post Rich Taylor · May 9, 2018 ERROR #6037: Nothing imported.Not terribly helpful I'm afraid. I know that when I attempted to use SQL I was getting many Field Read Only errors. So this may be related to that.
go to post Rich Taylor · May 9, 2018 I agree except that the import would not work. There is little documentation on utilizing these tools and I cannot even read the source code.
go to post Rich Taylor · May 9, 2018 Ok, Here is the procedure that worked for me:Export:merge ^TaskList = ^SYS("Task","TaskD")set sc = $System.OBJ.Export("TaskList.GBL","c:\temp\TaskList.gbl")note the extension GBL is not part of the globalname. It is used to indicate that we want to export a globalthe file destination is completely up to you.Importset sc = $System.OBJ.Load("c:\temp\TaskList.gbl",,.log)merge ^SYS("Task","TaskD") = ^TaskList
go to post Rich Taylor · May 9, 2018 I am clicking on the class and not the package in my build. and getting what looks like package documentation. There was obviously an issue in the build I was using. Regardless the code for export worked. But I can't get the import to function. Looking as exporting globals now.