go to post David Hockenbroch · Oct 14, 2024 Thank you, Guillaume! Lesson learned: make sure you're running pip from the IRIS Python, not the default Python on the PC!
go to post David Hockenbroch · Oct 11, 2024 Performance is number one for us. With properly defined and tuned tables, I've never seen a database run its queries faster than IRIS. Also just a lot of native capabilities. It's pretty rare that we have to reach outside of what comes in the box. And now with embedded Python, when we do need to add something, we have a lot of options. Aside from Python's technical benefits, there's also a personnel consideration. More and more younger developers are learning Python, and according to the PYPL index Python passed Java in popularity among learners in 2018 and is far beyond Java today. That means having Python as an option opens up your hiring pool more than any other language to the next generation of developers.
go to post David Hockenbroch · Oct 11, 2024 Yes, you can do that, but I have another recommendation. You generally want to be careful with what you do in %SYS, and you might not want a user to have permission to access that stuff all the time. You could create a new security role that gives the right permissions to access whatever you're accessing, then assign it in that method, run the code that needs it, and remove it. So let's say your new security role is called MyRole: set $ROLES = MyRole set oldns = $NAMESPACE new $NAMESPACE set $NAMESPACE = "%SYS" // Do your stuff here. new $NAMESPACE set $NAMESPACE = oldns new $ROLES The $ROLES special variable is used to manage roles that are added and removed programatically during the execution of code, but does not affect roles assigned to the user in the management portal.
go to post David Hockenbroch · Oct 9, 2024 If you don't have any other criteria you can use in your where clause, that will happen. Based on the data you've shown us, you'd need either ProvId or ProviderType to get it down to 1 row. If you just want the first row returned and don't really care which one it is, you could do SELECT TOP 1 IdentityId FROM PhysTable WHERE ProviderName = 'DOE, JOE' AND Type = 'NPI' ORDER BY IdentityId But that's only if you always want the lower number, and I doubt that's the case, right?
go to post David Hockenbroch · Oct 9, 2024 I think I'm confused. In your previous comment you said "We do not get the ProvId "8252" in the message, we do get the IdentityId "345678"." So I thought you got the IdentityId in the message.
go to post David Hockenbroch · Oct 9, 2024 What if you just do SELECT IdentityId FROM PhysTable? Do you get a column, or nothing?
go to post David Hockenbroch · Oct 9, 2024 So you get the IdentityId and the ProviderName, and you know the Type, and you want to write a query to get the ProvId?
go to post David Hockenbroch · Oct 9, 2024 Do you mean you want to know how to get just that column? SELECT IdentityId FROM PhysTable WHERE ProviderName = 'DOE, JOE' AND type = 'NPI' AND ProvID = '8252' Or if this is in SQL embedded in ObjectScript: &sql(SELECT IdentityId INTO :IdentityId FROM PhysTable WHERE ProviderName = 'DOE, JOE' AND type = 'NPI' AND ProvId = '8252') That will get the Identity ID and put it into the variable IdentityId for you to use in further code.
go to post David Hockenbroch · Oct 7, 2024 If you test the connection in your System Management Portal, does it fail there too?
go to post David Hockenbroch · Oct 3, 2024 InterSystems Studio is deprecated. IRIS 2024.1 is the last version that ships with the Studio, but it can be downloaded as a separate component from the WRC.
go to post David Hockenbroch · Oct 2, 2024 Neither text nor CSV files support any kind of formatting, just plain text.
go to post David Hockenbroch · Sep 30, 2024 When you're using a REST API, you're sending an HTTP or HTTPS response, so all of the typical HTTP headers apply. This includes the content type and the disposition header. The content type, as Rodolfo mentioned, can be set using %response.ContentType. Others can be set using %response.SetHeader.
go to post David Hockenbroch · Aug 28, 2024 Just FYI, CSP sessions are instances of %CSP.Session. You could do ##class(%CSP.Session).%OpenId("wuuZ2Gwgxw") to get the session and use some of the properties and functions there to get more information on what's going on. And since they extend %Persistent, you can also use %DeleteId (at your own risk, of course).
go to post David Hockenbroch · Aug 23, 2024 If you are looking for the class name where a currently-running method originates, you could also try: set method = $CLASSNAME($THIS)_"||"_$P($Stack($stack,"PLACE"),"+",1) &sql(select Origin into :origin from %Dictionary.CompiledMethod where ID1 = :method) w origin,!
go to post David Hockenbroch · Aug 23, 2024 Are you trying to get all of the classes that a class extends? You can do that like this: set classname = $CLASSNAME($THIS) &sql(select primarysuper into :super from %dictionary.compiledclass where id=:classname) w super,! If you do that, super is a ~ separated list of the class and everything that it inherits from, which is probably actually more information than you need.
go to post David Hockenbroch · Aug 1, 2024 Glad you got an answer to your main question. To answer your other question about how to check a status, the Execute and Prepare methods of the %ResultSet class return a %Status. Where you have do Rs.Prepare(SQL) and do Rs.Execute(), you could use: set sc = Rs.Prepare(SQL) if $$$ISERR(sc) {$$$ThrowStatus(sc)} set sc = Rs.Execute() if $$$ISERR(sc) {$$$ThrowStatus(sc)} Then if there was an error doing either of those things, it would get passed off to your catch block. In your case, there would've been an error indicating your permissions issue.
go to post David Hockenbroch · Aug 1, 2024 No, it doesn't run as soon as the previous task ends. It runs at the next scheduled time. So in my example above, if your task runs at 12:00:00 and doesn't finish until 12:01:30, the next scheduled time is 12:02:00, so that's when it'll run next. I'm not sure how far back in versions this goes, but you might be able to change that behavior so it's more like what you're expecting.
go to post David Hockenbroch · Jul 31, 2024 A task expires if it can't run when it was scheduled. This could be because your Ensemble instance was down when the task started, or it could be because a previous instance of the task was still running when it was supposed to start again. For example, if you have a task set to run every minute but it takes the task 90 seconds to complete, then when it run at 12:00, it will be supposed to start again at 12:01, but since it will still be running, the 12:01 task will expire and the task will run again at 12:02.