xkcd: Standards

FHIR is only a part of the journey, the most important is that so many competing software are already on the market. The issue appears in cases when some applications could get updates and support for anything new, some not. Still, both of them would be required to communicate with each other and it will keep using some way or another some old standards anyway.

This command will only create file CACHE.DAT on Caché, or IRIS.DAT for IRIS, and to be able to see it in portal, you have to create Config.Database as well

But, I would recommend using %Installer Manifest, it's available for many years, and in Caché as well

The simplest installer would look like this

XData setup
{
<Manifest>
  <Default Name="Namespace" Value="IRISAPP"/>
  <Default Name="database" Value="irisapp"/>
  
  <Namespace Name="${Namespace}" Code="${Namespace}" Data="${Namespace}" Create="yes" Ensemble="no">

    <Configuration>
      <Database Name="${Namespace}" Dir="${mgrdir}${database}/data" Create="yes" Resource="%DB_${Namespace}"/>
    </Configuration>
  </Namespace>
</Manifest>
}

You can find more examples on GitHub

Well, I did some notes about Vectors in my article, about the project I tried to implement.

Basically, it's possible by using neural network based algorithms calculate vectors for any texts, index them in the database, and search using vector search for any text query. The results in this case will not find texts which are exact to the search query, but with using similarity, the closest to the query. And it can be used with mostly any language, types of the texts, files and so on, even pictures, or videos.

Well, the example you used uses ClassMethod, which is like an any static method in other languages, and can be called directly with no issues. So, this definitely will work

ClassMethod AnotherMethod()
{
  do ##class(MyClass).Foo()
}

If you would want to do the same, but using instance methods, it can be done as well

Assuming the super class, like this

Class dc.MyClass Extends %RegisteredObject
{

Property Value As %String;

Method Foo()
{
  Write !,"MyClass:Foo - ", ..Value
}

}

and child class

Class dc.SubClass Extends MyClass
{

Method Foo()
{
  Write !,"SubClass:Foo - ", ..Value
}

ClassMethod AnotherClassMethod()
{
  set obj = ..%New()
  set obj.Value = "demo"

  Do obj.Foo()
  
  Write !,"-----"
  Do ##class(dc.MyClass)obj.Foo()

  Write !,"-----"
  Do obj.AnotherMethod()
}

Method AnotherMethod()
{
  Do ##class(dc.MyClass)$this.Foo()
}

}

The output will be this

USER>do ##class(dc.SubClass).AnotherClassMethod() 
SubClass:Foo - demo
-----
MyClass:Foo - demo
-----
MyClass:Foo - demo

And as you can see, the last two calls are working from a super class, and it keeps access to the object

Instead of doing it this way, you can make it even with less code, using Python Embedded

import iris

status = iris.cls('%SYSTEM.OBJ').Load("Production.cls","ck")

# It could be just like this, but OBJ not there 
# https://github.com/intersystems-community/embedded-python-bugreports/issues/2
# iris.system.OBJ.Load("Production.cls","ck")