I just want to share with you the knowledge aka experience which could save you a few hours someday.
If you are building REST API with IRIS which contains more than 1 level of "/", e.g. '/patients/all' don't forget to add parameter 'recurse=1' into your deployment script in %Installer, otherwise all the second and higher entries won't work. And all the entries of level=1 will work.
/patients
- will work, but
/patients/all
- won't.
Here is an example of CSPApplicatoin section which fix the issue and which you may want to use in your %Installer class:
I'm tempted to hard-code ISO-8859-1 inside my VSCode extension when working with CSP because this seems to be the encoding used by default, but I need to know if there's any other possible configuration. So can you share your experience when working with CSPs? Like issues with encoding, discoveries regarding it, workarounds etc.
Also, can someone tell me if it's possible to work with UTF-8 encoded CSP files using Atelier without breaking the encoding of the output file?
I this article I detail some strategic issues that a new development UI will need to address - these are the ones that I can think of now - others may come to light during this journey.
See the webinar by Eduard Lebedyuk here from the last Global Summit describing modern web development and Caché
And, as always, if I have missed something please comment....
Here is an ObjectScript snippet which lets to create database, namespace and a web application for InterSystems IRIS:
set currentNS = $namespace
zn "%SYS"
write "Create DB ...",!
set dbName="testDB"
set dbProperties("Directory") = "/InterSystems/IRIS/mgr/testDB"
set status=##Class(Config.Databases).Create(dbName,.dbProperties)
write:'status $system.Status.DisplayError(status)
write "DB """_dbName_""" was created!",!!
write "Create namespace ...",!
set nsName="testNS"
//DB for globals
set nsProperties("Globals") = dbName
//DB for routines
set nsProperties("Routines") = dbName
set status=##Class(Config.Namespaces).Create(nsName,.nsProperties)
write:'status $system.Status.DisplayError(status)
write "Namespace """_nsName_""" was created!",!!
write "Create web application ...",!
set webName = "/csp/testApplication"
set webProperties("NameSpace") = nsName
set webProperties("Enabled") = $$$YES
set webProperties("IsNameSpaceDefault") = $$$YES
set webProperties("CSPZENEnabled") = $$$YES
set webProperties("DeepSeeEnabled") = $$$YES
set webProperties("AutheEnabled") = $$$AutheCache
set status = ##class(Security.Applications).Create(webName, .webProperties)
write:'status $system.Status.DisplayError(status)
write "Web application """webName""" was created!",!
zn currentNS
Hi, I have used CSP to exec SQL selects from any own NAMESPACE. But in our servers we have many SQL GATEWAY CONNECTIONS.
I'd like to create a CSP page that could use these gateway to exec SQL using these gateway connections, only Administrators will use that page to launch many select at many dsn. I'm not sure if we must deploy that CSP on %SYS namespace and how to use DSN(SQL Gateway connections) that are defined on server.
Hello, has anyone tried to use Caché as a reverse proxy ?
We are trying to embed a dashboard server (Plotly Dash in this case, but it could be anything which runs on its application server) inside our application which is written in Caché. The dashboard/report server runs locally (for example, or inside a LAN) on port 8080, and has no authentication features, so we have to implement them on a different layer, and we'd like to use Caché for it.
IRIS provides us with anti login CSRF attack mitigation, however this is not the same as a CSRF attack, as login attacks only occur on the login form. There are currently no built-in tools to mitigate CSRF attacks on api calls and other forms, so this is a step in mitigating these attacks.
See the following link from OWASP for the definition of a CSRF attack:
CSP pages extend %CSP.Page. What about html/css/js/etc that are hosted on the same web application? Is there any way to override how they're processed like with how you can override a CSP page and CSP REST logic?
I'm curious about the development processes of those of you using Angular.
The starting point is that, somewhere, there lives an Angular project full of (mostly) typescript files. Eventually, those files need to be built, and the resulting built files served up to a browser.
I'm new to InterSystems software and still not so familiar with it. Therefore I do apologize in front if this question is irrelevant, not making sense or answer is commonly known.
I've did my best in search for answer, but unfortunately i haven't found anything helpfull. So I decided to ask for help here.
My problem is repetitive error which occure in CSP Gateway event log :
Error Condition: Failed to read posted content from the client (Content-Length: 1404; Data Actually Read: 0; Read Error: 70007)
I have a query that I would like to have refreshing at certain intervals lets say every 30 seconds with out refreshing the page content using the META TAGS
refreshes the whole page but I have a jquery function that will run at those intervals that I can use the problem is getting the jquery to call my COS function or is the way to do it with pure COS
I am trying to get the time difference between two time stamps one is recorded earlier to the one happening current but the problem is sql expect string while I have the other stored in a variable and if I do the following I get errors any help please
I have an application using examples from the lottery example in samples name space how do I create a dynamically link based on the data displayed to add a record id to the link
the idea is to loop over the records displays fields and link to edit the shown data at the end of the record in a table format
I'm having odd behaviors on my EC2 hosted IRIS Community instance.
When I configure a "custom login page" in the System Management Portal for my web application I'm seeing a few different behaviors that are under documented (and also undesired)
I'm trying to set up an Apache server using CSP Gateway on Windows 10 (64-bit), but am getting the error "Cannot load c:/InterSystems/IRIS_2019/CSP/bin/CSPa24.dll into server: %1 is not a valid Win32 application" when attempting to start up httpd.exe after adding the CSP-specific section to httpd.conf.
The CSP gateway is 64-bit (CSPGateway-2018.1.1.643.0-win_x64) and so is the Apache install (httpd-2.4.38-o102q-x64-vc14).
The CSPa24.dll file does exist in the specified location.
I'm trying to test SOAP integration by using one Ensemble production to send a SOAP message to another production, but I'm seeing the following error when I try to pass a message between the two:
ERROR #6248: SOAP response is a SOAP fault: faultcode=Server faultstring=Internal Server Error faultactor= detail= <error xmlns="http://tempuri.org"> <text>ERROR #7900: Service 'SOAP' not enabled for application '/csp/healthshare/hspc/'</text> </error>
The Caché / Ensemble standard distribution contains in namespace SAMPLES a nice example of a CSP page consuming WebService as a Client. I have modified it not only to display the replies but to feed them back into a Global. I used the classic Hyperevent to achieve this. The replies end up as a log in global^WSREPLY. When there is no input anymore the page closes and goes away.
There are 2 versions with visible and hidden display during operation. dc.WSCSP.reverseVerbose.cls and dc.WSCSP.reverseHidden.cls
This is a quick note on what happens when, on your CSP page, you call a cache script which returns a %Boolean and store that value in a javascript variable.
When you call a script with language="cache" and returntype="%Boolean" from a javascript script, the return value is interpreted as a string, not as a boolean.
Here's an example:
A cache script that returns (in theory) a "false" value:
Where can I find CSP file in TRAKCARE. Seems i can find js file only but not CSP file in TRAKCARE T2017, may i know the path where store the CSP files? Many thanks.
In our last lesson, we added a relationship between 2 persistent classes. We are clearly going to need to start creating REST Services to expose CRUD operations for each of these classes, but before we do that, we should really finish defining our linkages. We added code to our Widget toJSON to spool off related Accessory data, so we should really do the reciprocal and allow Accessories to return all Widgets that are compatible.
Somewhat weird behaviour in testing values in a resulting query.
I have a table where I need to read through a list of data, and apply a charge for matching occurrences. However, only ONE charge for one set of data. I have applied a DISTINCT function to the query, but as I cannot get a completely unique set, the DISTINCT function does not de-duplicate all of the sets.
I have therefore attempted to look for a value that if it repeats for the one data set, I can choose to skip the function that applies the charge.