go to post Evgeny Shvarov · 13 hr ago Great stuff! Made an example in ObjectScript Docker template: @Thomas Wuppermann, you can add an env variable in docker-compose.yml to make merge cpf be implied, and the merge.cpf with the name you prefer.
go to post Evgeny Shvarov · 14 hr ago On a side note, have you tried ObjectScript Quality for the same linting purpose? It is very naturally connected to GitHub Actions - you can add this file to any open-source GitHub repository with objectscript to see it in action, with examples.
go to post Evgeny Shvarov · Jul 1 I agree. I changed it to "not read-only" as I wasn't to manage unit-tests without it :) Don't know how to mark an object "modified" - otherwise, %Save() doesn't trigger the calculated property to update. But I agree - read only is much better.
go to post Evgeny Shvarov · Jul 1 Thank you, Kai! Do you have any examples where the case-sensitive principle can be used, e.g., with C++ or C# and InterSystems ObjectScript class properties?
go to post Evgeny Shvarov · Jun 30 Right. So, what is the reason, or if you may, what are the benefits of properties to be case sensitive?
go to post Evgeny Shvarov · Jun 30 Exactly. And as I mentioned above, you cannot compile such a class with properties that differ only in case. What are the benefits of properties being case sensitive? Don't see any.
go to post Evgeny Shvarov · Jun 30 How do you mean "use case"? You just shouldn't bother about the case of property names in IRIS while sending a JSON from your frontend to the IRIS REST-API. Like you don't care while sending it vs any SQL engine backend.
go to post Evgeny Shvarov · Jun 30 Thank you, @Enrico Parisi ! But are you sure about 1.? I've just created a class: Class dc.sample.ObjectScript { property Name As %String; property name as %String; } } And have a compilation error: ERROR! In class 'dc.sample.ObjectScript' Property 'Name' from 'dc.sample.ObjectScript' and 'name' from 'dc.sample.ObjectScript' have the same name but differ in case.
go to post Evgeny Shvarov · Jun 30 Thank you, @Ashok Kumar T ! I went to submit an idea to fix this, and found your's one :) Voted.
go to post Evgeny Shvarov · Jun 29 Yes, thank you, AI. But I want it not to care about the case completely.
go to post Evgeny Shvarov · Jun 27 A yet another workaround for non-obvious caveat of using %JSON.Adapter and JSON transport around persistent data is a necessity to add an ID related property to your persistent class, like PersonId in this case: Property PersonId As %Integer [ Calculated, SqlComputeCode = { set {*}={%%ID}}, SqlComputed ]; This will allow to export ID of a record in DB automatically. Same when you do updates with records, you need to remove this PersonId JSON from an update request, .e.g like this: set personDynObj= {}.%FromJSON(person.Read()) do personDynObj.%Remove("PersonId") // Remove PersonId if it exists, as it is calculated set sc = personObj.%JSONImport(personDynObj) set sc = personObj.%Save()
go to post Evgeny Shvarov · Jun 27 The simplest way to programmatically create a database in IRIS is: do $SYSTEM.SQL.Execute("CREATE DATABASE MYDB")
go to post Evgeny Shvarov · Jun 26 And 3 parameters for the spec class that help: HandleCorsRequest - it is most likely CORS will be needed, applicaton/json to support JSON content and ExposeServerExceptions for debug reasons: Class shvarov.person.spec Extends %REST.Spec [ ProcedureBlock ] { Parameter HandleCorsRequest = 1; Parameter CONTENTTYPE = "application/json"; Parameter ExposeServerExceptions = 1; ...
go to post Evgeny Shvarov · Jun 26 also I always add the same _spec GET endpoint to let swagger have a working specification in docker - the default one doesn't work in docker as IRIS default spec one overrides the host variable to one, that doesn't work. ClassMethod GetSpec() As %DynamicObject { set specname=$p(..%ClassName(1),".impl") Set spec = {}.%FromJSON(##class(%Dictionary.CompiledXData).%OpenId(specname_".spec||OpenAPI").Data) Set url = $Select(%request.Secure:"https",1:"http") _ "://"_$Get(%request.CgiEnvs("SERVER_NAME")) _ ":" _ $Get(%request.CgiEnvs("SERVER_PORT")) _ %request.Application Set spec.servers = [{"url" : (url)}] Quit spec }
go to post Evgeny Shvarov · Jun 26 Thanks @Dan Pasco. This is what I used in the example class. Yes, it's great that we have it now in IRIS.
go to post Evgeny Shvarov · Jun 26 @Ben Spead it's great you mentioned %OnAddToSaveSet() triggers - how do you manage cases when records were changed by CREATE/UPDATE SQL query? These triggers not fire in this case, right?