Are there issues with $$$OK on Cache 2010?


Hi guys,

I'm running a method on an instance of Cache 2010, which, when compiled, has $$$OK in it's .int code.  This line throws an error, telling me that "the OK macro isn't recognized". 

Some things I've tried;

- I looked it %occStatus, and the macro definition of OK is there.

- I changed $$$OK to 1 by hand in the .int code.  It compiled successfully, but each time I recompile the original class, it's going to put that $$$OK back

- I tried Include %occStatus at the top of the class.  The .int code was unchanged when I did this (is my syntax on that wrong?)

I've had this problem in two different classes now.  In one, $$$OK was used in the .cls code.  That one, I just added a quick cache version check to use 1's instead on Cache 2010.  Now, I realize I'm kind of playing whack-a-mole with these, and maybe I should try to find the root of the problem; classes compiling into .int's with $$$OK's in them would be hard to stop.


  • 0
  • 0
  • 196
  • 3
  • 1


It appears that, for whatever reason, the System files are not automatically included for every class you write in Cache 2010.  When a class inherits from %RegisteredObject, you don't need to worry, because they'll be included via inheritance.  For other classes, like the one where I was seeing this issue, the system files are unavailable unless included by hand.

Adding Include.%occStatus to the top of the non-compiling classes fixes the issue for the $$$OK macro, although a better practice is to use Include.%occInclude, to get some other standard stuff with the status routines.


Are you able to share the XML export of a class definition (the simpler the better) that demonstrates this problem?

<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
<Class name="CACHE2010.Build">

<Parameter name="SrcVer">
Location and Revision of this file in Perforce (Auto-updating)</Description>
<Default>$Id: //custom_ccrs/_common/tools/CCRToolsBuild/BuildManifests/Cache2010/Build.xml#1 $</Default>

<XData name="BuildManifest">
This is a build manifest. Here we describe build steps in XML format.</Description>

<!-- Change into namespace -->
<Namespace Name="CCRClientTools" Ensemble="0" Code="CCRTOOLS-CODE" Data="CCRTOOLS">
<!-- Have  database for code -->
<Database Name="CCRTOOLS-CODE" Dir="c:\intersystems\cache\mgr\ccrtools-code\" Create="overwrite" InitialSize="200" ExpansionSize="60" />



<Method name="Build">
This method is called to pass parameters into generated build method</Description>
     Set pLogLevel=3
     Set sc=..RunBuildManifest(.vars, .pLogLevel)

     Quit sc

<Method name="RunBuildManifest">
This is a standard %Installer method generator whose code is generated by XGL.</Description>
     #; Let our XGL document generate code for this method.
     quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "BuildManifest")

Here the simplest one I have that had the issue if you want too look at it.  Note my answer on what I've discovered (which was enough to solve the issue).