Home > Class Reference > HSLIB namespace > HS.FHIR.vDSTU2.Repository.Operations

HS.FHIR.vDSTU2.Repository.Operations

class HS.FHIR.vDSTU2.Repository.Operations extends Ens.BusinessOperation, HS.HC.Util.Trace.Helper

Property Inventory

Method Inventory

Parameters

parameter INVOCATION = Queue;
Inherited description: 2 modes: Queue, InProc
parameter QUERYIDPARAM = queryId;
parameter QUERYPAGEPARAM = page;
parameter SESSIONDLM = ||;
parameter SETTINGS = StorageClass,BundleProcessorClass,OperationProcessorClass,ResourceSchemaRoot,RepositoryUtilityClass,ApplySchematronValidation,DefaultSearchPageSize,MaxSearchPageSize,MaxSearchResults,MaxConditionalDeleteResults:Basic,SearchPostProcessorClass:Basic,LoadPatientClass:Basic,ReadPostProcessorClass:Basic,;
Inherited description: List of properties can be set as settings in the configuration file format is a comma separated list of property names

Properties

property ApplySchematronValidation as %Boolean [ InitialExpression = 0 ];
Enabling this validation requires that Java is already installed on the host operating system.

All incoming FHIR payloads are expected to undergo schema-based validation before being saved to the repository. This setting controls whether schematron-based validation is also applied to all FHIR payloads. Schematron-based validation comes with a significant performance cost. Therefore, it is recommended that this setting is enabled only for testing during implementation.
Property methods: ApplySchematronValidationDisplayToLogical(), ApplySchematronValidationGet(), ApplySchematronValidationIsValid(), ApplySchematronValidationLogicalToDisplay(), ApplySchematronValidationNormalize(), ApplySchematronValidationSet()
property ApplySessionIdToResources as %Boolean [ InitialExpression = 0 ];
This property is initially implemented as NOT a business host setting. If true (1), if a FHIR request includes session identification - in the form of the SessionApplication and SessionId properties of HS.Message.FHIR.Request - then for all interactions the session identifier value is passed to the storage class for the SessionIdentifier input parameter. If false (0), then only a blank value is passed to the storage class for the SessionIdentifier input parameter.
Property methods: ApplySessionIdToResourcesDisplayToLogical(), ApplySessionIdToResourcesGet(), ApplySessionIdToResourcesIsValid(), ApplySessionIdToResourcesLogicalToDisplay(), ApplySessionIdToResourcesNormalize(), ApplySessionIdToResourcesSet()
property BundleProcessorClass as %String (MAXLEN = 256) [ InitialExpression = "HS.FHIR.vDSTU2.Repository.BundleProcessor" ];
Class that provides the FHIR Bundle processing logic for this storage class. The BundleProcessorClass must implement the class method "ProcessBundle".
Property methods: BundleProcessorClassDisplayToLogical(), BundleProcessorClassGet(), BundleProcessorClassIsValid(), BundleProcessorClassLogicalToDisplay(), BundleProcessorClassLogicalToOdbc(), BundleProcessorClassNormalize(), BundleProcessorClassSet()
property CapabilityStatements as %Library.ArrayOfDataTypes;
Collection of Conformance/CapabilityStatement resources as %XML.XPATH.Document objects.
Property methods: CapabilityStatementsGet(), CapabilityStatementsGetObject(), CapabilityStatementsGetObjectId(), CapabilityStatementsGetSwizzled(), CapabilityStatementsIsEmpty(), CapabilityStatementsIsValid(), CapabilityStatementsNewObject(), CapabilityStatementsSet(), CapabilityStatementsSetObject(), CapabilityStatementsSetObjectId(), CapabilityStatementsUnSwizzle()
property DefaultSearchPageSize as %Integer [ InitialExpression = 10 ];
The search result page size to use when no _count parameter is specified on search.
Property methods: DefaultSearchPageSizeDisplayToLogical(), DefaultSearchPageSizeGet(), DefaultSearchPageSizeIsValid(), DefaultSearchPageSizeLogicalToDisplay(), DefaultSearchPageSizeNormalize(), DefaultSearchPageSizeSet()
property LoadPatientClass as %String (MAXLEN = 256);
Class that implements a class method named "LoadPatient". The input arguments to this class method are the current business host, a patient MPIID, a user session application name, and a user session id.

The intended purpose of this class method hook is to provide an opportunity for an application to examine the FHIR resource repository for the existence of data for a specified patient (indicated by an MPIID) and call application specific logic to load that patient's data into the repository if it is not already present. This hook is utilized for the search and read interactions.

For search interactions, the MPIID is derived using this logic:
- If the resource type on the search is not Patient, then use the search parameter value of the first found of any "patient" or "subject" search parameters.
- If the resource type on the search is Patient, and a search parameter "_id" is specified, then use that value.
- If the resource type on the search is Patient, and a search parameter "identifier" is specified, then if the system portion of the value matches that of the current affinity domain, then use the value part of that parameter value.
- Otherwise, if an MPIID is not derived by any of the above logic, and the resource type on the search request is a "shared" resource type (e.g., Practitioner, Organization, Medication) then the search is okay and will not invoke LoadPatientClass, since it has no need to do so.

For read interactions, the MPIID is derived from the resource id specified in the request message.

The signature of the class method must be:
ClassMethod LoadPatient(pHost As Ens.Host, pMPIID As %String, pSessionApplication As %String, pSessionID As %String) As %Status
Property methods: LoadPatientClassDisplayToLogical(), LoadPatientClassGet(), LoadPatientClassIsValid(), LoadPatientClassLogicalToDisplay(), LoadPatientClassLogicalToOdbc(), LoadPatientClassNormalize(), LoadPatientClassSet()
property MaxConditionalDeleteResults as %Integer [ InitialExpression = 3 ];
The maximum allowable number of resources to delete via conditional delete. If the conditional delete search finds more than this number of resources then the conditional delete as a whole is rejected with an HTTP 412 Precondition Failed error.
Property methods: MaxConditionalDeleteResultsDisplayToLogical(), MaxConditionalDeleteResultsGet(), MaxConditionalDeleteResultsIsValid(), MaxConditionalDeleteResultsLogicalToDisplay(), MaxConditionalDeleteResultsNormalize(), MaxConditionalDeleteResultsSet()
property MaxSearchPageSize as %Integer [ InitialExpression = 100 ];
The maximum search result page size to prevent excessive user specified page size.
Property methods: MaxSearchPageSizeDisplayToLogical(), MaxSearchPageSizeGet(), MaxSearchPageSizeIsValid(), MaxSearchPageSizeLogicalToDisplay(), MaxSearchPageSizeNormalize(), MaxSearchPageSizeSet()
property MaxSearchResults as %Integer [ InitialExpression = 20000 ];
The maximum number of resources that can be selected by a search before the server will simply respond to the query with an error. This number does not include resources included via an _include parameter, only resources selected by the actual search. This value does not affect the size of pages returned by a search. The reason for not setting this value arbitrarily high is because overly broad searches that select large numbers of resources take a lot of system resources to fulfill, and are probably more broad than the client actually needs. In this case, the client should narrow their search.
Property methods: MaxSearchResultsDisplayToLogical(), MaxSearchResultsGet(), MaxSearchResultsIsValid(), MaxSearchResultsLogicalToDisplay(), MaxSearchResultsNormalize(), MaxSearchResultsSet()
property OperationProcessorClass as %String (MAXLEN = 256) [ InitialExpression = "HS.FHIR.vDSTU2.Repository.OperationProcessor" ];
Class that provides the FHIR Operation processing logic for this storage class. The OperationProcessorClass must implement the class method "ProcessOperation".
Property methods: OperationProcessorClassDisplayToLogical(), OperationProcessorClassGet(), OperationProcessorClassIsValid(), OperationProcessorClassLogicalToDisplay(), OperationProcessorClassLogicalToOdbc(), OperationProcessorClassNormalize(), OperationProcessorClassSet()
property ReadPostProcessorClass as %String (MAXLEN = 256);
Class that implements a class method named "PostProcessRead". The inputs to this class method are:
- The current business host object
- A resource physical storage id
- A user session application name
- A user session id
- The resource type that was the target of the read

The output from this class method is a Boolean output parameter value that indicates whether or not the specified resource is okay to be read by the current user.

An example of post processing of the read would be the filtering due to consent rules or other custom logic.

The signature of the class method must be:
ClassMethod PostProcessRead(pHost As Ens.Host, pStorageId As %String, pSessionApplication As %String, pSessionID As %String, pResourceType As %String, ByRef pIsOK As %Boolean) As %Status

A failure return status will be treated as a 500 Internal Server error.

A successful return with a pIsOK return of 0 will be treated as 404 Not Found.
Property methods: ReadPostProcessorClassDisplayToLogical(), ReadPostProcessorClassGet(), ReadPostProcessorClassIsValid(), ReadPostProcessorClassLogicalToDisplay(), ReadPostProcessorClassLogicalToOdbc(), ReadPostProcessorClassNormalize(), ReadPostProcessorClassSet()
property RepositoryUtilityClass as %String (MAXLEN = 256) [ InitialExpression = "HS.FHIR.Utils" ];
Class to use for various utility methods needed for repository processing.
Property methods: RepositoryUtilityClassDisplayToLogical(), RepositoryUtilityClassGet(), RepositoryUtilityClassIsValid(), RepositoryUtilityClassLogicalToDisplay(), RepositoryUtilityClassLogicalToOdbc(), RepositoryUtilityClassNormalize(), RepositoryUtilityClassSet()
property ResourceSchemaRoot as %String (MAXLEN = 256) [ InitialExpression = "HS.FHIR.vDSTU2.Model.Resource" ];
Class package that is the root of all resource schemas for the desired data model.
Property methods: ResourceSchemaRootDisplayToLogical(), ResourceSchemaRootGet(), ResourceSchemaRootIsValid(), ResourceSchemaRootLogicalToDisplay(), ResourceSchemaRootLogicalToOdbc(), ResourceSchemaRootNormalize(), ResourceSchemaRootSet()
property SearchPostProcessorClass as %String (MAXLEN = 256);
Class that implements a class method named "PostProcessSearch". When this setting has a value, the PostProcessSearch class method from the specified class is invoked upon search requests and upon $everything requests.

PostProcessSearch is called after the physical storage ids are obtained for the resources that qualify for the search or $everything request. The inputs to this class method are:
- pResultSet : Result set as HS.Util.TransientTable object. Columns of pResultSet are:
- - ID : The physical storage id.
- - Deleted : Initialized as blank for all rows. Provides a means to mark rows for exclusion from the returned Bundle of resources. The search and $everything logic subsequent to the return from PostProcessSearch will ignore result set rows that have the Deleted column set to 1.
- - ResourceType : Resource type.
- - ResourceId : Blank. Is populated with resource id only if StorageClass is configured to do so.
- - Mode : "match" means the resource matched by the search criteria. "include" means the resource is present only because a "match" resource has a reference to it.
- - RefersTo : Comma-delimited list of storage ids to which the resource has references.
- pSessionApplication : User session application name.
- pSessionID : User session id.
- pResourceType : Resource type. Specified only for homogeneous FHIR search. Will be blank when called while processing a $everything request or search that uses the "_include" search parameter.

An example of post processing of the result set would be the filtering out of rows due to consent rules or other custom logic.

The signature of the class method must be:
ClassMethod PostProcessSearch(ByRef pResultSet As HS.Util.TransientTable, pSessionApplication As %String, pSessionID As %String, pResourceType As %String) As %Status
Property methods: SearchPostProcessorClassDisplayToLogical(), SearchPostProcessorClassGet(), SearchPostProcessorClassIsValid(), SearchPostProcessorClassLogicalToDisplay(), SearchPostProcessorClassLogicalToOdbc(), SearchPostProcessorClassNormalize(), SearchPostProcessorClassSet()
property StorageClass as %String (MAXLEN = 256) [ InitialExpression = "HS.FHIR.vDSTU2.Repository.Storage" ];
Class to use for handling direct interaction with the desired data and storage model.
Property methods: StorageClassDisplayToLogical(), StorageClassGet(), StorageClassIsValid(), StorageClassLogicalToDisplay(), StorageClassLogicalToOdbc(), StorageClassNormalize(), StorageClassSet()
property XSLT1Transformer as HS.Util.XSLTTransformer;
XSLT 1.0 transformer object, held for the life of the business operation session to help performance.
Property methods: XSLT1TransformerGet(), XSLT1TransformerGetSwizzled(), XSLT1TransformerIsValid(), XSLT1TransformerNewObject(), XSLT1TransformerSet()
property XSLT2Transformer as HS.Util.XSLTTransformer;
XSLT 2.0 transformer object, held for the life of the business operation session to help performance.
Property methods: XSLT2TransformerGet(), XSLT2TransformerGetSwizzled(), XSLT2TransformerIsValid(), XSLT2TransformerNewObject(), XSLT2TransformerSet()

Methods

method Conformance(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
method Create(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
method Delete(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
method DispatchRequest(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
method History(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
classmethod InitializeInteraction(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response, pRepositoryUtilityClass As %String, pApplySessionIdToResources As %Boolean, pSessionDLM As %String, pCapabilityStatements As %Library.ArrayOfDataTypes, ByRef pSessionIdentifier As %String, ByRef pCapabilityStatementDoc As %XML.XPATH.Document, ByRef pRequestStream, ByRef pResponseStream) as %Status [ Language = objectscript ]
InitializeInteraction does several common initialization tasks:
  • Creates a new FHIR response message object.
  • Creates a pointer to the FHIR request payload stream to use. It will point to either a QuickStream or to the request message Payload property.
  • If the request message is using a QuickStream, creates a QuickStream object for the response message to use.
  • Creates a pointer to the FHIR response payload stream to use. It will point to either a QuickStream or to the response message Payload property.
  • Validates the request message ContentType property.
  • Validates the request message user session information, if any.
  • Formulates a user session identifier from the the user session information, if any.
  • Retrieves the CapabilityStatement resource, if any, for the current end point.
  • method Operation(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
    method Read(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
    Note that both the "read" and "vread" interactions are handled by this method. The only difference between the requests is that vread specifies a version, whereas read does not and is understood to be requesting the current version.
    method Transaction(pRequest As HS.Message.FHIR.Request, Output pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
    Transaction processes a FHIR transaction interaction. The payload of a transaction interaction is a FHIR Bundle. The Bundle type may be transaction, batch, document, message, or collection. Processing of the Bundle varies based on type.
    method Update(pRequest As HS.Message.FHIR.Request, ByRef pResponse As HS.Message.FHIR.Response) as %Status [ Language = objectscript ]
    classmethod ValidateSessionIdentification(pUseSessionId As %Boolean, pSessionApplication As %String, pSessionId As %String, pIdentifierDelimiter As %String = "||", ByRef pSessionIdentifier As %String) as %Status [ Language = objectscript ]
    If we want to apply the session identification to the interactions with the FHIR storage layer then validate the inputs, compose the inputs into a single value, and return it.
    Inputs:
  • pUseSessionId : (required) Boolean value. True (1) means validate the input and return the composed identifier (pSessionIdentifier). False (0) means simply return null string for the composed identifier.
  • pSessionApplication : SessionApplication value. The use of SessionApplication and SessionId as two parts of session identification is based on the use of HS.Util.SessionData.Session and HS.FHIR.SessionData.FHIRSession as part of user session management.
  • pSessionId : SessionId value.
  • pIdentifierDelimiter : Delimiter string to separate the SessionApplication and SessionId values in pSessionIdentifier when those two values are not null.
    Output:
  • pSessionIdentifier : The composed session identifier to pass to the FHIR storage layer method calls.
  • Inherited Members

    Inherited Properties

    Inherited Methods

    Subclasses

    FeedbackOpens in a new window