Find

Article
· Aug 3 1m read

WARNING: Bug in IRIS Native API

Reviewing my published packages, I identified a nasty bug in IRIS Native API

  • There is a method in  %Net.DB.Iris named function ()
  • It's equivalent to  ObjectScript $$label^routine(param) 
  • It used to work fine 2 years ago, when I published my command-line-extension packages
  • Now it is broken since at least 1 year and throws <PROTECT>
  • I identified it for ObjecScript, Java, Python, Node.js
  • It is reported as WRC# 1002589
  • For all 4 cases, I also verified a workaround
    • Instead of calling an ObjectScript Function you call a Classmethod
    • It's by %Net.DB.Iris ClassMethodValue(...)
    • And you have to wrap your ObjectScript Function into some Class 
    • Might look simple, but quite some effort related to IPM versions and other

I wish you were not infected by that surprise.
 

14 Comments
Discussion (14)3
Log in or sign up to continue
Article
· Aug 3 2m read

Why It's Time for a TrakCare Techno-Functional Application Specialist Certification

Working in healthcare IT as a young developer, especially on InterSystems TrakCare, you quickly realize one thing: it’s not just about HL7 messages or backend integrations. A huge part of making TrakCare work smoothly for hospitals comes down to how it’s configured, customized, and supported on the application side.

That’s where people like me come in—techno-functional developers who understand both the tech and how it impacts actual hospital workflows.

We’re Not Just Techies (or Functional Consultants)

Our role sits right in the middle. We're the ones:

  • Customizing modules like Pharmacy, Billing, and EMR to fit how hospitals actually run
  • Writing ObjectScript logic to add validations or automation
  • Enhancing front-end screens using CSP, Zen, or IRIS
  • Mapping workflows with clinical and billing teams to reflect real-life processes
  • Troubleshooting day-to-day issues that aren't always about interfaces—they're about experience

And yet… there is currently no dedicated certification pathway to recognize it.

The Certification Gap

The current TrakCare Technical Integration Specialist exam is great if you’re working on HL7v2, FHIR, SDA3, etc.—basically anything interoperability-related. But it doesn’t really reflect the work we do in application config, front-end behavior, or module workflows.

So despite being hands-on with TrakCare every day, people in roles like mine aren’t recognized or certified. That makes it harder for hospitals to find skilled talent and for us to show our value.

Why a New Track Just Makes Sense

A TrakCare Application Specialist certification would be a game-changer for those of us who:

  • Have at least 3 years of hands-on experience with TrakCare modules
  • Can configure workflows, understand module dependencies, and speak both clinical and tech
  • Are comfortable with ObjectScript, CSP, and tweaking UI behaviors
  • Act as the bridge between IT and real users

The valuable work of techno-functional specialists deserves formal recognition within the TrakCare ecosystem.

TrakCare is growing fast, and so is the demand for developers who get both the tech and the healthcare side. A dedicated certification for Techno-Functional Application Specialists would fill a real gap—and help highlight the critical work we do every day to keep systems running and users happy.

1 Comment
Discussion (1)2
Log in or sign up to continue
Article
· Aug 2 3m read

Criando documentos avançados do Word com IRIS

Documentos Word são amplamente utilizados no mercado. Os usuários frequentemente criam contratos, memorandos, currículos, relatórios, análises e outros documentos que podem exigir dados de ou capturados pelo InterSystems IRIS. No entanto, o IRIS não possui uma API, SDK, biblioteca ou adaptador para isso. Essa limitação não existe mais. 

A nova biblioteca Open Exchange iris4wordd (https://openexchange.intersystems.com/package/iris4word)oferece um SDK ObjectScript onde o desenvolvedor passa qualquer %DynamicObject como parâmetro, um arquivo de template Word e, em seguida, recebe um documento pronto, com a estrutura e formatação definidas em seu template.


Para usar o iris4word

Este artigo usará uma API REST para obter o conteúdo, mas também é possível consultar o banco de dados. Para instalar o iris4word e o exemplo que o utiliza, siga estas etapas:

  1. Se você usa IPM/ZPM: zpm:USER>install iris4word
  2. Se você usa Docker: 
    1. git clone https://github.com/yurimarx/iris4word.git
    2. docker-compose up -d --build
  3. Abra o Postman (para executar o exemplo da API REST)
  4. Importe a coleção de exemplos de (https://raw.githubusercontent.com/yurimarx/iris4word/refs/heads/master/iris4word.postman_collection.json): 
  5. Faça o upload do arquivo de template template.docx (no caminho sample/template.docx deste repositório ou de https://raw.githubusercontent.com/yurimarx/iris4word/refs/heads/master/sample/template.docx). Para fazer o upload, preencha o campo file na aba Body:
  6. O processo de upload enviará o template para o servidor para ser usado pelo iris4word.
  7. Abra o "2. Download Word Document" e copie e cole no corpo este conteúdo JSON:
    {
      "company": {
        "name": "ACM Ltda.",
        "address": "Main Street, 123",
        "city": "New York",
        "state": "NY"
      },
      "projects": [
        {
          "name": "System Development X",
          "beginDate": "2024-01-01",
          "endDate": "2024-06-06",
          "team": [
            {"name": "John Star", "role": "Senior Developer"},
            {"name": "Marie Loo", "role": "BDM"}
          ],
          "tasks": [
            {"description": "Requirements", "status": "Done"},
            {"description": "Development", "status": "Doing"}
          ]
        },
        {
          "name": "ERP Development Y",
          "beginDate": "2024-03-03",
          "endDate": "2025-12-12",
          "team": [
            {"name": "Peter Rogers", "role": "Project Manager"},
            {"name": "Robert Plant", "role": "ERP Specialist"}
          ],
          "tasks": [
            {"description": "ERP configuration", "status": "Done"},
            {"description": "User training", "status": "Doing"}
          ]
        }
      ],
      "principalContact": {
        "name": "Carlos Olivera",
        "email": "carlos.olivera@company.com",
        "phone": "+1 555 555-555"
      }
    }
     
  8. No botão Send, selecione a opção "Send and Download":
  9. Veja os resultados:
  10. Compare o conteúdo JSON com o template.docx e veja as marcas e tags usadas.

Nos bastidores

É muito fácil, com o arquivo de template salvo em /tmp/template.docx, basta chamá-lo:

ClassMethod DownloadDoc(template As %String) As %Status
{
    Set tUUID = $System.Util.CreateGUID() 
    Set filePath = "/tmp/"_tUUID_".docx"
    Set jsonContentString = {}.%FromJSON(%request.Content)
    Set sc = ##class(dc.iris4word.WordUtil).GenerateWordFileFromJSON(jsonContentString.%ToJSON(), "/tmp/"_template_".docx", filePath)

    Set %response.NoCharSetConvert=1
    Set %response.Headers("Access-Control-Allow-Origin")="*"
    Do %response.SetHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document")
    Do %response.SetHeader("Content-Disposition","attachment;filename="""_tUUID_".docx"_"""")
    
    Set stream=##class(%Stream.FileBinary).%New()
    Set sc=stream.LinkToFile(filePath)
    Do stream.OutputToDevice()
    
    Return sc
}

O ClassMethod ##class(dc.iris4word.WordUtil).GenerateWordFileFromJSON recebe os dados na forma de um %DynamicObject, o caminho do template do Word e o caminho do arquivo onde o documento Word final deve ser criado. Agora você tem um arquivo Word para enviar ao usuário como resposta. Muito fácil!!

No próximo artigo, explicarei as tecnologias usadas para criar o iris4word e como criar templates complexos para gerar qualquer tipo de documento Word. Até breve.

Discussion (0)1
Log in or sign up to continue
Announcement
· Aug 2

InterSystems Open Exchange Applications Digest, July 2025

Hello and welcome to the July 2025 Open Exchange Recap.
General Stats:
26 new apps in July
527 downloads in July
1,116 applications all time
41,913 downloads all time
3,275 developers joined
New Applications
iristest-html
By Ashok Kumar T
toolqa
By André Dienes Friedrich
metabase-iris-driver
By Siddardha Reddy Sanagala
☤ Care 🩺 Compass 🧭
By Brad Nissenbaum
PyObjectscript Gen
By Antoine Dhollande
iris-python-article
By Guillaume Rongier
wsgi-to-zpm
By Eric Fortenberry
IrisTest
By Ashok Kumar T
dc-artisan
By Henrique Dias
ZPretty-upd
By Robert Cemper
Alchemit Laboratory
By Nancy Martinez
Global-Inspector
By Robert Cemper
typeorm-iris
By Dmitry Maslennikov
iris4word
By Yuri Marx
dataset-sample-split
By Luciano Kalatalo
iris-telemetry-sample
By Yuri Marx
iris-message-search
By sara aplin
snipforge
By Gabriel Santos
Alchemit Blood Bank
By Roksana Komolibio
IPM Explorer for VSCode
By John McBride
addsearchtable
By XINING MA
Testing Lab
By Roksana Komolibio
iris-user-management
By Evgeny Shvarov
templated_email
By Nikolay Solovyev
testcontainers-iris-node
By Dmitry Maslennikov
iris-mock-server
By Rodolfo Moreira dos Santos
New Releases
Interoperability REST API Template by Andrew Sklyarov
v1.0.1
Added performance sensors and failed/successful request counts. All metrics are provided in OpenMetrics format. So, you can grab it with Prometheus and visualize it in Grafana. Details about setting up monitoring in the IRIS can be found here. Don't forget to check the roles of api/monitor application and to enable custom sensors in the IRIS terminal:
zn "%SYS"
d ##class(SYS.Monitor.SAM.Config).AddApplicationClass("REST.Core.Monitor", "YOUR_NAMESPACE")
v1.0.2
Added simple implementation of rate limits. Now, you can set up the maximum number of requests per minute for your APIs. Just set the value by the route key in the lookup table RESTRateLimits, similar RESTRoutes table. Also, you can use a wildcard (*) as a method name: Sample.API:*
Tip: If you need a more flexible and enterprise solution, I advise you to look at API Manager
shvarov-persistent by Evgeny Shvarov
v1.0.2
property LastUser added
intersystems-iris-dev-template by Evgeny Shvarov
v2.1.1
Added system name
IRIS Dev Template
to the Management Portal via merge.CPF settings
objectscript-docker-template by Evgeny Shvarov
v1.2.1
Added System name ObjectScript Docker Template via merge.cpf Thanks to Dmitry Maslennikov
MDX2JSON by Eduard Lebedyuk
v3.2.44
FIX: fixed issue when series were processed even they filtered out
v3.2.47
Fixed 3.2.44
Embedded Git by Pravin Barton
v2.12.2

[2.12.2] - 2025-07-08

Fixed

  • Fixed importing Lookup Tables that do not already exist (#791)
  • Fix initial import of settings file that has yet to be imported (#794)
  • Fixed syncing IRIS with files after pull to diff in the intended direction (#802)
CubeEventMonitor by Samuel Duncan
v1.0.3
remove dsw dependency to prevent warnings on install - see https://github.com/intersystems-community/DeepSeeWeb/issues/443. Users who wish to use DeepSeeWeb should install that module separately
DeepSeeWeb by Anton Gnibeda
v4.0.22
  • now tuples limited for only ones that defined in data properties even for drilldown (#458)
v4.0.23
  • support multiple filters on widgets (#461)
v4.0.24
  • fixed issue with total function and pivot (#459)
iris-vector-rag by Thomas Dyar
v1.0.1
Minor update to docs
InterSystems Testing Manager for VS Code by John Murray
v2.0.0
Now able to use Test Coverage Tool to generate and display coverage of your tests.
v2.0.1
Now shows attribution of coverage to the test classes that ran lines in a class.
v2.0.2
  • Fix coverage marking when "objectscript.multilineMethodArgs": true
  • Improve method range highlighting accessed from coverage tree
IRIS internal WebSocket Client by Robert Cemper
v1.1.1
  • make timeouts longer
  • replace broken wenterminal by iTERM
SPOOL-demo by Robert Cemper
v1.0.5
  • replace broken webterminal by iterm
  • adjust docker-build
CPIPE by Robert Cemper
v1.1.3
  • broken webterminal replaced by iterm
  • docke-compose adjusted
character-slice-index by Robert Cemper
v0.0.3
  • replace broken webterminal with iterm
  • clean docker-compose
Collection-Indexing-and-Query by Robert Cemper
v1.0.7
  • replace broken webterminal with iterm
  • clean docker-compose
Row Storage vs. Columnar in IRIS native by Robert Cemper
v0.0.2
  • replace broken webterminal with iterm
  • clean docker-compose
  • adjust README
Code-Scanner by Robert Cemper
v0.0.6
  • replace broken webterminal with iterm
  • clean docker-compose
Vector-inside-IRIS by Robert Cemper
v0.0.2
  • replace broken webterminal with iterm
  • clean docker-compose
geo-vector-search by Robert Cemper
v0.0.2
  • replace broken webterminal with iterm
  • clean docker-compose
  • clean iris.script
foreign-tables by Robert Cemper
v0.0.2
  • replace broken webtermina with iterm
  • clean docker-compose
interoperability-embedded-python by Guillaume Rongier
v3.5.2
  • Bump version to match PyPI
v3.5.3

[3.5.3] - 2025-08-01

Fixed

  • Fix a regression test message interoperability where list of messages was not displayed correctly in the UI
    • This was caused by MessageHandler changes in version 3.5.1
  • Minor fixes for remote migration support
Light-weight-EXCEL-download by Robert Cemper
v1.1.2
Replace broken web terminal with iterm
M-N-external-JSON by Robert Cemper
v0.0.2
remove broken webterminal
Object-based-M-N-to-JSON by Robert Cemper
v1.0.2
Replace broken webterminal with iterm
Wsock-EmbeddedPy by Robert Cemper
v0.1.2
replace broken webterminal with iterm clean docker-compose
SSH-for-IRIS-container by Robert Cemper
v0.0.4
  • replace broken webterminal with iterm
  • verify operation
Native-API-for-ObjectScript by Robert Cemper
v1.0.4
  • replace broken webterminal by iterm
  • clean docker-copose
native-api-command-line-extension by Robert Cemper
v0.0.3
  • replace broken webterminal with iterm
  • clean docker-compose
native-api-command-line-py-client by Robert Cemper
v0.0.6
replace broken webterminal by iterm
Most downloaded
Intersystems-Monitoring
By Teunis Stolker
WebTerminal
By Nikita Savchenko
MDX2JSON
By Eduard Lebedyuk
iris-web-swagger-ui
By Semion Makarov
DeepSeeWeb
By Anton Gnibeda
zpm-registry
By Evgeny Shvarov
passwordless
By Sergey Mikhailenko
Test Coverage Tool
By Timothy Leavitt
ObjectScript-Math
By Peter Steiwer
July, 2025Month at a GlanceInterSystems Open Exchange
1 Comment
Discussion (1)1
Log in or sign up to continue
Announcement
· Aug 1

[Video] HL7-to-FHIR integration using InterSystems IRIS

Hey Developers,

Watch the video from our Tech Video Challenge:

⏯ HL7-to-FHIR integration using InterSystems IRIS

This video presents an HL7-to-FHIR integration using InterSystems IRIS. It demonstrates setting up a Docker container, configuring services, business processes, and operations in the IRIS Management Portal, and deploying custom code via VS Code. The integration transforms HL7 messages into FHIR resources and sends them to a local FHIR server. It walks through testing the setup with sample HL7 messages, validating the resulting FHIR bundles using the HL7 Validator, and adjusting production settings for different transmission modes. Finally, it queries the FHIR server using Postman to confirm successful data transmission.

🗣 Presenter: @Elise Swinehart 

Subscribe to our YouTube channel InterSystems Developers to stay up to date!

Discussion (0)1
Log in or sign up to continue