#GitHub

0 Followers · 72 Posts

GitHub is the largest web service for hosting IT projects and their joint development. This web service is based on the Git version-control system - a distributed version-control system for tracking changes in source code during software development.

Learn more.

Join the InterSystems Developer Community on GitHub.

Article Yuri Marx · Oct 2, 2024 14m read

In the modern world, the most valuable asset for companies is their data. Everything from business processes and applications to transactions is based on data which defines the success of the organization's operations, analysis, and decisions. In this scenario, the data structures need to be ready for frequent changes, yet in a managed and governed way. Otherwise, we will inevitably lose money, time, and quality of corporate solutions.For a long time, data management and governance were solely based on the data itself, with excellent backup, restoration, ACID (Atomicity, Consistency,

3
1 371
Announcement Anastasia Dyubaylo · Oct 9, 2025

Hello Community,

Alongside the InterSystems Open Exchange application gallery, the InterSystems Community GitHub hosts examples, libraries, and demos built with InterSystems technologies.

🔹 InterSystems Community GitHub (github.com/intersystems-community)

It includes:

  • Example applications and templates
  • Libraries and connectors
  • Experimental projects and demos

These repositories are not officially supported by InterSystems, but they can be useful for learning and exploring InterSystems technologies.

You’re welcome to explore the repositories and use them as a reference for your own projects.

0
0 67
Article Andrew Sklyarov · Oct 3, 2025 8m read

I was really surprised that such a flexible integration platform with a rich toolset specifically for app connections has no out-of-the-box Enterprise Service Bus solution. Like Apache ServiceMix, Mule ESB, SAP PI/PO, etc, what’s the reason? What do you think? Has this pattern lost its relevance completely nowadays? And everybody moved to message brokers, maybe?

0
1 65
Announcement David McCaldon · Aug 18, 2025

I’m pleased to announce the release of tree-sitter-objectscript, a new open-source tree-sitter grammar that brings first-class ObjectScript support to modern editors. If you caught the preview at READY ’25, you’ll be glad to know it’s now up on Github:

https://github.com/intersystems/tree-sitter-objectscript

What Does It Provide?

  • Fast & Precise Parsing: A powerful grammar for ObjectScript, enabling real-time syntax parsing, smart highlighting, and structural editing in modern code editors.
  • Polyglot-Awareness: ObjectScript .cls files often embed SQL, HTML, Python, JavaScript, JSON, CSS, XML, and Markdown. The grammar is designed to integrate with those seamlessly.
  • Multi-Editor Support: Works across multiple editors today, with others coming as tree-sitter adoption grows.

Supported Editors

We've been working with tree-sitter-objectscript and the following editors:

Screenshot (Zed)

Screenshot of syntax highlighting in Zed

(this is actually Zed on Windows with a Tokyo Night Storm theme).


We’re excited to see how the community uses this — feedback and ideas are always welcome!

Thanks!

12
4 300
Question JESUS (COGNOSANTE) BRAVO · Jun 24, 2025

I installed and configure CodeTidy in my local development environment, without InterSystems source-control (git-source-control) and only git for source control.

I would like to use only CodeTidy to stablish an automated  Linting and Code Style Validation for InterSystems ObjectScript code triggered by GitHub Actions.

Could you shed some light on how to accomplish that?

4
0 100
Article Guillaume Rongier · Jul 31, 2025 4m read

img

This article will introduce you to the concept of virtual environments in Python, which are essential for managing dependencies and isolating project from the OS.

What is a Virtual Environment?

A virtual environment is a folder that contains :

  • A specific version of Python
  • At start an empty site-packages directory

Virtual environments will help you to isolate your project from the OS Python installation and from other projects.

How to use it?

To use virtual environments, you can follow these steps:

  1. Create a virtual environment: You can create a virtual environment using the venv module that comes with Python. Open your terminal and run:

    python -m venv .venv
    

    Replace .venv with your desired environment name.

  2. Activate the virtual environment: After creating the virtual environment, you need to activate it. The command varies depending on your operating system:

    • On Windows:
    .venv\Scripts\Activate.ps1
    

    If you encounter an error, you may need to run the following command in your terminal:

    Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process -Force; .venv\Scripts\Activate.ps1
    
    • On macOS and Linux:
    source .venv/bin/activate
    

Once activated, your terminal prompt will change to indicate that you are now working within the virtual environment.

Example:

(.venv) user@machine:~/project$

Notice the (.venv) prefix in the terminal prompt, which indicates that the virtual environment is active.

Now then you can install packages using pip, and they will be installed in the virtual environment rather than the global Python installation.

Can I use Virtual Environments in IRIS?

Humm, good question!

The answer is simple : Yes and No.

  • No, because IRIS do not officially support virtual environments.
  • Yes, because going through all those articles, now we understand how Python works, how Iris works and what is a virtual environment, maybe we can simulate a virtual environment within IRIS by using the right configurations and setups.

How to simulate a virtual environment in IRIS?

A virtual environment is two things:

  • A specific version of Python
  • An site-packages directory

We have in IRIS what we call Flexible Python Runtime, which allows us to

  • use a specific version of Python.
  • update the sys.path to include a specific directory.

So, we can simulate a virtual environment in IRIS by using the Flexible Python Runtime and configuring the sys.path to include a specific directory and a specific version of Python. 🥳

Setup a Flexible Python Runtime in IRIS is easy, you can follow the steps in the IRIS documentation.

In a nutshell, you need to:

  1. Configure the PythonRuntimeLibrary to point to the lib python file of the specific Python version you want to use.

    Example:

    • Windows : C:\Program Files\Python311\python3.dll (Python 3.11 on Windows)
    • Linux : /usr/lib/x86_64-linux-gnu/libpython3.11.so.1.0 (Python 3.11 on Ubuntu 22.04 on the x86 architecture)
  2. Configure the PythonPath to point to the site-packages directory of the specific Python version you want to use.

    Example:

    • Use your virtual environment site-packages directory, which is usually located in the .venv/lib/python3.x/site-packages directory.

⚠️ This will setup your whole IRIS instance to use a specific version of Python and a specific site-packages directory.

🩼 Limitation :

  • You will not end up with exactly the same sys.path as a virtual environment, because IRIS will add some directories to the sys.path automatically, like <installation_directory>/lib/python an others we have seen in the module article.

🤫 If you want to make it automatic, you can use this awsome package: iris-embedded-python-wrapper

To use it, you need to:

Be in your venv environment, then install the package:

(.venv) user@machine:~/project$
pip install iris-embedded-python-wrapper

Then, simply bind this venv to IRIS with the following command:

(.venv) user@machine:~/project$
bind_iris

You will see the following message:

INFO:iris_utils._find_libpyton:Created backup at /opt/intersystems/iris/iris.cpf.0f4a1bebbcd4b436a7e2c83cfa44f515
INFO:iris_utils._find_libpyton:Created merge file at /opt/intersystems/iris/iris.cpf.python_merge
IRIS Merge of /opt/intersystems/iris/iris.cpf.python_merge into /opt/intersystems/iris/iris.cpf
INFO:iris_utils._find_libpyton:PythonRuntimeLibrary path set to /usr/local/Cellar/python@3.11/3.11.13/Frameworks/Python.framework/Versions/3.11/Python
INFO:iris_utils._find_libpyton:PythonPath set to /xxxx/.venv/lib/python3.11/site-packages
INFO:iris_utils._find_libpyton:PythonRuntimeLibraryVersion set to 3.11

To unbind the venv from IRIS, you can use the following command:

(.venv) user@machine:~/project$
unbind_iris

Conclusion

We have seen what are the benefits of using virtual environments in Python, how to create and use them, and how to simulate a virtual environment in IRIS using the Flexible Python Runtime.

3
2 133
Article Guillaume Rongier · Jul 17, 2025 5m read

img

This will be an introduction to Python programming in the context of IRIS.

Before anything I will cover an important topic: How python works, this will help you understand some issues and limitations you may encounter when working with Python in IRIS.

All the articles and examples can be found in this git repository: iris-python-article

How Python works

Interpreted Language

Python is an interpreted language, which means that the code is executed line by line at runtime even when you import a script.

What does this mean ? Let's take a look at the following code:

# introduction.py

def my_function():
    print("Hello, World!")

my_function()

When you run this script, the Python interpreter reads the code line by line. It first defines the function my_function, and then it calls that function, which prints "Hello, World!" to the console.

Example of running the script directly:

python3 /irisdev/app/src/python/article/introduction.py 

This will output:

Hello, World!

In an IRIS context, what will happen if we import this script ?

Class Article.Introduction Extends %RegisteredObject
{
    ClassMethod Run()
    {
        Set sys = ##class(%SYS.Python).Import("sys")
        do sys.path.append("/irisdev/app/src/python/article")

        do ##class(%SYS.Python).Import("introduction")
    }
}

Let's run it:

iris session iris -U IRISAPP '##class(Article.Introduction).Run()'

You will see the output:

Hello, World!

This is because the Python interpreter imports the code by interpreting it, first it defines the function and then calls it, just like it would if you ran the script directly but you are not running you are importing it.

⚠️ Important Note: If you import the script without calling the function, nothing will happen. The function is defined, but it won't execute until you explicitly call it.

Did you get it? The Python interpreter executes the code in the file, and if you don't call the function, it won't run.

Example of importing without calling:

# introduction1.py
def my_function():
    print("Hello, World!")

Let's run it in an python interpreter:

python3 /irisdev/app/src/python/article/introduction1.py 

Output:

# No output, because the function is defined but not called

In an IRIS context, if you import this script:

Class Article.Introduction1 Extends %RegisteredObject
{
    ClassMethod Run()
    {
        Set sys = ##class(%SYS.Python).Import("sys")
        do sys.path.append("/irisdev/app/src/python/article")
        do ##class(%SYS.Python).Import("introduction1")
    }
}

Let's run it:

iris session iris -U IRISAPP '##class(Article.Introduction1).Run()'

You will see no output, because the function is defined but not called.

🤯 Why this subtlety is important ?

  • When you import a Python script, it executes the code in that script.
    • You may don't want this to happen
  • You can be confused by guessing importing a script it's like running it, but it's not.

Import caching

When you import a Python script, the Python interpreter caches the imported script. This means that if you import the same script again, it will not re-execute the code in that script, but will use the cached version.

Demonstration by example:

Let's reuse the introduction.py script:

# introduction.py
def my_function():
    print("Hello, World!")

my_function()

Now, same thing let's reuse the Article.Introduction class:

Class Article.Introduction Extends %RegisteredObject
{
    ClassMethod Run()
    {
        Set sys = ##class(%SYS.Python).Import("sys")
        do sys.path.append("/irisdev/app/src/python/article")
        do ##class(%SYS.Python).Import("introduction")
    }
}

But now, we will be running it twice in a row in the same IRIS session:

iris session iris -U IRISAPP 

IRISAPP>do ##class(Article.Introduction).Run()
Hello, World!

IRISAPP>do ##class(Article.Introduction).Run()

IRISAPP>

🤯 What the heck ?

Yes, Hello, World! is printed only once !

⚠️ Your imported script is cached. This means if you change the script after importing it, the changes will not be reflected until you change the IRIS session.

This is even true if you use the language tag python in IRIS:

Class Article.Introduction2 Extends %RegisteredObject
{

ClassMethod Run() [ Language = python ]
{
    import os

    if not hasattr(os, 'foo'):
        os.foo = "bar"
    else:
        print("os.foo already exists:", os.foo)
}

}

Let's run it:

iris session iris -U IRISAPP

IRISAPP>do ##class(Article.Introduction2).Run()

IRISAPP>do ##class(Article.Introduction2).Run()
os.foo already exists: bar

OMG, the os module is cached, and the foo attribute is not redefined to non existing.

Conclusion

I hope this introduction helped you understand why when you work with Python in IRIS, you may encounter some unexpected behaviors, especially when it comes to importing scripts and caching.

Takeway, when working with Python in IRIS:

  • Change everytime the IRIS session to see changes in your Python scripts.
    • This is not a bug, it's how Python works.
  • Be aware that importing a script executes its code.

Bonus

Wait ! It doesn't make sense, if you say that when you import a script, it's cached. Why when I work with the language tag = python, when I change the script, it works without changing the IRIS session?

Good question, this is because the language tag is built in a way that everytime you run it, it will read the script again and execute it line by line as it was new lines in an native Python interpreter, language tag doesn't import the script, it just executes it as if you were running it directly in a Python interpreter without restarting it.

Example:

Class Article.Introduction2 Extends %RegisteredObject
{
ClassMethod Run() [ Language = python ]
{
    import os

    if not hasattr(os, 'foo'):
        os.foo = "bar"
    else:
        print("os.foo already exists:", os.foo)
}
}

Let's run it:

iris session iris -U IRISAPP
IRISAPP>do ##class(Article.Introduction2).Run()

IRISAPP>do ##class(Article.Introduction2).Run()
os.foo already exists: bar  

In a python interpreter it will look like this:

import os

if not hasattr(os, 'foo'):
    os.foo = "bar"
else:
    print("os.foo already exists:", os.foo)

import os
if not hasattr(os, 'foo'):
    os.foo = "bar"
else:
    print("os.foo already exists:", os.foo)

Output:

os.foo already exists: bar # only printed once

Make sense now?

Next :

  • Pep8
  • Modules
  • Dunder methods
  • Working with Python in IRIS
  • ...
0
3 184
Job Ying Zhang · Jul 8, 2025

I am seeking work with InterSystems HealthConnect/Cache. My experience is working with Rules and DTLs, plus message search, and export of components.With 10 years of dedicated expertise in SOA and ESB platform development, I have successfully designed and implemented enterprise-level integration solutions for large organizations, driving significant improvements in system interoperability and business efficiency.I have actively developed and supported HL7 V2/V3 、FHIR、XML/JSON interfaces.I reside in China. Available for full-time or contract positions, with remote work options preferred.The

0
0 67
Article Marco Bahamondes · Jun 24, 2025 3m read

Introduction

InterSystems IRIS allows you to build REST APIs using ObjectScript classes and the %CSP.REST framework. This enables the development of modern services to expose data for web apps, mobile apps, or system integrations.

In this article, you'll learn how to create a basic REST API in InterSystems IRIS, including:

  • A persistent data class
  • A REST class with GET and POST methods
  • A web application to expose the API
  • A full demonstration using Docker

Step 1: Create the data class Demo.Producto

3
3 145
Article Alex Alcivar · Jul 28, 2024 6m read

For a long time I have wanted to learn the Django framework, but another more pressing project has always taken priority. Like many developers, I use python when it comes to machine learning, but when I first learned web programming PHP was still enjoying primacy, and so when it was time for me to pick up a new complicated framework for creating web applications to publish my machine learning work, I still turned to PHP. For a while I have been using a framework called Laravel to build my websites, and this PHP framework introduced me to the modern Model-View-Controller pattern of web

2
1 376
InterSystems Official Henry Wojnicki · Jul 9, 2024

The Application Services team is pleased to announce the release of git-source-control version 2.4.0, introducing several new features to the open-source project.

For those unfamiliar, git-source-control is an embedded (or "server-side") source control tool for InterSystems products, installed through the InterSystems Package Manager.

Here are the key additions to the 2.4.0 release:

  1. Basic Mode
1
2 324
Article janzai renato · Apr 1, 2025 1m read

# IRIS-Intelligent ButlerIRIS Intelligent Butler is an AI intelligent butler system built on the InterSystems IRIS data platform, aimed at providing users with comprehensive intelligent life and work assistance through data intelligence, automated decision-making, and natural interaction.## Application scenarios adding services, initializing configurations, etc. are currently being enriched## Intelligent ButlerIRIS Smart Manager utilizes the powerful data management and AI capabilities of InterSystems IRIS to create a highly personalized, automated, secure, and reliable intelligent life and

1
1 100
Article lando miller · Mar 31, 2025 2m read

Prompt

Firstly, we need to understand what prompt words are and what their functions are.

Prompt Engineering

Hint word engineering is a method specifically designed for optimizing language models.
Its goal is to guide these models to generate more accurate and targeted output text by designing and adjusting the input prompt words.

Core Functions of Prompts

0
5 82
Article Rodolfo Pscheidt Jr · Mar 17, 2025 2m read

 

In this article I will be discussing the use of an alternative LLM for generative IA. OpenIA is commonly used, in this article I will show you how to use it and the advantages of using Ollama

In the generative AI usage model that we are used to, we have the following flow:

  • we take texts from a data source (a file, for example) and embedding that text into vectors
  • we store the vectors in an IRIS database.
  • we call an LLM (Large Language Model) that accesses these vectors as context to generate responses in human language.
1
0 206
Question Scott Roth · Nov 6, 2024

There are a select few in the group that have been using Github as a Local Client push to a Repository setup in GitHub. Questions were brought up today about the security, and possible issues when it comes to data being pushed in this method.

Looking over code we have noticed that there is Histogram data within some of the class files that could be considered a security issue. Does anyone else have concerns with the Histogram data being within the class files pushed up to github?

1
0 108
Article Nicky Zhu · Oct 10, 2024 9m read

This demo program is used to show how a custom FHIR profile can be employed to validate data compliance. The custom FHIR implementation guide was developed based on FHIR Version R4, and in this example implements the Organization resource extension to validating data compliance.

Installation

  1. Download the project via Git clone.
  2. Execute docker-compose up -d to build and start the container, the initial execution will download required container images and executing the script will take another 5 to 10 minutes (depending on the machine). InterSystems IRIS for Health image will be built, then FHIR server will be installed, and the custom FHIR specification will be imported so that it can be used to validate the data.
  3. Import the test case files from TestCases in Postman to see how the various FHIR constraints are validated
  4. After the container is started, you can view the contents of the Custom IG.

Code Structure

FHIRValidation
├─ ExampleIG                        
│  ├─ ig.ini
│  ├─ input
│  │  ├─ fsh
│  │  │  ├─ alias.fsh
│  │  │  ├─ codesystems.fsh
│  │  │  ├─ organization.fsh
│  │  │  └─ valuesets.fsh
│  │  └─ pagecontent
│  │     └─ index.md
│  └─ sushi-config.yaml
├─ README.md
├─ README_zh.md
├─ TestCases
│  └─ FHIR Profile-based Validation  testcases.postman_collection.json
├─ docker-compose.yml
└─ image-iris
   ├─ Dockerfile
   └─ src
      ├─ FullIG
      ├─ IGPackages
      │  ├─ hl7.fhir.uv.extensions.r4#5.1.0.tgz
      │  ├─ hl7.terminology.r4#6.0.2.tgz
      │  └─ package.tgz
      └─ init
         └─ init.sh

ExampleIG

All files in this subdirectory are SUSHI source codes of the customized FHIR specification.

TestCases

This subdirectory holds test case scripts based on the FHIR REST API, which need to be imported into Postman.

image-iris

This subdirectory holds the files required for InterSystems IRIS for Health image: └─ src ├─ FullIG This directory stores the custom FHIR IG generated by SUSHI ├─ IGPackages This directory holds the package files for custom FHIR IGs └─ init This directory holds the IRIS Docker image initialization scripts

FHIR package introduction

The HL7 organization recommends the use of implementation guides (Implementation Guild) to explain how to use the FHIR specification. In addition to instructions for developers to read (e.g., html), implementation guides typically include artifacts that are directly machine-readable and applicable and can be used to drive tasks such as code generation and data validation.
The FHIR Implementation Guide uses the NPM Package specification to manage dependencies. All StructureDefinition, ValueSet, and other resources covered by the guide are packaged together in a single package that can be used by FHIR Server to read the specification, generate client code, or perform data quality checks.
The implementation guide generated by the SUSHI tool contains several package files. In this example, image-iris/src/IGPackages/package.tgz is the generated package, which can be directly imported by IRIS FHIR Server. It should be noted that in addition to the core resource packages (e.g., hl7.fhir.r4.core), the complete FHIR specification needs to refer to additional resource packages such as terminology, extensions, and so on.
The current documentation of the FHIR specification referencing mechanism is not yet complete. For example, based on the R4 version of the FHIR specification in addition to referencing hl7.fhir.r4.core, it also needs to reference [hl7.fhir.uv.extensions.r4#5.1.0](https://simplifier.net/packages/hl7.fhir.uv.extensions.r4/ 5.1.0) and hl7.terminology.r4#6.0.2, these references are documented in the R5 versionbut not declared in the R4 version, so the developer needs to add them during the development process.
In this case these packages have been downloaded in the image-iris/src/IGPackages folder and will be loaded as dependencies before customizing the FHIR implementation guide.

FHIR validation introduction

See the Validating Resources section of the FHIR specification. The FHIR specification has been designed with data quality checking mechanisms for a range of mechanisms including data structures, attribute bases, value fields, code bindings, and constraints, etc. The HL7 organization in the FHIR specification does not mandate what intensity of quality control to follow, but recommends that the principle of leniency be applied to FHIR data.
For FHIR repositories that hold FHIR resources, guaranteeing the data quality of FHIR resources is a prerequisite for making the healthcare industry valuable and guaranteeing the safety of healthcare practices. Therefore, when building a data sharing and exchange scheme based on FHIR repositories, even if data that does not meet data quality requirements has to be saved, it should be calibrated to mark non-conformities and promote data governance activities to safeguard healthcare security and the interests of data consumers.
Of the multiple data validation methods indicated by the FHIR specification, FHIR Validator and FHIR Operations provide the most comprehensive coverage of data quality validation.
This example will use the $validate operation provided by InterSystems IRIS for Health to validate FHIR data that has not yet been saved via the profile parameter. Users can also modify the test case to construct an HTTP POST parameter to validate the stock FHIR resource.
It should also be noted that the $validate operation, if called correctly, will return the validation result via Http 200, and if there are any non-conformities, an error message will be wrapped in the returned OperationOutcome resource instead of identifying the error via the Http code.

Extensions to FHIR R4

The following extensions were made to the Organization resource based on FHIR R4:

1. Modify the binding strength of language

Change the binding strength of the organization's primary language to required

2. Active field cardinality changed from 0...1 to 1...1

This makes the status of active field a required field, with one and only one element

3. Name field cardinality changed from 0..1 to 1..1

The name of the organization becomes a required field with one and only one element. For reference, hospitals in China may have more than one name in addition to the hospital name if they have licenses as an Emergency Center, an Chest Pain Center, and so on. However, it is noted that these licenses usually identify the capacity of the services provided by the healthcare institution rather than the legal name it has in the organization registration system, and the life cycle of such licenses does not coincide with the life cycle of the healthcare institution itself. Therefore, the name obtained from the license is appropriately considered to be the service capability of the healthcare organization rather than the unique name of the organization. In FHIR, the name derived from the service capability can be provided through the resource HealthcareService, which can be more appropriately used to express the above concept by establishing a many-to-one referencing relationship with the Organization resource.

4. Increase in the type of organization of medical institutions

According to the Chinese national standard GB/T 20091-2021 organization types, CodeSystem organizationtype-code-system and ValueSet organizationtype-vs are added respectively, and the extension mdm-organizationTypeExtension is added to the Organization resource through Extension. Extension mdm-organizationTypeExtension is added to the Organization resource so that the resource can be used to represent the organization type that identifies Chinese organization types.
The extension is implemented by slicing the Extension with a cardinality of 1..1 so that the Healthcare Organization resource must have an organization type element.

5. Constraints on healthcare organization identification numbers

The FHIR base standard does not include the type of the unified social credit code for Chinese organizations, for this reason the CodeSystem cs-identifierType-code-system is added and the Identifier is sliced according to its type, so that it must be able to express the social credit code. And the format of the social credit code follows the following constraints:

  1. identifier.use must take the value official, i.e. official/official use
  2. identifier.type MUST follow cs-identifierType-code-system, system MUST be the uri of the codesystem, and code MUST be “USCC”.
  3. identifier.value must follow the custom constraint uscc-length-18, the field must be 18 digits long, of which the first 17 digits must be numeric and the last 1 digit must be numeric or alpha

Test Case List

1. Without profile - All OK

The resource's corresponding profile is not declared, so FHIR Server will not validate the values of the attributes in the resource and will only return All OK.

2. Unknow field

An undefined attribute isNational was added to the resource, so the validation engine returned an Unrecognized element error.

3. Wrong cardinality - less

In this IG, the cardinality of the Organization resource name attribute was modified to 1..1, which means that there should be and only one organization name. The name is not filled in this test case and hence the data validation fails. In addition, it can be observed that Identifier.type has been extended to include the Uniform Social Credit Code as an identifier type, which is not included in the FHIR R4 specification, but the strength of the code binding for this field is only EXAMPLE, which does not force constraints. Therefore, the validation engine returns the information level value field code non-conformance information without reporting an error.

4. Binding strength

In this IG, the code binding strength of the organization's language attribute is changed to required, then the field value field must conform to http://hl7.org/fhir/ValueSet/languages, therefore, when the field takes the value of 'wrong language', it is not in the required value value, which will result in an error level error

5. Wrong value

In this IG, the value field for the organization type comes from organizationtype-code-system, so when the value of code in the extension element of type mdm-organizationTypeExtension, which has a value of “999 ”, which is not in the value field, will result in an error-level error

6. Failing invariant

In this IG, the social credit code of an organization must follow the custom constraint uscc-length-18 (the field must be 18 digits long, where the first 17 digits must be numeric, and the last 1 digit must be numeric or alphabetic), and therefore violating this constraint when the last digit is the character “%” will result in an error

7. Failing profile

A single profile for a resource definition contains multiple constraints, so all issues that do not satisfy the profile will be detected during validation, such as the following issues in this example:

  1. wrong language code
  2. wrong organization type
  3. missing name field
0
1 325
Question Adam Raszkiewicz · Jul 26, 2024

I was watching this video about IRIS and GitHub and all is clear to me how it works and how code from each branch is getting deployed to each IRIS environment but the process to deploy is manual. My question is how can I, if possible, to utilize gti-source-control from GitLab CICD pipeline to deploy code automaticaly after PR approval instead going to the Git UI?

Thanks

2
0 476
Question Reuben Formosa · Jul 15, 2024

We have installed IRIS on a separate server that we access remotely and copied all code and data to it so we can test IRIS before we do the move.We develop directly on the server.We Use VsCode to code but sometimes we might need to go to cache studio for some tasks.

We were interested in git for Shared Development Environments, we have installed it on a server with IRIS 2021 and configured it by following the instructions and videos of InterSystems summits we found online. We initialised a local repository on the server, added some files to start testing branches.

4
0 304
Article Guillaume Rongier · Jul 8, 2024 3m read

wsgi_logo

Context

The Web Server Gateway Interface (WSGI) is a simple calling convention for web servers to forward requests to web applications or frameworks written in the Python programming language. WSGI is a Python standard described in detail in PEP 3333.

🤔 Ok, great definition and what the point with iris ?

IRIS 2024.2+ has a new feature that allows you to run WSGI applications directly on IRIS. This feature is a great way to integrate IRIS with other Python frameworks and libraries.

This goes in the trend of Python first experience, where you can use Python to interact with IRIS, and now you can also run Python applications directly on IRIS.

How to use it

To instantiate a WSGI application on IRIS, you need to configure it in the Security->Applications->Web Applications section of the IRIS Management Portal.

Simple flask example:

File called app.py in /irisdev/app/community directory:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

UI Configuration

image

In this section, you can configure the WSGI application by providing :

  • Aplication Name

  • this corresponds of the file name of the WSGI application

  • ex: app.py but without the .py extension : app

  • Callable Name

    • the callable function that will be called by the WSGI server

    • ex: app corresponds to the app variable in the app.py file

      • app = Flask(__name__)
  • WSGI App directory

    • the path where the WSGI application is located
    • ex: /irisdev/app/community
  • Python Protocol Type

    • it can be wsgi or asgi
      • wsgi is the default value and the one used in this example
      • asgi is for asynchronous applications
        • we support asgi syncrhonously for now with the a2wsgi adapter
  • DEBUG

    • if checked, the WSGI application will run in debug mode
      • this is useful for development purposes as any changes to the WSGI application will be automatically reloaded

CPF Merge

You can also configure the WSGI application using CPF. Here is an example of the configuration:

[Actions]
CreateApplication:Name=/flask,NameSpace=IRISAPP,WSGIAppLocation=/irisdev/app/community/,WSGIAppName=app,WSGICallable=app,Type=2,DispatchClass=%SYS.Python.WSGI,MatchRoles=:%ALL,WSGIDebug=0,WSGIType=0

Log Files

The WSGI application logs are stored in the WSGI.log file located in the mgr directory of the instance.

Examples

Here are some examples of WSGI applications that you can run on IRIS, they aim to show how to run different Python frameworks on IRIS.

Basically, the use case will be the same for all the frameworks:

Endpoints

  • /iris - Returns a JSON object with the top 10 classes present in the IRISAPP namespace.
  • /interop - A ping endpoint to test the interoperability framework of IRIS.
  • /posts - A simple CRUD endpoint for a Post object.
  • /comments - A simple CRUD endpoint for a Comment object.

Object Model

Post object:

  • id
  • title
  • content

Comment object:

  • id
  • post_id (foreign key to Post)
  • content

Flask

Django

FastAPI

Limitations

  • The ASGI is supported synchronously for now with the a2wsgi adapter.
  • tornado applications ( jupyter, streamlit, .. ) are not supported as they are not WSGI compliant.
0
0 545
Question Scott Roth · May 9, 2024

I am trying to create my first call to our Epic FHIR Repository from Health Connect using Samples-FHIRStarter now that I have OAuth2.0 connection tested/working with our Epic Interconnect URL.

When I take a patient example from our Epic environment and test it through Data.BPL.PatientRecordCollector within the Namespace, I keep getting a 404 - File or directory not found 

as it tells me it cannot find the patient. So, I know the connection is being established, I just can't see what is being sent to Epic to see if I could test it through Postman.

0
0 170
Article Heloisa Paiva · Mar 15, 2024 5m read

Introduction

In the next few weeks, my coworkers are planning to start using VSCode to code with InterSystems' products. Among the many advantages of that, I would emphasize being able to connect with other technologies, such as GitHub, with ease. Besides, VSCode also offers an extensive extensions store, where you can find many free add-ons that make coding faster and more efficient. Last but not least, to conquer the heart of every developer, it is open source.

With that being said, let's start the tutorial. Feel free to skip some steps if you're comfortable doing them alone.

2
2 914
Article Ben Spead · Dec 20, 2023 11m read

Your may not realize it, but your InterSystems Login Account can be used to access a very wide array of InterSystems services to help you learn and use InterSystems IRIS and other InterSystems technologies more effectively.  Continue reading to learn more about how to unlock new technical knowledge and tools using your InterSystems Login account.  Also - after reading, please participate in the Poll at the bottom, so we can see how this article was useful to you!

What is an InterSystems Login Account? 

4
1 657