Great article and many thanks for the links! There appears to be a broken link in the Web API heading for WebSocket protocol

There is currently provision for pdf, zip, tar, gz, png and jpg file types with files up to 256 MB in size.  

There have been times when I have been asked to provide a 'proof-of-concept' or a 'working example' demonstrating a problem or some unexpected behaviour.  With code snippets, it is easy to embed code in a post; however, for more complex examples,  it is beneficial  to download a working example to test the behaviour out for yourself.

Here are some references to posts where I used the 'file upload' feature.

ZEN tablePane always selects the bottom row. Why?                 

The Art of Mapping Globals to Classes  (2 of 3)

For reference, you can get a list of error codes from General Error Codes and SQL Error Codes .  From the error description, it seems to be complaining about the 1st parameter.

If the 'gc' object is a %SQL.Statement then the %Prepare method only takes one parameter. What happens when you pass in pQuery to the %Prepare method?

Have you tried executing the SQL in the SQL Shell or System Management Portal?

do $System.SQL.Shell()

@Wolf Koelling I had the same problem but there is a work-a-round. There's a article that describes how to download a digital certificate from your CA and import it into the cacerts store using keytool.

One of the difficulties I had was I was unable to modify the cacerts file using keytool because it required admin access to make changes to a file under C:\Program Files(x86)\Java.

Fortunately, you can copy the cacerts file to your user directory and change the eclipse.ini file to reference the new location for your cacerts certificate store.

Then follow the instructions to download the atelier plugin here

Your installation requirements may be different from mine, so you may want to contact Intersystems WRC for advice specific to your needs. Please understand however that it is a problem with the Java certificate store, used by your JRE, not recognising your CA to allow HTTPS traffic to download the plugin through the eclipse IDE. It is not a firewall issue.


Could you share your straightforward code? For searching all routines in a namespace in Cache ObjectScript, I have used Find in Files within Cache Studio (class is %SYS.%Studio.Project) but it looks like you are looking to programmatically replace what is returned as a result. The basic 'Find and Replace' only seems to only apply to the currently active window. I do not know if Atelier has more advanced Find in Files and & Replace feature to search the entire namespace but from the documentation I've read, I suspect not.

Other search facilities I have used include %GCHANGE routine and %RFIND. %GCHANGE has an option for changing the contents of a global - useful if you have XECUTE and indirection (@) statements that call executable code from a global reference. This practice was more common when the size of routines had to be very small and executing statements from within a global reference was one way getting round this limitation. If you have no executable code in globals then %GCHANGE probably doesn't apply.

Check out the ObjectScript function $TEXT to return source code from a routine. You could use ZINSERT and ZREMOVE commands to programmatically alter the contents of source code.  

UPDATE: If I was trying to solve this problem. I would do a find in files to get the routine references. Verify the output and copy the contents to a plain text file. Clean up the file if necessary removing data that is not required. Read the contents of the file to obtain the routine references. Use ZINSERT and ZREMOVE to replace the source code contents. You will probably need to re-compile for the changes to take effect.

I find RSS feeds for subject groups are useful way to identify new posts. There are sort and filter options for:

  • my feed
  • most votes
  • most active
  • no answer
  • unanswered
  • new
  • all

I think all online forums suffer from 'unhelpful' and 'badly described' posts. Maybe sorting by 'most votes' or 'most active' would help?

The behavioural issues you describe come from people and it is hard to design a technical solution to "fix" people. Most forums I have used give kudos to users who provide a lot of technical detail and frown upon users who ask one line questions showing no evidence of having tried to find a solution themselves. On balance, all forums need to treat beginners and inexperienced users with respect. We are all ignorant of something and we all have to start with nothing (no knowledge)    

Don't be afraid of up-voting or down-voting posts. Sometimes it's useful to link to an older post that dealt with the problem rather than duplicating questions/answers.

What about using more complex subcommand prefixes such as


Could you code that using %ZLANG ?

The I+3 is a hard-coded expression. At first it appears arbitrary or random. I have just taken +3 as an example. We have real-world examples of expressions like 

When some condition is met 
LINE(I-8)="some value"

When another condition is met
LINE(I-17)="some value"

The hard-coded offset does not come from a variable. A lack of comments in the code makes it very difficult to understand and debug.