for details on variable scoping see Summary on Local Variable Scoping

As the SQL Code generator dates from times where ProcedureBlock was unknown
any generated code for SQL access I've seen over decades just works with  [ ProcedureBlock = 0 ]

The 'automatic' you mention is the default if your class is set t to [ ProcedureBlock = 1 ] which is a default.

By changing the variable name you found the best solution yourself.   yes

Herman 

I think you have it in COS since Strings became almost endless.
Par #2) of my answer showed it:

the traditional style you may know from Caché I/O Device Guide  having also just 1 parameter

do  ##class(my.pieces).method("/SERVER=127.0.0.1:/PORT=1972:/NAMESPACE=SAMPLES")

and the method end:

ClassMethod method(parameter as %String(MAXLEN="") {
   for par="SERVER","PORT","NAMESPACE" 
   set @par=$P($P(parameter,par_"=",2),":") 
   zw @par 
   #; now do something ...   
}
SERVER="127.0.0.1" 
PORT=1972 
NAMESPACE="SAMPLES"

Log In over Terminal as Privileged User and move to Namespace %SYS   and fix your Security 

USER>ZN "%SYS"
%SYS>DO ^SECURITY
 
1) User setup
2) Role setup
3) Service setup
4) Resource setup
5) Application setup
6) Auditing setup
7) Domain setup
8) SSL configuration setup
9) Mobile phone service provider setup
10) OpenAM Identity Services setup
11) Encryption key setup
12) System parameter setup
13) X509 User setup
14) Exit
 
Option? 5
 
1) Create application
2) Edit application
3) List applications
4) Detailed list applications
5) Delete application
6) Export applications
7) Import applications
8) Exit
 
Option? 2
 
Application to edit? ?
 
 Num  Name                           Namespace
  1)  /api/atelier                   %SYS
  2)  /api/deepsee                   %SYS
  3)  /csp/samples                   SAMPLES
  4)  /csp/samples/docserver         SAMPLES
  5)  /csp/user                      USER
  6)  /isc/studio/usertemplates      %SYS
  7)  /TEST                          SAMPLES
  8)  /webShop                       USER
  9)  /csp/broker                    %SYS
 10)  /csp/docbook                   DOCBOOK
 11)  /csp/documatic                 DOCBOOK
 12)  /csp/sys                       %SYS
 13)  /csp/sys/bi                    %SYS
 14)  /csp/sys/exp                   %SYS
 15)  /csp/sys/mgr                   %SYS
 16)  /csp/sys/op                    %SYS
 17)  /csp/sys/sec                   %SYS
 18)  /isc/pki                       %SYS
 19)  /isc/studio/rules              %SYS
 20)  /isc/studio/templates          %SYS
 
Application to edit? 12 /csp/sys
Description? System Management Portal =>
Enabled? Yes => Yes
CSP/ZEN Enabled? Yes => Yes
DeepSee Enabled? No => No
iKnow Enabled? No => No
Inbound Web Services Enabled? Yes => Yes
Require resource to use application? No => No
Role to always add to application?
New match role to add to application?
Do you want to go back and re-edit any match roles or target roles? No => No
Allow Not authenticated access? Yes => NO
Allow Password authentication? No => YES
Accept Login Tokens created by other CSP applications? No =>

As you say:  your .EXE is on the server and NOT on the CLIENT.

Some terminal emulators (e.g. KEA) once had the feature to launch a LOCAL command triggered by an ESC sequence.
But this requires your .EXE to be already installed on your LOCAL client.

You may need to have a telnet or SSH connection to your client.

Browsers typically don't allow this. But they may run JavaScript (which isn't  your .EXE)

a simple example how it works:

I create a routine %BANNER.int  next in my terminal

%BANNER  ;mnemonic demo
TOP      ;
         write #,%mybanner,!
         quit

next in my terminal

USER>set %mybanner="HI I'm a BANNER"_$c(13,10)_"============="

USER>use $IO::"^%BANNER"  write /TOP,"my first line",!

and that's my screen

HI I'm a BANNER
=============
my first line

 

the DEFAULT function of # for a terminal window emulating a CRT ist hardcoded.

see Terminal I/O WRITE

"Issuing WRITE # to a CRT terminal clears the screen and sends the cursor to the home (0,0) position."

using a Mnemonic Definition you may supply the required escape sequence to cover your needs.

but instead of WRITE #  you may need to use  WRITE /TOP  (just as an example)

For all about Mnemonics see Controlling Devices with Mnemonic Spaces.

Zen Application is the "package" you call from a browser and typically sets a common design.
Zen Pages are the individual web pages that make up your application.
Client Methods is JavaScript executed in your browser.
Server Methods run on the Caché Server and interact with the Zen page using HyperEvents.

I'd suggest you take a tour through the docs for details. 

 

Using Zen      Introduces Zen, the InterSystems framework for web application development.

Developing Zen Applications     
Addresses advanced Zen application programming issues such as security, localization,
client side layout management, and custom components.

you operate not on document object but on zenPage object

see docs:  Client Side Functions, Variables, and Objects  at the beginning >>>

  • Find a Zen component by id value. Returns the object that matches the input id.

  • The zen(id) JavaScript function is equivalent to the following client-side JavaScript method call on the page object:

  • zenPage.getComponentById(id)

  • You can use the zen(id) function wherever JavaScript syntax is appropriate; 

In namespace %SYS you have the utility  ^JRNDUMP  which displays the content of journal files in "readable" text format.
You may need to adapt it to your requirements.

Journal: c:\intersystems\cache\mgr\journal\20190808.004
   Address   Proc ID Op Directory        Global & Value
===============================================================================
    131088      6600 S  c:\intersystems+ %SYS("SERVICE","ECPCluster") = 0
    131152      6600 S  c:\intersystems+ %SYS("LASTSESSIONGUID") = "5ª"_$c(9)_"+
    131224      6600 BT
    131240      6600 ST c:\intersystems+ %SYS("SERVICE","ECPSessionVersion") = 2
    131316      6600 CT
    131644     10960 S  c:\intersystems+ SYS("LastLicenseKey") = "LicenseCapaci+
    132620      2600 S  c:\intersystems+ SYS("Security","UsersD","unknownuser")     132692     10960 K  c:\intersystems+ SYS("CLMANAGER")
    132740     10960 S  c:\intersystems+ SYS("CLMANAGER") = 1
    132792     10960 S  c:\intersystems+ SYS("CLMANAGER",1) = $c(127,0,0,1,15)_+
    132848     10960 S  c:\intersystems+ SYS("CLMANAGER",1,"started") = 1

Depending on your activities in the DB  this may take many many GB !
I'd suggest examining the content first from Mgmt Portal to see if this is what you expect.