Hello @Yone Moreno
Try removing the = after $system.Encryption.Base64Encode(). You can also check the
do ##Class(%OAuth2.JWT).ObjectToJWT(.JOSE,body,,,.jwt)
- Log in to post comments
Hello @Yone Moreno
Try removing the = after $system.Encryption.Base64Encode(). You can also check the
do ##Class(%OAuth2.JWT).ObjectToJWT(.JOSE,body,,,.jwt)
.png)
Can you try the above steps.
The object doesn't throw the <MAXSTRING> error. However variable do. If your serialization the JSON and stored into variable. If it's reaches the maximum string it will throw an error.
You need to select the BodiesToo option(whenever the message header details the body also deleted) to delete the messages from the database
Now the documentation are online based. You can access the documentation https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls
Open documentation from iris lancher also connect to the https://docs.intersystems.com/iris20232/csp/docbook/DocBook.UI.Page.cls…;
You can change the iris20232 to iris20222 to get the 2022.2 version documentation.
You can use %SetStatusCode from the %REST.Impl class definition. This class have additional methods available to set the response related stuffs like below
do ##class(%REST.Impl).%SetStatusCode(..#HTTP401UNAUTHORIZED)$this is actually return the current class name instead of object if you're using inside ClassMethod. On the other hand if you use $this (It actually holds the object) So, it returns object inside Method . Check the below sample code and output
ClassMethod thistest()
{
write "$this inside ClassMethod: ",$this,!
write "$this object check ClassMethod: ",$ISOBJECT($this),!
set obj = ##class(User.NewClass1)..%New()
do obj.thistest1()
}
Method thistest1()
{
write "$this Method: ",$this,!
write "$this object check Method: ",$ISOBJECT($this),!
}LEARNING>d ##class(User.NewClass1).thistest() $this inside ClassMethod: User.NewClass1 $this object check ClassMethod: 0 $this Method: 1@User.NewClass1 $this object check Method: 1
So. If you're trying to get the property value inside classmethod by using $this in $PROPERTY($THIS,propertyName) It throws <NO CURRENT OBJECT> error . so you should use object for $PROPERTY or use this retrieval $PROPERTY($THIS,propertyName) inside method.
The lock is belongs from different process(9908) and you're trying to terminate via different process(10376) not is not possible. You can verify and terminate the 9908 in process (System Operation>Process) if no longer required for prevent multiple locks set again and click remove all locks for process and remove it.
LEARNING>w $test 0 LEARNING>lock +^test:0 LEARNING>w $test 1 LEARNING>
Basically. The tcommiit will commit the current open transaction. Lock -^global (decremental lock ) is used to release the incremental lock( lock +^global) so everytime if you do incremental lock then you should decrement the lock) by using lock -^gbl syntax
Argumentless lock is release all the locks in the process. So this is not highly recommend in code. And incremental locks are highly recommend for use.
I see you're locking the global
tstart
if staten["IUDX" {
lock +^IudexNqlInByte(1):0
if $test{
set IudexNqlInByte(1,inc)=obj.%Id()
lock -^IudexNqlInByte(1)
}
}
else {
lock +^ToshibaNQLIn(1):0
if $test {
set ^ToshibaNQLIn(1,inc)=obj.%Id()
lock -^ToshibaNQLIn(1)
}
}
tcommitHello @Robert Steed
Is the terminating process via SMP (System Operation>Process>SelectProcess Detail>Terminate) isn't working?
Hello Yone,
Why don't you use %Stream.GlobalCharacter stream object to store Long string instead of %String property. You can extend your class with %JSON.Adaptor and create a JSON object and directly import with your contents like below.
ClassMethod Import()
{
set json=[{"ID_SICH":"121212","FECHA_DERIVACION":123,"MEDICO_PETICIONARIO":(tResponse.Data)}]
set obj = ##Class(Mensajes.Response.Radiologia.CConcertados.BusquedaOrdenesNEGRINResponse).%New()
set stt= o.%JSONImport(json)
if $$$ISERR(stt) write $SYSTEM.OBJ.DisplayError(stt)
set stt= obj.%Save()
if $$$ISERR(stt) write $SYSTEM.OBJ.DisplayError(stt)
}
Hello @Chad Severtson
We have streams to store it for long time. So, As per the documentation. I was thinking to to create a separate database to move the existing streams, create a new streams and maintain it accordingly. Can you add bit more details about this the instance wide consideration rather than only a database level consideration because allocating buffers of 32KB reserves a portion of the memory for blocks of that sizeHow much memory is allocated and how to calculate it
Thanks!
Hello @Kari Vatjus-Anttila
This was a nice implementation for securing the individual REST calls. However, Will loose the benefits of built JWT Authentication for web application(from 2022 version). Maintaining two separate web applications for secure and unsecured seems useful.
Thanks @Dmitry Maslennikov
It works. I thought "Initial (25% of physical memory)" of the global buffer will also applicable for other block size. However It's not that kind. There is default 0 for those blocks. So, it's mandatory to make it specific amount.
Once I made the changes it works!
Hello @Dmitry Maslennikov
I had enabled the options and restarted the iris before creating the database. Still I got the error
Thank you for the samples. Now it works fine and I get JWT. I have seen this parameters in some other post in community. What is the exact use of these parameters dispatcher class.
Parameter TokenLoginEndpoint = "login"; Parameter TokenLogoutEndpoint = "logout"; Parameter TokenRevokeEndpoint = "revoke"; Parameter TokenRefreshEndpoint = "refresh";
Yes. my web application is /api and invoked this http://localhost:52774/api/login
Hello @Luis Angel Pérez Ramos
I've enabled and configured JWT in my Web application. I'm trying to call the /login method from post man with body of contents {"user":"{YOURUSER}", "password":"{YOURPASSWORD}"} but I got 404 not found error. Did I anything missed/required.
As you mentioned
With this configuration we will not need anything else to start using this authentication mode in our web applications.
However This is for clarification
Do I need to write a custom login method or existing is enough?
Do I need to include /login, /logout etc.. endpoints in urlmap?
.png)
Hello @Yone Moreno
Just a thought. Convert the HL7 message into SDA. Create a clone class like SDA with extends of Ens.Request. Create a instance of the class and import the String into the object and finally store it like below.
ClassMethod HL7ToCustomEnsReq()
{
#dim xml As %Stream.GlobalCharacter
set hl7 = ##class(EnsLib.HL7.Message).%New()
set tSC = ##class(HS.Gateway.HL7.HL7ToSDA3).GetSDA(hl7,.xml)
$$$ThrowOnError(tSC)
set reqObj = ##class(Mensajes.Request.ConsentimientoInformado.HUC.ORUHL725OutRequest).%New()
do reqObj.XMLImportSDAString(xml.Read())
set tSC = reqObj.%Save()
$$$ThrowOnError(tSC)
}
Thanks you @Guillaume Rongier !
Hopefully this will be helpful
Hello @Patrick Jamieson
Thank you! for the suggestion. definitely will try 2023.3 version
As per the documentation The I had raised the same question Currently, InterSystems products do not provide the ability to validate a resource against a profile. Validation is limited to the base FHIR specification.
.png)
Thanks @Luis Angel Pérez Ramos for pointing the documentation
Thanks for pointing! I thought it's implemented. So, As of now Intersystems FHIR server doesn't have the ability to validate the resource against the profile. Then FHIR Client system need to take care of it
Hello @Luis Angel Pérez Ramos
Of course, I had added the profile information in the meta data element. like below.
{
"resourceType":"Patient",
"meta"{
"profile":[
"http://eample.org/fhir/StructureDefinition/TutorialPatient"
]
},
"name":[
{
"use":"official",
"given":[
"test"
],
"family":"Patient"
}
]
}Hello
You can send you're POST/GET URL's as part of the method itself. Refer the below sample codes
Set httprequest=##class(%Net.HttpRequest).%New()
Set httpRequest.ContentType = "application/json"
Set httpRequest.Server = "renderProjectName.onrender.com"
set httprequest.https=1 ;add this additional set if you're going to make it as a HTTPS call
set httprequest.SSLConfiguration = "your ssl certificate" ; include the certificate as well for HTTPS call's
Do httprequest.Post("/")As for As I see there is no option to export the Business partners along with production export. Even there is no option with with deployable settings and config.Item definition as well. The Business partner details are stored in Ens. Config.BusinessPartner.
So, I hope you need to manually export your global's and import in to the another instance.
.png)
Basically %JSONExport() API method only works if you're class definition extends with %JSON.Adaptor. class You can even use the below to write your JSON response in UI
do ##Class(%REST.Impl).%WriteResponse(response)hello @Yone Moreno
You don't need to include the query params in the Url. That's is basically available in %request CSP object. You can take the query parameter values like below. And :studies represents it's a dynamic URL parameter value.
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/:studies" Method="GET" Call="consultarEstudiosDatosPaciente"/>
</Routes>
}
ClassMethod consultarEstudiosDatosPaciente(studies As %String="") As %Status
{
set patientId = %request.Get("patientId")
/// or
set patientId = %request.Data("patientId", 1)
return $$$OK
}