Well, from my experience you will need the same databases on your local instance, so you will need to load a backup from the original into the local instance and after that apply the journal file generated after the creation of this backup from the original.
You can check the ClassMethod TestPost where a data is received from a post call and is sent finally to a business operation where is transformed into a DynamicObject and parsed to another class. This is the business operation:
Class WSTEST.BO.PersonSaveBO Extends EnsLib.REST.Operation
{
Parameter INVOCATION = "Queue";
Method savePerson(pRequest As WSTEST.Object.PersonSaveRequest, Output pResponse As WSTEST.Object.PersonSaveResponse) As%Status
{
try {
set person = ##class("WSTEST.Object.Person").%New()
#dim request as%DynamicObject = {}.%FromJSON(pRequest.JSON)
set person.PersonId = request.PersonId
set person.Name = request.Name
set person.LastName = request.LastName
set person.Sex = request.Sex
set person.Dob = request.Dob
set tSC = person.%Save()
set pResponse = ##class("WSTEST.Object.PersonSaveResponse").%New()
set pResponse.PersonId = person.PersonId
set pResponse.Name = person.Name
set pResponse.LastName = person.LastName
set pResponse.Sex = person.Sex
set pResponse.Dob = person.Dob
}catch{
Set tSC="Error saving the person"
}
Quit tSC
}
XData MessageMap
{
<MapItems>
<MapItem MessageType="WSTEST.Object.PersonSaveRequest">
<Method>savePerson</Method>
</MapItem>
</MapItems>
}
}
In my opinion the best approach is to create a BO for each database connection and invoke them from a BPL, getting the results and doing whatever you want.
Are you using an aggregate function in your query? You can see in the documentation that %SQLCODE = 0 is returned for queries with aggregates as SUM or AVG because it's returning a row even with a null value of the aggregation function.
forx=1:1:rs.%ResultColumnCount{
//Get the value of each columnset colValue = rs.%GetData(x)
//Get the name of each columnset colName = cols.GetAt(x).colName
set colType = rs.GetColumnType(x)
If you want something low-code you can create a Data Transformation with a HL7 message as source and as destination a class created ad-hoc with the structure that you need. Take a look to this example:
The destination in a class called RestTest.FirstRestObject with this definition:
Class RestTest.FirstRestObject Extends (%Persistent, %JSON.Adaptor, Ens.Util.MessageBodyMethods, Ens.Request)
{
/// DescriptionProperty Name As%String;/// DescriptionProperty LastName As%String;Property Childs As list Of NestedRestObject;
}
ObjectScript
ObjectScript
This object has an SQL representation wich you could use later for your analysis:
go to post
You have to create a new class that extends Ens.StringResponse, then you will be able to add so many properties as you need in your new class.
Please, check this URL: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...
go to post
Second position is the best position!
go to post
Well, from my experience you will need the same databases on your local instance, so you will need to load a backup from the original into the local instance and after that apply the journal file generated after the creation of this backup from the original.
go to post
I wrote an article about the creation of a REST service that maybe can help you.
https://community.intersystems.com/post/creating-rest-service-iris
You can check the ClassMethod TestPost where a data is received from a post call and is sent finally to a business operation where is transformed into a DynamicObject and parsed to another class. This is the business operation:
Class WSTEST.BO.PersonSaveBO Extends EnsLib.REST.Operation { Parameter INVOCATION = "Queue"; Method savePerson(pRequest As WSTEST.Object.PersonSaveRequest, Output pResponse As WSTEST.Object.PersonSaveResponse) As %Status { try { set person = ##class("WSTEST.Object.Person").%New() #dim request as %DynamicObject = {}.%FromJSON(pRequest.JSON) set person.PersonId = request.PersonId set person.Name = request.Name set person.LastName = request.LastName set person.Sex = request.Sex set person.Dob = request.Dob set tSC = person.%Save() set pResponse = ##class("WSTEST.Object.PersonSaveResponse").%New() set pResponse.PersonId = person.PersonId set pResponse.Name = person.Name set pResponse.LastName = person.LastName set pResponse.Sex = person.Sex set pResponse.Dob = person.Dob }catch{ Set tSC="Error saving the person" } Quit tSC } XData MessageMap { <MapItems> <MapItem MessageType="WSTEST.Object.PersonSaveRequest"> <Method>savePerson</Method> </MapItem> </MapItems> } }
go to post
UserTable and DataTable are related? I'm guessing that if Condition1 is the relation between the tables you would try this query:
SELECT COUNT(CASE WHEN data.a = "Condition1" then 1 ELSE NULL END) as "ValueA", COUNT(CASE WHEN data.b = "Condition2" then 1 ELSE NULL END) as "ValueB", COUNT(CASE WHEN data.c = "Condition3" then 1 ELSE NULL END) as "ValueC", user.id FROM UserTable user left join DataTable data on user.id = data.user
go to post
In my opinion the best approach is to create a BO for each database connection and invoke them from a BPL, getting the results and doing whatever you want.
go to post
Take a look at this article, it's exactly what you need:
https://community.intersystems.com/post/creating-rest-api-jwt-authentica...
go to post
InitialExpression is what you are looking for:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...
go to post
Fixed! Thank you @Anastasia Dyubaylo
!
go to post
Your would use JMeter to launch multiple calls in a row.
go to post
Do you mean the populate library?
https://docs.intersystems.com/csp/docbook/Doc.View.cls?FIND=CLASSES+%25L...
go to post
You can take a look to this article and the associated Open Exchange application: https://community.intersystems.com/post/creating-rest-service-iris
go to post
Are you using an aggregate function in your query? You can see in the documentation that %SQLCODE = 0 is returned for queries with aggregates as SUM or AVG because it's returning a row even with a null value of the aggregation function.
go to post
You can send the List by reference to the Python method, populate it inside the method and use the populated list from the objectscript who call it.
Something like this:
set listOfStrings = ##class("%Library.ListOfDataTypes").%New() do ..TestPython(listOfStrings) $$$TRACE("What a beautiful trace! There are "_listOfStrings.Count()_" element(s)") ... ... ClassMethod TestPython(ByRef listOfStrings As %List) [ Language = python ] { import iris listOfStrings.Insert("One") listOfStrings.Insert("Two") listOfStrings.Insert("Three") return 1 }
go to post
It would not be possible without your article!
go to post
It's true! Thank you @David Hockenbroch , I didn't realize that it was deprecated.
go to post
for x=1:1:rs.%ResultColumnCount{ //Get the value of each column set colValue = rs.%GetData(x) //Get the name of each column set colName = cols.GetAt(x).colName set colType = rs.GetColumnType(x)
Have you tried this code?
go to post
Yes, the i is the number of the column.
go to post
You can use the method GetColumnType, here is the url to the official documentation: https://docs.intersystems.com/iris20231/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25Library.ResultSet#GetColumnType
go to post
If you want something low-code you can create a Data Transformation with a HL7 message as source and as destination a class created ad-hoc with the structure that you need. Take a look to this example:
.png)
The destination in a class called RestTest.FirstRestObject with this definition:
Class RestTest.FirstRestObject Extends (%Persistent, %JSON.Adaptor, Ens.Util.MessageBodyMethods, Ens.Request) { /// Description Property Name As %String; /// Description Property LastName As %String; Property Childs As list Of NestedRestObject; }
This object has an SQL representation wich you could use later for your analysis: