To use the debug features of Serenji you will need a keyfile issued by us at George James Software. Free evaluation keyfiles are available on request, normally lasting 30 days. On the Extensions section of VSCode, select the Serenji extension and follow the link in the "Installation" section to get full instructions.

I'm guessing you opened a CLS file that implements your API, which I assume is a REST one. For debugging we use InterSystems' native debug support, which operates on the INT code that your class compiles into. Depending on how you compile your class, that INT code might not have been retained. After all, it is "intermediate" code from which the runtime OBJ code gets generated. The documentation I pointed you to above explains how to keep INT code.

With Serenji VSCode's F9 key (Toggle Breakpoint) currently only operates when you are in an INT file. It's on our roadmap to add support for the setting of breakpoints in CLS source.

Also on our roadmap is the addition of a mechanism to let you debug the web gateway's server-side process that services your Postman request. Meanwhile you may be able to use Serenji's 'Existing Process' debug configuration to attach to the right server-side process, but it's challenging to pick the right one. Alternatively, use the 'ClassMethod' debug configuration and call directly the server-side classmethod that implements the method in your REST API.

The ComplexDelete classmethod uses the FileSet query:


ClassMethod ComplexDelete(filename As %String, Output return As %Integer) As %Integer
{
    Set resultset=##class(%ResultSet).%New("%File:FileSet"),return=0
    Do resultset.Execute(..GetDirectory(filename),..GetFilename(filename))
    Set exit=1
    For {
        Quit:'resultset.Next()
        Set file=resultset.Data("Name")
        Set r=$$$FileDeleteRet(file) If r,exit Set exit=0,return=r
    }
    Quit exit
}

The problem is, that query treats ";" as a delimiter separating multiple search patterns.

You could replicate the method but specify another delimiter (e.g. comma) when you Execute the query to get the resultset (untested code):

Do resultset.Execute(..GetDirectory(filename),..GetFilename(filename),,,",")

Maybe someday ISC will enhance ComplexDelete to take an optional delimiter argument.

If you want your Ensemble development team to work collaboratively in shared namespaces on a common server Git probably isn't a good choice for source control. Are you committed to using Git? Have you looked at our Deltanji product? It's integrated with Studio, and with Atelier, and also with our Serenji extension for Visual Studio Code. It's able to handle code deployment as well as versioning. It also supports scenarios where developers work in their own namespaces (whether on a shared server or on their local machines).

Take a look at methods in the %SYSTEM.Encryption class.

Like many of the classes in the %SYSTEM package, you can easily access its methods via $SYSTEM, e.g.

USER>d $system.Encryption.Help()
'Do $system.Encryption.Help(method)' will display a full description of an individual method.
 
Methods of the class: %SYSTEM.Encryption
 
AESCBCDecrypt(ciphertext,key,IV)
     This method performs AES decryption in Cipher Block Chained (CBC) mode.

...

If I go to http://localhost:57772/testwebapp, I get "Not found".

Yes, this is expected. The private instance of Apache which HealthShare runs on your port 57772 isn't set up to serve 'default' page(s).

As for your relative path problem, please show us what your index.html file looks like. Simplify it if you wish, but make sure you don't fix the problem as you do so!

I don't believe it's possible for the CACHESYS database (the one that sits behind the %SYS namespace) to be added to the mirror, because each member of the mirror needs to store instance-specific data there.

I've seen sites write their own scripts to export users, roles etc periodically from the master instance into files and import them into the other(s). For example, the Export method of Security.Users

But it's long puzzled me that InterSystems doesn't seem to have done this job for us all. Or perhaps they have, and I haven't yet heard about it.

Daniel, if your team benefits from working in a shared namespace but you'd still like source control, please consider using Deltanji from George James Software. This is a powerful and mature tool which runs natively within Caché / Ensemble / IRIS environments and integrates with Atelier, Studio and Portal editors.  It is extensively used around the world, including at NHS sites.

I'm guessing you're doing this on Windows, and using the "Terminal" option from the popup menu from a Cache "cube" in your system tray.

Is the cube blue? Or grey? Blue represents a locally-running instance of Cache, which is commonly how Windows folk have things, particularly when evaluating.

When you launch Terminal from your cube, what does the titlebar of the window say? It might mention Telnet, in which case you've somehow configured your cube to be connecting over telnet. When running on Windows, it's the Cache server that's responsible for operating the telnet service. Though if this isn't running you wouldn't get "Access denied", but instead a connection failure.

Please give us more information about your situation and I'm confident we'll be able to help you.