Lookup Tables are covered by the Source Control hooks in the management portal so they will automatically be added to your uncommitted queue upon check-out so you can include it in a future ItemSet upload.  

See slides 12-14 of ftp://ftp.intersystems.com/isc/customers/ccrtraining/ICC530(Presentation)%20CCR%20Tier%201%20-%20Interoperability%20Components.pdf 

@Stephen Ali - thanks for asking the question (and welcome to the Developer Community!).

Typically detailed questions like this on TrakCare products are worked out directly with InterSystems Support.  Globally we have TrakCare product tuned to regional requirements so it's important to connect with you product specialists from your specific region.  

I suggest you go to https://www.intersystems.com/support-learning/support/ to see how to contact Support and they can help you get this question sorted out.

Just curious - where are you seeing this?  Could you please include a URL?

The InterSystems SSO account is what controls your access to open as well as restricted applications provided by InterSystems to help customers and prospects get stuff done.  If you go to Login.InterSystems.com you can see the various apps available to you (after you sign in).  This would include things like D.C., OEX, Learning, Download, etc for Prospects, and supported customers would also get access to WRC, iService, HS Docs, CCR, etc (depending on what products they have).

Hope that helps - let me know if any additional clarification is needed.

There are different kernels but other than that you should be able to run the same ObjectScript code on both platforms and it will behalf identically.  If you are going to be doing file interactions, then I suggest using the %File library class which will make your code portable between Windows and UNIX file systems.  Likewise if you are calling out to other executables, you will need to instrument your code to call out appropriately based on your platform. 

I am assuming you want to create a tag-based CSP page as a quick and dirty way to through up some data in a table?  If so, the basic steps would be:

  1. Load a JS library like https://www.tablefilter.com/ to make your filtering easy
  2. Write out your <table> and <th> tags 
  3. Create a <script language='cache' runat='server'> block to hold your ObjectScript which will fetch your result set 
  4. Use %SQL.Statement to create and run the query and fetch the data
  5. Iterate over the resultset, and write out a row of HTML for each row in the resultset using &html<>
  6. End your </script> tag and then end your </table> tag

Hope that gets you rolling!

@Perla Escarcega  - taking a closer look at this, I think we had an issue with a historical file clean-up routine which was a little too overeager to reclaim space.  All of your source is safe and available but you may need to create a fresh ItemSet to push this source.  Note - you should always be making fresh ItemSets anyway because the head revision may be newer than what is in your historical ItemSet, and you don't want to get an older revision of something which breaks when interacting with a newer revision of other items.  So simply create a new ItemSet for BASE and deploy it and you should be all set.

P.S.  This does raise the question of why you are initializing a new Secondary BASE environment from old ItemSets as opposed to just grabbing the head revision of the BASE source and running Refresh to pull it all into the Namespace?  I am afraid your approach may be significantly more risky than the recommended approach.  

@sjbttt sjbttt  - it sounds like you want to set up source control which controls this Readonly property on the server, is that correct?  If that is the case, then you will need to use server-side source control hooks.  https://cedocs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=GSTD_Hooks  would be a good place to start understanding how to manage this in general.

For your specific question, the way we force classes to be read-only with our source control hooks is via the GetStatus() method which should be extended from the %Studio.SourceControl.Base subclass of your hooks (see https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?APP=1&CLASSNAME=%25Studio.SourceControl.Base
).  This method returns an "Editable" property which your hooks control and which can be used to force the IDE (Studio, Atelier or VSCode) to treat the file as Readonly, thereby preventing users from changing it.  In our development workflow, we will force the class to be Readonly in the following situations:

  •  The user does not have it checked out
  • A different user has it checked out
  • The entire namespace has source locked (e.g. for non-development environments)
  •  It is mapped from another namespace (we manage our source branches based on Namespace so we treat a read-only those things which are not in the current Namespace

Hope this is helpful.  

That may be the cleanest you can get it, unless you know that the methods are always Classmethods of the class you are calling in which case you don't need to send $classname() every time.  But sending it does allow for the generalized use-case of calling to different classes.

I was playing around to programmatically figure out how many argument a method accepts using %Library.ClassDefinition, however I just realized that if $classmethod() can't accept variable argument quantities than this doesn't help at all and you'd still end up with the approach that you have above.  

It may be worth a note to the WRC to ask for an enhancement to $classmethod() (unless someone chimes in here to say that there is a way to pass a variable number of arguments to it)

Not sure what you mean by occurring before and after.  However, you could pass the name of the method and then execute it using $ClassMethod within MethodA()

Something like:

Do ..MethodA("Method1","var","Method2",0)

MethodA {method1, arg1, method2, arg2) {

Do $classmethod($classname(),method1,arg1)

Do $classmethod($classname(),method2,arg2)


But again, I am not entirely sure what you want to accomplish here....


If you are interested in a full kit install rather than a container, you can get yourself a full kit of InterSystems IRIS For Health Community Edition from:


(If you are interested in a container, see the other answers people have already given you)

HTH - welcome to the community and feel free to ask any questions here as you are learning / gaining your experience!



I suggest you look into using the DeployToFile() and InstallFromFile() methods of the %Studio.Project class.  A discussion of the topic can be found here in the docs:


Another option is calling  the following on individual classes:


But since you are looking at just pushing partial updates, most likely the DeployToFile() with the parameter to strip out the source will be your best bet.

I am assuming that when you are talking about 'folders' you mean the structure which individual items are exported into when you use your source control hooks, correct?  To achieve this you need to loop over all items in the namespace and call the source-control related export on each of them.

The way we do that for our internal systems is to the the BaselineExport() method in the %Studio.SourceControl.ISC class.  %Studio.SourceControl.ISC is our source control hooks class for Perforce, and I haven't tried calling BaselineExport() while another set of hooks are configured for the namespace, it may *just work*, especially if your GitLab hooks use the ^Sources global to describe the export structure.  Give is a try and let us know if it help (if not, I can get you the code for that method and you could adopt it for your purposes)

could you please give a little more of a description as to what you are hoping to accomplish?  A JS file will be executed on the client, where-as "Caché Code" (by this I assume you mean Object Script?) is executed on the server.

You can edit JS files using Studio, you can create object script class projections to automatically create JS files with JS logic in it, you can send JS from a server process to the web browser, etc - there are may ways for Caché Code to interact with, inform or manipulate JS files.  We need more details for what you want to do.

Bouncing off of @Robert.Cemper 's hints, if you are using a default SMP (system management portal) login you can just pass in the arguments for the username and password fields as follows:


I just tested this and it worked like a charm :) (use your own credentials of course)