The difference between embedded SQL (&sql() )and Dynamic (%ResultSet or %SQL.Statement) is that embedded is static and compiled in the code. You can only use parameters (preceded by colon) in the Where and Into Clause, but not change the SQL itself. You could write a bunch of If statements to call different &sql( ... ) code, depending the conditions, but if these combinations are to numerous you better use dynamic SQL.

Hi Dinesh,
I am working on a tool that is doing the following :
- create Swagger input file to enable manuel testing of api's (by adding enough comments in the resthandler/methods to generate this automatically)
- create UI to enter scenarios to automate unit/integration tests on api's:
-- call api's with parameters and compare response with expected status/response
-- use response of previous api's in a scenario to populate parameters for next api in scenario (e.g. post returns an id, next put will use the id to change, next delete will delete the id)
-- ability to run a scenario (set of api's) in a transaction, and to rollback in the end (by replacing actual REST call by in-process call)

Hi Larry,
Can yo start from the command prompt without emergency mode (ccontrol start trycache) ?
If yes, the help mentions that emergency mode is not using the control service, did your control service have specific rights ?

Btw, did you try the default password for SuperUser or Admin. (https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...)

ccontrol start <instance name> [<full path and file name of .cpf file>]

                        Starts Caché instance <instance name>, optionally using the specified .cpf file.

                        If a new .cpf file is specified, it becomes the default startup .cpf file.     

 

            Note:   An optional /EmergencyId=Username,Password can be used

                        to start Caché in emergency mode.  When the EmergencyUserId

argument is supplied, the system starts up in emergency mode in which

only the baseline databases are mounted and access to Caché is governed

by Caché login using that username and password.  Emergency mode is supplied

to give access in the event that privileged users are not available or their password

is forgotten.  Emergency startup is only available from an administrator account.


When Caché is started in emergency mode, the Caché control service is not used.  

This means that if you log out of Windows, all the Caché processes will immediately exit.

If on Windows :
 

Start Windows Powershell (Admin)

C:\ cd /intersystems\cache\bin (the directory where you installed caché)
C:\Intersystems\cache\bin> ./ccontrol all  (this should open a text file with the instances you have, note the name of your instance, it is 'cache' in my example)

    Instance          Version ID        Port   Directory
    -------------     ----------        ----   ---------                   
up  cache             2018.1.2.309.0    1972   c:\intersystems\cache

If Caché is not down :
C:\Intersystems\cache\bin> ./ccontrol stop cache

To start Caché in emergency mode :
C:\Intersystems\cache\bin> ./ccontrol start cache /EmergencyId=tempuser,temppw (in my case, i got Win Defender warnings, accepted access)

Verify Caché is running :
C:\Intersystems\cache\bin> ./ccontrol all

Launch Caché management portal, login with tempuser and temppw, go to System Admin -> Users (might have to login again with temp credentials)
Change pw for your user(s).

Restart Caché

Hi Michel,
Good subject, i like to question the things we are used to, but look strange to the outside world.
I would welcome the possibility to change the precedence to something more 'standard'. When i taught Object Script courses, the left-to-right precedence was always the first thing i mentioned, and it always blew the heads of my students.
Unfortunately, the option is not present, and even if there could be ways to implement such an option by InterSystems (e.g. as a method keyword to alter the precedence), the general behaviour will have to default to the current precedence to not break existing code.
Maybe editors like vs-code can issue warnings when operators are used without brackets in Object Script.

Hi Tiago,

There is always a risk of getting errors after an upgrade, depending how your application uses Caché.
For example : your application could use custom data/code that is stored in the manager's database, and that database will be overwritten in the upgrade, so you will risk loosing data/code. (It is bad practice to store info there, but it is possible) 

Best is to contact the vendor/developers, and test the upgrade by copying the server to a test server and do the upgrade there.
 

When doing a create table, it is indeed a hashed global name, but when defining a new class in Studio, it is still clasname_"D" (unless the global name becomes too long).

The parameter USEEXTENTSET=1 will alter this behaviour (in class definition or CREATE table statement) :
Global Naming Strategy: you can use the USEEXTENTSET parameter to specify shorter and more efficient hashed global names for data and index lookup operations.

You can use %Library.CompiledStorage to find out what the global name is for a class : https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic....

The section you refer too describes the behaviour if a client connects more than 25 times (= 'the maximum' in your text) :
When a client starts with e.g. 3 connections, it counts for 1 license.
When the client keeps adding more connection from the same ip, it will remain taking only 1 license, until it reaches 25 connections, at that time, it will count for 25 licences.
When the client keeps adding connections (e.g. 30 in total), the licence count add also up to 30 for this client.
When the client count drops below 25 again (e.g. 10), the licence count keeps counting all these connections as a separate license (so the client will still occupy 10 licences)
Even if the license count drops to 1, and goes up again to e.g. 5, the client will take 5 licenses.
Only when the client logs out completely, the counting of licenses will revert back to the inital behaviour where all connections below 25 only count for 1 license.
So you do not have to purge licenses : they will go away automatically when the client disconnects (except for csp pages where there is a 'grace' period which still holds the license for a number of minutes)
You just have to make sure your client count does not reach 25, or the client should disconnect when this happens to prevent a high license count.

Caché/Iris normally use a port like 57772 which goes to the Apache web server that was installed together with Caché/Iris. This web server is best used only for internal usage. In your example the localhost url uses this to acess the service locally when you try that on the server itself.
Because you cannot configure that Apache server for security, you have to use an external webserver where you can completely configure the access (together with the firewall).
An external webserver like IIS or the full blown Apache usually uses 80 as the default public port. In your example you mention the port 80 in with http://52.24.106.151:80/Csp/Upload/CreateRoute/Bmc.
So that's why i think there was an external webserver installed, and you will have to start there if you want to set access rights. (You can also use the firewall to limit any unwanted ip addresses)

Another thing : this class is for receiving REST calls, if you want to send a POST from Cache/Iris, you would have to use the %HtppRequest class.