I forgot to mention I am on Windows.

"iris terminal" works somehow. There is several issues with this approach :

- it does not redirect input/output (eg: echo 50 | iris terminal IRIS). One workaround is to put commands into a routine and call it explicitly : iris terminal IRIS MYROUTINE %SYS

- it does not block/wait until completion (which is an issue since I use that command from a deployment tool that need to know once it's done)

- there is no way to provide custom credentials (eg: execute commands with a specific user)

Thanks. This is the same trick as what I found in "InterSystems IRIS Adoption Guide".

If I wrote this in command line (eg: iris session IRIS), it outputs the command line documentation (which indicate something went wrong). "iris console IRIS" works by the way. Do I need to enable something before I can use session parameter ?

EDIT : it seems that irissession.exe is the equivalent on Windows.

Thanks. Out of curiosity, can you show the extended syntax to call a method from another namespace ?

Also : when you say Config.MapGlobals use globals in %SYS, what are they used for ? AFAIK mappings are stored in IRIS.cpf file, not in globals (or maybe you are referring something else).

If you want, i can post a skeleton class where you can start with.

That would be really great.

Did you added menu item by writing code (eg: to extend %Studio.Extension.Base) or is there another way ?

Thank you. I missed the fact that what is below /mgr/ is indeed system manager DBs (seems obvious).

Customer DB and code is actually somewhere else, in different namespaces and drive. I tried to rename CACHE.DAT to IRIS.DAT and it works (after proper backup). The only thing I need is to run some upgrade command on them.

Thanks for the info. While there is probably something wrong with the OS (Windows in this case), is there a lighter way in Caché to execute a routine in a separate task ? I am thinking something like starting a new thread or using a thread pool. Does such thing exists ?

Thanks for clarification about the name. I found it was called like that before I saw your post and edited OP.

You are right. There is actually two ways the program send requests : either by submitting form (which result in fields being added to the body of the request as expected). And another way for server side  validation, using a XMLHttpRequest. It append everything to the URI. I might fix that part. 

Here is some code example

<form name="WWW" id="WWW" action="/csp/foo.cls" method="POST">
    <textarea id="PARAM1" name="PARAM1"></textarea>
</form>
document.WWW.submit();

Which will result in the following request :

POST https://something/csp/foo.cls?PARAM1=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX HTTP/1.1
Accept: */*
Content-Type: text/html;charset=UTF-8
Referer: https://something/
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache

As you can see, input value is added to the url, just like a GET.