go to post Ariel Glikman · Aug 27 Hi Eyal,The idea is to implement a custom FHIR operation as per the docs.Once you set up the pre-installation subclassing (this is where you override those 3 classes: HS.FHIRServer.Storage.JsonAdvSQL.Interactions, HS.FHIRServer.Storage.JsonAdvSQL.InteractionsStrategy, HS.FHIRServer.Storage.JsonAdvSQL.RepoManager) You can create a custom operations class (make sure you reference it in your Interactions class): Class Testing.Internal.Interactions Extends HS.FHIRServer.Storage.JsonAdvSQL.Interactions { Parameter OperationHandlerClass As %String = "Testing.Internal.myOperations"; } Class Testing.Internal.myOperations Extends HS.FHIRServer.Storage.JsonAdvSQL.BuiltInOperations { ClassMethod FHIRTypeOpCustompatienteverything(pService As HS.FHIRServer.API.Service, pRequest As HS.FHIRServer.API.Data.Request, pResponse As HS.FHIRServer.API.Data.Response) { if pRequest.Type="Patient" { if (pRequest.QueryString '= ""){ Set fhirService = ##class(HS.FHIRServer.Service).EnsureInstance("/api/internal/test1") //fhir server endpoint Set request = ##class(HS.FHIRServer.API.Data.Request).%New() Set request.RequestPath = "/Patient" set request.QueryString = pRequest.QueryString Set request.RequestMethod = "GET" Do fhirService.DispatchRequest(request, .response) Set json = response.Json If json.%Get("entry") '="" { Set iter = json.entry.%GetIterator() While iter.%GetNext(.key, .value) { //for each patient entry request an everything Set everythingRequest = ##class(HS.FHIRServer.API.Data.Request).%New() Set everythingRequest.RequestPath = "/Patient/"_value.resource.id_"/$everything" Set everythingRequest.RequestMethod = "GET" Write ! Write "Patient ID: ", value.resource.id, ! Do fhirService.DispatchRequest(everythingRequest, .everythingResponse) Write "Everything: ", !, everythingResponse.Json.%ToJSON() } } } else{ Set pResponse.Json = ##class(HS.FHIRServer.Util.Outcome).Create("information", "No Query String", "informational") } } set pResponse.Status = 200 } ClassMethod AddSupportedOperations(pMap As %DynamicObject) { do ##super(pMap) Do pMap.%Set("patient-identifiers-everything", "http://hl7.org/fhir/OperationDefinition/patient-identifiers-everything") } } Hope this helps. Ari
go to post Ariel Glikman · Feb 3 Excellent step by step that so many of our customers have been asking about since the deprecation of SAM - thank you Stav!
go to post Ariel Glikman · Jun 27, 2023 Hi Gautam, As it stands your class is not an object class (https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...). In order to instantiate an object, make sure the class inherits from %RegisteredObject or a subclass of it. We do this in ObjectScript as follows: Class Sample.Header Extends %RegisteredObject { /// your code }