Robert Cemper · Sep 14, 2019 go to post

a solution with NO $TRANSLATE

 set str="aN d.ef123$eR=xx?,yWz"
 for i=1:1:$l(str) s:$e(str,i)'?1(1AN,1".",1" ",1",") $e(str,i)=" " 

 aN d.ef123 eR xx ,yWz

Robert Cemper · Sep 12, 2019 go to post

I fear there is no such utility by default. 
You may need to do it manually to see if it is a real problem or a side effect from parallel compiling.

I just verify it by multiple runs on CompileAll to be sure.

 [ I'm  just  facing a list of ~100 including deployed classes    crying ] 

If you have private %classes mapped ito %SYS then you have to compile them manually.

compileAll doesn't include %SYS for good reasons. 

Robert Cemper · Sep 6, 2019 go to post
Insert into LISDB.State (short,long)
SELECT 'AL','Alabama'
Union All
SELECT 'AK','Alaska'
Union All
SELECT 'AZ','Arizona'
Union All
SELECT 'AR','Arkansas'
Robert Cemper · Sep 6, 2019 go to post

From docs.

A host variable is a local variable that passes a literal value ....

see: Host Variables

You are using instead object property references.==>    objSearch.StartIndex,  .....
Load your properties into local variables and it should work

Robert Cemper · Sep 5, 2019 go to post

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

Robert Cemper · Aug 27, 2019 go to post

Alexey,

you are perfectly correct. My intention was to demonstrate that the ancient approach of 
OPEN and USE command parameters dating from the previous millennium is still valid.

wink
$LB() is definitely the more general and flexible solution. 

yes

Robert Cemper · Aug 26, 2019 go to post

Before you try a re-install ation of Caché  emergency access could be your last chance.

Follow the guide very strictly there is a high risk to cause unrecoverable damage. 

Robert Cemper · Aug 26, 2019 go to post

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"
Robert Cemper · Aug 24, 2019 go to post

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 =>
Robert Cemper · Aug 23, 2019 go to post

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)

Robert Cemper · Aug 12, 2019 go to post

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

 

Robert Cemper · Aug 12, 2019 go to post

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.

Robert Cemper · Aug 10, 2019 go to post

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.

Robert Cemper · Aug 10, 2019 go to post

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; 

Robert Cemper · Aug 9, 2019 go to post

but that way

USER>f a=0.8:.1:2.2  w a,?7,a\1+(a#1>0*1),?10,!
.8     1
.9     1
1      1
1.1    2
1.2    2
1.3    2
1.4    2
1.5    2
1.6    2
1.7    2
1.8    2
1.9    2
2      2
2.1    3
2.2    3

wink

Robert Cemper · Aug 8, 2019 go to post

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. 

Robert Cemper · Aug 7, 2019 go to post

the class documentation has a special warning:

The table for this class should be manipulated only through object access,
the published API's or through the System Management Portal.
It should not be updated through direct SQL access.

As Security is a sensitive subject I think any other approach could cause serious damage or at least a risk.

Robert Cemper · Aug 7, 2019 go to post

<ZSOAP> is just a summary not more meaning than "there was an error"

for the details, I'd suggest to analyze variable %objlasterror

eg. set detail=$system.Status.GetErrorText(%objlasterror)

set fault.detail="<mymessage>"_detail_"</mymessage>"

Robert Cemper · Aug 7, 2019 go to post

An upgrade from Caché to Ensemble is not foreseen. 

Install ENSEMBLE in parallel to Caché and include your Caché Databases to Ensemble as you need.  

Attention: Ensemble is always running in Unicode!

Robert Cemper · Aug 7, 2019 go to post

You find it in 

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Intersystems\Cache\Servers\<YourServer>

I found it by searching some  Webserver Port with regedit.exe 

Robert Cemper · Aug 5, 2019 go to post

Suggested approach:
Create a  namespace %ALL which is visible to all other namespaces and map the common class/table into it.
with global, package, routines whatever is related to it. 

See Mapping Data to All Namespaces  link

Robert Cemper · Jul 31, 2019 go to post

Oh dear!  It's incredible!

yesyesyes​​​​​​​yes​​​​​​​yes​​​​​​​​​​​​​​