Rechercher

问题
· 六月 29

JSON fields and Class properties - are they case sensitive?

Hi noble devs!

Just building a simple frontend->JSON->IRIS backend story, and figured that IRIS while importing via %JSON.Adaptor wants JSON fields to match property names, meaning even should match the case. Like:

{ name: "John", 

surname: "Doe"}

will have issues while saving the dynamic object to a class Sample.Person with:

Class Sample.Person Extends (%Persistent, %JSON.Adaptor)

{

Property Name: %Sting;
Property Surname: %String;
}

As soon as the case is not the same... 

Is there any setting to fix this?) By fixing I mean I want IRIS to don't care about the case JSON fields, as it doesn't matter from SQL point of view, .e.g., IRIS will not allow two same properties but different case:

Property Name : %String;
Property name: %String;

Thoughts?

15 Comments
讨论 (15)4
登录或注册以继续
文章
· 六月 29 阅读大约需 1 分钟

REST API Debug: Page Not Found situation

Hi developers. Just want to share with you a finding that might save you a few important minutes of your developer life with InterSystems IRIS.

But!

It should work; you deployed the REST API correctly, and everything is just in place.

What can go wrong?

The issue in my case was that I misspelled the name of the class, like in this picture:

 

It was a typo there. And there were no compilation errors, no console messages - no evidence of what is wrong. 

So, if you face a similar problem - Not Found message for a page that "just should work" - take a look at the Dispatch class? if the name is accurate?

And of course ask the community. Maybe it will save you a few important minutes of our precious developers' life.

Cheers!

讨论 (0)1
登录或注册以继续
文章
· 六月 29 阅读大约需 3 分钟

Retour sur InterSystems Ready 2025

Salut la Communauté !

J’ai eu le plaisir d’être votre reporter sur place pour InterSystems Ready 2025, le plus grand événement de l’année dédié aux développeurs d'InterSystems. Comme toujours, ce sommet mondial a été riche en découvertes, en échanges et en innovations. Cette année encore, la Communauté Francophone s’est brillamment illustrée et a pleinement participé à cette aventure inspirante !

@Dean Andrews, @Irène Mykhailova, @Anastasia Dyubaylo, @Adeline Icard et @Guillaume Rongier:

Dès la journée précédant le sommet, les activités ont battu leur plein : golf à l’aube, ateliers techniques passionnants, et moments conviviaux entre collègues. Même si la chaleur et les 18 trous de golf ont eu raison de certains, pour le reste de la journée l’ambiance était au rendez-vous !

Le sommet a véritablement commencé lors de la réception d’ouverture. C’était un vrai plaisir de retrouver des visages connus et de rencontrer de nouveaux membres de la communauté.

@Iryna Mykhailova, @Johan Jacob, @Lorenzo Scalese, @Adeline Icard, @Guillaume Rongier 

Au fil des sessions, @Guillaume Rongier a animé plusieurs démonstrations techniques sur Python et IRIS, captant l’attention des visiteurs du Tech Exchange

On a également croisé Lorenzo Scalese, Guillaume Rongier et Luc Chatty à divers moments phares, notamment lors des jeux "Ready Games", des sessions sur l'IA, et bien sûr, autour de la fameuse "roue de la fortune" au stand de la Developer Community !

@Lorenzo Scalese, @Dean Andrews , @Derek Gervais 

@Muhammad Waseem, @Guillaume Rongier, @Anastasia Dyubaylo, @Oliver Wilms 

@Anzelem Sanyatwe, @Iryna Mykhailova, Luc Chatty

Et que dire du concert à Universal City Walk avec le groupe Integrity Check ?

Même @Randy Pallotta, le guitariste vedette, a fait quelques apparitions parmi nous après le show !

La dernière matinée fut l’occasion de se dire au revoir, de profiter des dernières présentations. Et bien sûr, la session principale de Ready 2025 : InterSystems Developer Ecosystem – les nouvelles ressources et outils à connaître. @Dean Andrews et @Anastasia Dyubaylo ont présenté un aperçu complet de toutes les nouveautés de l’écosystème Developer Community.

Par la suite, @David Reche a mis à l’épreuve l’attention des participants en animant un quiz Kahoot!

Accueillons chaleureusement les gagnants : @Vishal Pallerla, @Rochael Ribeiro et @Jason Morgan. Félicitations ! Nous espérons que vous profiterez bien de votre récompense !

Tout le monde était heureux :

@Juliana Yamao Modesto, @Derek Gervais, @Rochael Ribeiro, @Iryna Mykhailova, @Katia Neves, @Anastasia Dyubaylo, @Dean Andrews, @Enrico Parisi, @Vishal Pallerla, @Eduard Lebedyuk

Merci à toute l’équipe, et en particulier à @Maureen Flaherty, véritable marraine de cet événement. Chapeau bas pour l’organisation impeccable !

@Maureen Flaherty, @Enrico Parisi, @Iryna Mykhailova

À l’année prochaine pour InterSystems Ready 2026 ! Rumeurs confirmées : le prochain sommet aura lieu en avril à Washington, D.C. Notez la date dans vos calendriers, car on espère y voir encore plus de membres francophones !

La Communauté Francophone InterSystems, c’est vous – et nous avons hâte de vous retrouver à Ready 2026 !

讨论 (0)1
登录或注册以继续
文章
· 六月 28 阅读大约需 3 分钟

Analytics Cube Definitions and References

Maybe this is well known but wanted to help share.

 

Consider that you have the following persistent class defintions

An Invoice Class with a property reference to Provider

Class Sample.Invoice Extends (%Persistent, %Populate)
{
Parameter DSTIME = "AUTO";
Property InvoiceNumber As %Integer(MINVAL = 100000) [ Required ];
Property ServiceDate As %Date(MINVAL = "+$h-730") [ Required ];
Index InvoiceNumber On InvoiceNumber;
Property Provider As Sample.Provider [ Required ];
Index Provider On Provider [ Type = bitmap ];
/// Build some invoices, this will firstly create 100 Providers
/// <Example>
/// Set tSC=##class(Sample.Invoice).Build()
/// </example>
ClassMethod Build(pCount As %Integer = 100020, pInit As %Boolean = 0) As %Status
{
    #dim tSC 			As %Status=$$$OK
    #dim eException  	As %Exception.AbstractException
    try {
        If pInit {
            $$$THROWONERROR(tSC,##class(Sample.Provider).%KillExtent())
            $$$THROWONERROR(tSC,##class(Sample.Invoice).%KillExtent())
        }
        $$$THROWONERROR(tSC,##class(Sample.Provider).Populate(100))
        $$$THROWONERROR(tSC,##class(Sample.Invoice).Populate(pCount))
    }
    catch eException {
        Set tSC=eException.AsStatus()
    }
    Quit tSC
}
}

and Provider

Class Sample.Provider Extends (%Persistent, %Populate)
{

Property Name As %String [ Required ];
Property NPI As %Integer(MAXVAL = 9000000000, MINVAL = 100000000) [ Required ];
}

If you call the Build method in Sample.Invoice you can query this with SQL

SELECT
InvoiceNumber,Provider->Name, Provider As ProviderId,ServiceDate
FROM Sample.Invoice

and see

The area this article discusses is deciding how to create a dimension on Provider.

What I have found works well is to following this pattern

What this does is 

1. Define the dimension Unique Id on Provider(which is the Id from Sample.Provider).  This is important because it's entirely possible that there is more than one Provider with the name SMITH,JOHN.  By defining the dimension Level on the property Provider we are saying make the dimension table based on a unique Provider.  If we look in the generated dimension table we see

2. Define a Property for the Level that 

 a. Identifies the Property = Provider.Name

 b. Get value at runtime= Yes

 c. Use as member names = Yes

This has the side effect of defining in the dimension table the following Property declaration

/// Dimension property: Name<br/>
/// Source: Provider.Name
Property Name As %String(COLLATION = "SQLUPPER(113)", MAXLEN = 2000) 
[ Calculated, 
SqlComputeCode = {Set {Name}=##class(Sample.BI.Cube.Invoice.Provider).%FetchName({Provider})}, SqlComputed ];

with the %FetchName method looking like

/// Fetch the current value of %FetchName.<br/>
/// Generated by %DeepSee.Generator:%CreateStarTable.
ClassMethod %FetchName(pKey As %String) As %String
{
 // If we don't a value, show key as this is most likely the NULL substitute
 Set tValue=pKey
 &SQL(SELECT Name INTO :tValue FROM Sample.Provider WHERE %ID = :pKey)
 Quit tValue
}

 

What this means is that when a dimension members are retrieved it will return the Provider Name and not the Provider Id.

Using Analyzer we can see

Why is this important?

  1. If the Provider name changes in Sample.Provider the cube does not have to be rebuilt or synchronized.  If we have 100s of millions of invoices and the Provider names changes we dont want to have to rebuild or synchronize the Invoice cube due to a single Provider name change
  2. The Dimension table for Provider is based on the Provider(id) so this allows us to have more than one provider with the same name in the dimension table/cube.

If instead of defining a Dimension Level Property we define the Level Property= Provider.Name this means when the cube is built or syncrhonized 

  1. the dimension unique index is based on Provider.Name which means all of the providers with the same name get aggregated under the same name
  2. If the Provider.Name changes we are required to rebuild the cube
讨论 (0)1
登录或注册以继续
文章
· 六月 28 阅读大约需 3 分钟

The last day of the InterSystems Ready 2025

Hey Community!

Here's the recap of the final half-day of the InterSystems Ready 2025! It was the last chance to see everyone and say farewell until next time.

It was a warm and energetic closing, with great conversations, smiles, and unforgettable memories!


The final Ready 2025 moment with our amazing team!

And, of course, let’s say a huge THANK YOU to a godmother of the Ready 2025, @Maureen Flaherty! You and your team are the best! Here we are together with @Enrico Parisi.

@Patrick Sulin dropped by Developer Cmmunity table:

And @Yuri Marx

Caught @Scott Roth outside the Tech Exchange

And @Sergei Shutov 

My golf buddy @Anzelem Sanyatwe also came to spin the wheel of fortune. And Luc Chatty dropped by.

We went to visit the source of great ribbons. Here are @Iryna Mykhailova, @Macey Minor, @Andre Ribera, @Anastasia Dyubaylo 

 

It was also time for the winners of the AI Programming Contest to present their AI agentic applications!

@Sergei Shutov talked about AI Agents as First-Class Citizens in InterSystems IRIS:

@Eric Fortenberry presented "A Minimalist View of AI: Exploring Embeddings and Vector Search with EasyBot":

@Yuri Marx spoke about Natural Language Control of IRIS:

@Muhammad Waseem talked about Next generation of autonomous AI Agentic Applications:

@Henry Pereira, @Henrique Dias, and @José Pereira got hid by all the people who came to listen "Command the Crew - create an AI crew to automate your work" presentation:

@Victor Naroditskiy explained how Developer Community AI works:

Also, on the other tables people carried out other presentations. For example, @Guillaume Rongier talked about Python:

Let's leave Tech Exchange and see what was going on at the DC sessions. @Ben Spead, @Hannah Sullivan@Victor Naroditskiy, and @Dean Andrews talked about using SerenityGPT to build GenAI middleware:

And, of course, the main session of the Ready 2025 - InterSystems Developer Ecosystem: new resources and tools you need to know. @Dean Andrews and @Anastasia Dyubaylo gave an overview of all the updates to the DC Ecosystem:

Afterwards, @David Reche checked how attentively everyone was listening by leading the Kahoot! game. Please welcome the winners: @Vishal Pallerla, @Rochael Ribeiro and @Jason Morgan. Congratulations! We hope you enjoy your prize!

@Juliana Yamao Modesto, @Derek Gervais, @Rochael Ribeiro, @Katia Neves, @Anastasia Dyubaylo, @Dean Andrews, @Enrico Parisi, @Vishal Pallerla, @Eduard Lebedyuk

On this happy note, I promised last time to tell you who was the only verified person who answered all the quiz questions correctly at the DC table. And it was @Asaf Sinay! Congratulations! @Olga Zavrazhnova and the whole Global Masters team are happy that so many people came and tried to master it. If you're interested to do a quiz, here's the link. And if you want to answer more quiz questions, you can find them on Global Masters!

 

Talking about Global Masters and quizzes, you can't skip the most popular reward 😁 No summit goes by without someone showing me their Developer Community socks 🤣

As you can see, the Brazilian DC team is very happy: @Rochael Ribeiro, @Juliana Yamao Modesto. @Danusa Calixto and @Heloisa Paiva we really missed you - with you, the Portuguese Developer Community team would've been complete!

This was almost the end of the Ready 2025 and it's the end of my story.

The rumor is, the next summit will take place in April in Washington, D.C. Put it in your calendar not to double book, you know you want to! 

See you next year!

10 Comments
讨论 (10)7
登录或注册以继续