We're not all dead yet! I still have a full set of MSM 4.4 printed documentation on my bookshelf. And several developers who worked for Micronetics are still on the staff at InterSystems (pinging @Chuck Sorenson)

I haven't tested this, but you may be able to use the ZFLUSH command to flush buffers to disk, after first setting switch 13 using D ^SWREG in the MGR UCI to disable database writes. SWREG has entrypoints to let you set and clear switches programmatically.

In case there are still some MSM experts out there who aren't on Developer Community, you might also try posting on https://groups.google.com/forum/#!forum/comp.lang.mumps

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.

Bear in mind that local variable arrays can hold orefs but PPGs cannot:


SAMPLES>w $zv
Cache for Windows (x86-32) 2017.2.2 (Build 865U) Mon Jun 25 2018 11:10:00 EDT
SAMPLES>
 
SAMPLES>s oP=##class(Sample.Person).%OpenId(1)
 
SAMPLES>w oP.Name
Gallant,Yan N.
SAMPLES>
 
SAMPLES>s LocalArray(1)=oP
 
SAMPLES>s ^||PPG(1)=oP
 
SAMPLES>w LocalArray(1).Name
Gallant,Yan N.
SAMPLES>w ^||PPG(1).Name
 
W ^||PPG(1).Name
^
<INVALID OREF>
SAMPLES>w $isobject(^||PPG(1))
0
SAMPLES>w ^||PPG(1)
1@Sample.Person
SAMPLES>
 
SAMPLES>w LocalArray(1)
1@Sample.Person
SAMPLES>w $isobject(LocalArray(1))
1
SAMPLES>

After a couple of maintenance releases this week we're now up to version 3.0.5. The recent changes:

  • Improve performance when opening documents from namespaces containing a large number of items.
  • Switch to Explorer view after 'Add Folder to Workspace' command.
  • Make 'Never' option of license message work as designed.
  • Check keyfile on initial connect.
  • Key request email body lacked linebreaks.
  • Add a clipboard-copying alternative to the option that attempts to compose a key request email.
  • Add client DN to message when certificate check fails.
  • Avoid affecting MRU records of a connected Deltanji.
  • Support binary web app files.
  • Cater for text files without terminator on final line.
  • Malformed serverAddress setting prevented Serenji from connecting to Deltanji.
  • Skip web apps that have a dispatch class defined.
  • Web app files in subdirectories more than one level deep were not listing.
  • When not using Cache authentication, userid in new document template was wrong.
  • Web app files written into an unmanaged namespace via the pkg:// notation were being set readonly.
  • Clear previous VSCode Problems entries when fixing CSP compile errors.
  • Fix unreliable behaviour when ephemeral ports are being used.