Pietro Di Leo · Oct 9, 2025 go to post

Hi, I believe 3 points are missing for the IRIStool and Data Manager project, since I made 2 YouTube videos (the project is divided into two separate parts: integration and UI, each with its own video).

As stated in the Technology Bonuses for InterSystems .Net, Java, Python, and JavaScript post, I was expecting 3 points for each video:

Video on YouTube - 3 points

Make new YouTube videos that demonstrate your product in action and collect 3 bonus points per each.

Another question: what happens if I write a second article for a project today? Will I get an extra point?

Pietro Di Leo · Sep 26, 2025 go to post

Thank you Robert! Of course IRIS image is not only one but there are many, great point! 😊

Pietro Di Leo · Sep 18, 2025 go to post

Great news! I was wondering if embedded python is considered an external languages or not, because I'm developing a project for the contest and need to choose whether implementing a part of it through regular or embedded python. Let me know, thank you in advance 😊

Pietro Di Leo · Jul 7, 2025 go to post

Hi John, ok so I misunderstood the meaning of the command. Actually, I tried with the "ObjectScript: Export Documents to XML File", but it's a bit inconvenient since, as you said, it requires you to manually choose the file, negating the purpose of creating a project in advance.

Pietro Di Leo · Jul 7, 2025 go to post

Hello Jhonn, that is exactly what I've done but unfortunately it doesn't seem to work

Pietro Di Leo · Jul 4, 2025 go to post

Hi John, this is my workspace file:
 

{
	"folders": [
		{
			"path": "."
		},
		{
			"name": "Site Specific - CCN-16778 - Avallo Pazienti Stranieri - fpg_dev_production:DEV",
			"uri": "isfs://fpg_dev_production:dev/?project=Site Specific - CCN-16778 - Avallo Pazienti Stranieri"
		}
	],
	"settings": {}
}
Pietro Di Leo · Jun 26, 2025 go to post

Hi Anthony,

Of course! Click on Global Masters and then on Referral Program then you can make a referral for a friend or colleague by using his/her company email address.

Pietro Di Leo · May 12, 2025 go to post

Hello Celeste! This is really interesting. How are the eligible candidates chosen? Is there a way to apply? Thank you.

Pietro Di Leo · Apr 8, 2025 go to post

Thanks Yuri, this is really helpful. I was doing something similar but you have been faster :) 

Pietro Di Leo · Mar 30, 2025 go to post

Hello, it would be interesting to try the beta test of the exam. Is there any specific documentation on the topics listed or material to study to prepare for the exam? 

Pietro Di Leo · Feb 11, 2025 go to post

Hi, it's been quite a while since this question but yesterday I had the same problem and I'd like to share how I managed to solve it.

First of all, I have created a simple unauthenticated Web Application where the dispatch class it the EnsLib.REST.GenericService in order to user the simpler and cleaner architecture.

Then, after processing the HTTP request, I generate the HTTP response through a Business Process where I have declared the following parameters:

Parameter CONTENTTYPEJSON As STRING = "application/json";
Parameter HTTP200OK As STRING = "HTTP/1.1 200 OK";
Parameter HTTP202ACCEPTED As STRING = "HTTP/1.1 202 Accepted";
Parameter HTTP400BADREQUEST As STRING = "HTTP/1.1 400 Bad Request";
Parameter HTTP500INTERNALSERVERERROR As STRING = "HTTP/1.1 500 Internal Server Error";

It is important that the parameters related to the status line starts with "HTTP/1.1", since it is this statement that enable the return of the correct HTTP status.

Finally, I generate the response as shown:

Set ContentType = ..#CONTENTTYPEJSON
Set StatusLine = ..#HTTP500INTERNALSERVERERROR
Set HTTPStatus = 500

; Format the json with the correct indentation
Set jsonFormatter = ##class(%JSON.Formatter).%New()
Set pStream = ##class(%Stream.GlobalCharacter).%New()
Set sc = jsonFormatter.FormatToStream(json, .pStream)

; Generate an HTTP response message
Set pResponse = ##class(EnsLib.HTTP.GenericMessage).%New(pStream)

; Add headers to the HTTP response
Set sc = pResponse.HTTPHeaders.SetAt(StatusLine,"StatusLine")
Set sc = pResponse.HTTPHeaders.SetAt(HTTPStatus,"StatusCode")
Set sc = pResponse.HTTPHeaders.SetAt(ContentType, "Content-Type")

; I tested it with the following HTTP codes either and it works: 
;   202 / ..#HTTP202ACCEPTED
;   200 / ..#HTTP200OK
;   etc...

I tested with HTTP statuses 200, 202 and 500, but I'm pretty sure it will work with other statuses as well.

Pietro Di Leo · Jan 21, 2025 go to post

Thanks for the clarification Ashok! I solved in a similar way. It would be good in a future version to have the possibility of executing generated methods too.

Pietro Di Leo · Jan 21, 2025 go to post

Hello Ashok, this is a great article, thanks for sharing it!

However, I would like to ask how to create an oref using a property index. For example, considering the class:

Class User.Test Extends %Persistent
{

Property Code As %String(MAXLEN = 50) [ Required ];
Index CodeIdx On CodeIdx [ Unique ];
}

In ObjectScript I can use the following syntax to open the oref using its ID: 

set obj = ##class(User.Test).CodeIdxOpen(ID)

In the same way I can use the CodeIdxDelete or CodeIdxExists as well.

I was wondering how to obtain the same result in Embedded Python.

Pietro Di Leo · Dec 19, 2024 go to post

Hello Brett, thank you so much for the suggestions. I've installed Wireshark but, since I've never used it before, I find it a bit tricky. Do you have any advice on how to use it to capture the network trace from Visual Studio Code during saving operations?
P.S. actually I have the same identical issue with Codeium and I tried to contact them but they've never answered me :(
Luckily today a free version of GitHub Copilot which is working with ObjectScript has just been released

Pietro Di Leo · Dec 17, 2024 go to post

Hello Timo,

thanks for your response. I've finally learned how to modify the qualifiers on VSC but unfortunately this didn't solved my issue, which is probably caused by a connection error, as I wrote in another comment. 

Pietro Di Leo · Dec 17, 2024 go to post

I've probably found something.

In the "Window" panel of Output in VSC I've found the following error message: 

Which is reported here:

2024-12-17 13:10:51.455 [error] [unknown] parse "isfs://fpg_base:drugstock/Custom/Production/DrugStock/BO/TrakCareToOracleOAPPS.cls": invalid port ":drugstock" after host: parse "isfs://fpg_base:drugstock/Custom/Production/DrugStock/BO/TrakCareToOracleOAPPS.cls": invalid port ":drugstock" after host: ConnectError: [unknown] parse "isfs://fpg_base:drugstock/Custom/Production/DrugStock/BO/TrakCareToOracleOAPPS.cls": invalid port ":drugstock" after host: parse "isfs://fpg_base:drugstock/Custom/Production/DrugStock/BO/TrakCareToOracleOAPPS.cls": invalid port ":drugstock" after host
	at u (c:\Users\p.dileo\.vscode\extensions\codeium.codeium-1.30.2\dist\extension.js:2:4786920)
	at t.errorFromJsonBytes (c:\Users\p.dileo\.vscode\extensions\codeium.codeium-1.30.2\dist\extension.js:2:4787822)
	at next (c:\Users\p.dileo\.vscode\extensions\codeium.codeium-1.30.2\dist\extension.js:2:4806907)
	at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
	at async Object.unary (c:\Users\p.dileo\.vscode\extensions\codeium.codeium-1.30.2\dist\extension.js:2:4805632)
	at async Object.getClassInfos (c:\Users\p.dileo\.vscode\extensions\codeium.codeium-1.30.2\dist\extension.js:2:4781046)

The issue is probably caused by the following connection error: 

ConnectError: [unknown] parse "isfs://fpg_base:drugstock/Custom/Production/DrugStock/BO/TrakCareToOracleOAPPS.cls": invalid port ":drugstock" after host

It seems like vsc is trying to connect to the server using the namespace name (DRUGSTOCK) as the port. 

This is the configuration I'm currently using for this server, stored inside the settings.json file: 

        "fpg_base": {
            "webServer": {
                "scheme": "http",
                "host": <ip address>,
                "port": 52773
            },
            "description": "...",
            "username": <my username here>
        },

What can I do to address this issue? 

Pietro Di Leo · Dec 17, 2024 go to post

Hello Brett,
thank you for your response. Actually, I tried compiling after modifying the qualifiers but it is still not possible to compile the class through VSC. I believe you're right and the issue may be a communication error between VSC and the server.
Which panel of the Output Panel I should look into? Because the ObjectScript Panel does not show anything.
 

Pietro Di Leo · Nov 22, 2024 go to post

Hi David, thank for your response. I've solved the issue but I didn't know about this %response.InProgress, it seems a very useful statement! 

Pietro Di Leo · Nov 22, 2024 go to post

Thanks Ashok, it is interesting and I used it in another project. However, I've solved this issue but while reading your answer I wonder how to use this HTTP GenericMessage as the response stream within the CSP %response. Do you have any idea? Thanks

Pietro Di Leo · Nov 22, 2024 go to post

Ciao Enrico, 

thanks for your response. However, I identified and solved the issue. It was a bit tricky to find because, basically, who developed this REST interface before, returned a response through the following statements:

Set ListaPrenotazioni   = ##class(%Library.ListOfDataTypes).%New()
 
 [... Populate the list of data types ...]
 
Do ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.jsonStream,ListaPrenotazioni,,,,"eu")
Do jsonStream.Rewind()
Do jsonStream.OutputToDevice() 

Since at first I put my statements after this code (before OutputToDevice()), I wasn't able to modify the status or the header. I found it out while reading the comment to the method SetHeader, which says:

All headers must be set before the HTTP headers are written (after OnPreHTTP() completes).

It was a bit unintuitive because I didn't expected that generating the stream will prevent any further header or status modification. Basically, I solved just moving all my statements before the code that creates the variable jsonStream:

Set ListaPrenotazioni   = ##class(%Library.ListOfDataTypes).%New()
 
 [... Populate the list of data types ...]

[ In case of error: ]
Do %response.SetHeader("totalcount",totalcount)
Set %response.Status = ..#HTTP400BADREQUEST
[ ... ]

Do ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.jsonStream,ListaPrenotazioni,,,,"eu")
Do jsonStream.Rewind()
Do jsonStream.OutputToDevice() 
Pietro Di Leo · Sep 12, 2024 go to post

Hi Luis, thanks for responding me. 

However, I can't find the DEQ state in the documentation. 

Available states for the "State" property of the %SYS.ProcessQuery class are: 

LOCK - Executing a Lock command
OPEN - Opening a device
CLOS - Closing a device
USE - Using a device
READ - Read command
WRT - Write command
GET - Executing a $Get on a global
GSET - Setting a global
GKLL - Killing a global
GORD - $Order on a global
GQRY - $Query on a global
GDEF - $Data on a global
ZF - Executing a $ZF command
HANG - Executing a Hang command
JOB - Executing a Job command
EXAM - Executing a variable exam
BRD - Executing a broadcast
SUSP - Process is suspended
INCR - Executing a $Increment
BSET - Set $bitset
BGET - get $bitset
EVT - Waiting on event RUN - Process is running