I think you just confusing $listbuild with list in BPL context. In BPL when you define it as List Collection, it will use class %Collection.ListOfDT, or in case of array it will be %Collection.ArrayOfDT

That means, that you should use 

 if 'context.Facilities.Find(##class(Ens.Rule.FunctionSet).SubString(context.EpicDepartmentID,1,4))
 {
   do context.Facilities.Insert(##class(Ens.Rule.FunctionSet).SubString(context.EpicDepartmentID,1,4))
 }

The support for NodeJS in IRIS is quite primitive and limited to only native functions, globals, methods, no SQL

check in IRIS folder, what do you have installed with IRIS for nodejs

I don't have windows, only docker, and in my case

/usr/irissys/bin/iris1200.node
/usr/irissys/bin/iris800.node
/usr/irissys/bin/iris1600.node
/usr/irissys/bin/iris1400.node
/usr/irissys/bin/iris1000.node
/usr/irissys/dev/nodejs/intersystems-iris-native/bin/lnxubuntuarm64/irisnative.node

If you want to use IRIS SQL from nodejs, you can try my package, which you can install with npm

npm install intersystems-iris
const { IRIS } = require("intersystems-iris");

async function main() {
    const db = new IRIS('localhost', 1972, 'USER', '_SYSTEM', 'SYS')
    console.log('connected')
    let res = await db.sql("select 1 one, 2 two")
    console.log(res.rows);
    await db.close()
}

main()

It's quite simple at the moment, only supports SQL with no parameters, but should work I believe

Studio is already deprecated and works only on Windows

Accessing the management portal depends on how you installed IRIS and which version you used. Your installation may not have private web server installed, and you would need to install any webserver yourself.

run command:

iris list

it will output something like this

Configuration 'IRIS'   (default)
    directory:    /usr/irissys
    versionid:    2025.1.0L.172.0com
    datadir:      /usr/irissys
    conf file:    iris.cpf  (WebServer port = 52773)
    status:       running, since Sat Feb 15 06:34:51 2025
    SuperServers: 1972
    state:        ok
    product:      InterSystems IRIS

Here is WebServer port is what are you looking for, and the full URL will be http://localhost:52773/csp/sys/UtilHome.csp

If you don't have a private web server, check documentation, on how to configure separate web server

Tried to check 2025.1, but did not find it

$ docker inspect --format '{{ index .Config.Labels "com.intersystems.platform-version" }}' containers.intersystems.com/intersystems/iris:latest-{em,cd,preview}
2024.1.3.456.0
2024.3.0.217.0
2024.1.3.456.0

For some reason, the preview points to em version, why so?

For the community edition,

$ docker inspect --format '{{ index .Config.Labels "com.intersystems.platform-version" }}' containers.intersystems.com/intersystems/iris-community:latest-{em,cd,preview}
2024.1.2.398.0com
2024.3.0.217.0com
2025.1.0.204.0com

At least here it is 2025.1 version

but, I've noticed that em version now not the same as for enterprise edition

Anyway, where is 2025.1 for the Enterprise version? The community edition is too limited to check everything on it.

The post is two months old at this point, but it's not available.

I'm curious why would you need it, are there any issues when working via shared memory?

As already mentioned, you have some options, use a different host, or use DriverParameters

SharedMemory

Optional. Boolean indicating whether or not to always use shared memory for localhost and 127.0.0.1. Default = null. See IRISDataSource methods getSharedMemory() and setSharedMemory(). Also see “Shared Memory Connections”.

For instance, in DBeaver it may look like this, if there is no SharedMemory option visible, you still can add it manually

Usually build is happening in one thread, and you would not see this error even with unlicensed version

And this error means, that you have multiple processes trying to connect to IRIS during the build

And even using Community Edition may not help, because it has a limit on connections, and you may face the same issue there too.

In some scenarios, it's possible to use multi stage building process, where you can use Community Edition image as a building stage, and target image without starting IRIS or with using only one connection, finish the build.

You can check multi-stage way with Community, or use iris.key during build stage

It depends on how much non-unicode data you have. If it's not much, you can try to use XML way.

Another way, is to use some simple scripts, that order over all globals, and convert in place. Skipping indexes, with full rebuild.

I think there were multiple solutions, to this task. You can try to find them.

You have to collect as much as possible about your data.

  • Code, is it in 8-bit or not, or it's just all in English, some code may contain comments in a native language, and if you don't use git or other source control, you may need to convert too
  • Data, is it some legacy data, or class based. If native, is it delimiter based or same as classes with $listbuild.
    • Two different strategies in this case, data with some plain delimiter can be converted right away, $listbuild based data, would require to go through $listbuild
  • Any additional data. Some legacy applications may store additional information such as TUI/CHUI forms in pseudographics somewhere, you should look after this data as well
  • Any other possible sources 8-bit data
  • Communication, file-processing, can be changed

The last time I implemented a converter for 20+ years old application, more than 15 years ago, it was an application with textual terminal interface, and it went well.