Enrico Parisi · Jun 4, 2024 go to post

Evidently there is an issue where you reference MSH:9.2, without details of your rule definition is virtually impossible to guess where the problem is.

Enrico Parisi · Jun 3, 2024 go to post

I'd suggest to check the returned %Status from the %FromFHIRJSON() method.

Instead of:

do ..FHIRAdapter.%FromFHIRJSON(pRequest.Payload.Read(),.pmReqFHIRobj,"HS.FHIR.Model.Resource.Bundle")

Use:

set sc=..FHIRAdapter.%FromFHIRJSON(pRequest.Payload.Read(),.pmReqFHIRobj,"HS.FHIR.Model.Resource.Bundle")

Then check the status.

Enrico Parisi · Jun 1, 2024 go to post

What platform?

Using the IRIS Community Edition kit you can install only client components, including ODBC driver:

Enrico Parisi · May 30, 2024 go to post

You may have the option of using Extended Global References and in particular Bracket Syntax with References to Databases.

In your code you need to change all your global references from:
^SYS("CommonConfig")
to
^[%dbConfig]SYS("CommonConfig")

Then, for normal situation where you want the %ALL mapping to apply, just use:
set %dbConfig=""
When you need to explicitly map it to a BARCONFIG database, then:
set %dbConfig="^^:ds:BARCONFIG"

This way you can switch from default %ALL mapping to "explicit reference" within your code.
In the example I used a % local variable (%dbConfig) to hold the "database name reference" because it has a global scope, you may use a different approach like a property in some of your classes, a macro with some reference (in a global?) or...whatever is appropriate for your environment.

Enrico Parisi · May 28, 2024 go to post

Length 50

 

Spoiler

ClassMethod Count(i As %String) As %Integer
{
	f p=1:1:$l(i){i ")]}D>"[$e(i,p),$i(c)} q +$g(c)
}
Enrico Parisi · May 28, 2024 go to post

Length: 77

 

Spoiler

ClassMethod Count(i As %String) As %Integer
{
	s i=$tr(i,":;8B=-^co~","") f p=1:1:$l(i){i ")]}D>"[$e(i,p),$i(c)} q +$g(c)
}
Enrico Parisi · May 27, 2024 go to post

I'm no Python expert at all, but it looks like user and password are missing. (uid and pwd??)

Enrico Parisi · May 24, 2024 go to post

From the error you get I suspect you are sending your HS.Message.PatientFetchRequestAsync to the wrong service/endpoint in the remote server.

How are you sending your request and how the operation is configured?

Enrico Parisi · May 23, 2024 go to post

irislib database is mounted as readonly database, so journal is disabled.

irislocaldata database contains items used internally by IRIS and journal is disabled by design.

This is standard/normal in any IRIS installation.

I doubt your issue is caused by these journal being disabled and I would not tamper default/standard journal configuration for system databases.

Enrico Parisi · May 23, 2024 go to post

The class HS.FHIR.DTL.vR4.Model.Resource.Bundle is a registered object and cannot be used in a persistent class property.

Enrico Parisi · May 23, 2024 go to post

The first parameter (Lookup Table Name) of Exists function must be quoted: Exists("HologicProcedureFilter",.....)

If you want, you can switch to the old zen based rule editor, in the upper right of the page click on the user icon and select Open in Zen rule editor:

Note that it will open the rule in new tab, leaving the old tab open, make sure you use only one tab to edit the rule!

Enrico Parisi · May 23, 2024 go to post

A production/ensemble message, a request in your case, MUST be a %Persistent class.

BundleObject is a %DynamicObject and is not (does not extend) a %Presistent class.

Enrico Parisi · May 23, 2024 go to post

In your messages.log do you see entries like:

[Generic.Event] VSS Writer: OnFreeze
......
......
[Generic.Event] VSS Writer: OnThaw

This is what is logged when a VSS snapshot is performed in windows.

In "well behaved Windows server" this two messages are less that a minute apart

Enrico Parisi · May 23, 2024 go to post

VSS in Windows is Volume Shadow Copy Service that (to simplify) provide snapshots for the disk storage.

IRIS now support VSS for external backups.

Are you performing a backup when this happen?

I suggest to check the Windows event log for issues with VSS.
 

Enrico Parisi · May 22, 2024 go to post

Assuming response1 json ALWAYS contain a single entry, then:

    ; import stream into Dynamic Object
    Set Response1=##class(%DynamicObject).%FromJSON(response1.informesAutorizadosRangoFechas)
    Set Response2=##class(%DynamicObject).%FromJSON(response2.informesAutorizadosRangoFechas)
    
    Write "Response1 has ",Response1.entry.%Size()," entries",!
    Write "Response2 has ",Response2.entry.%Size()," entries",!

    ; loop all the entries in Response2
    Set EntryIter=Response2.entry.%GetIterator()
    While EntryIter.%GetNext(.EntryKey, .Entry) {
        Write "Response2, entry ",EntryKey+1," has ",Entry.resource.%Size()," resources",!

        ; loop all resources within Entry
        Set ResourceIter=Entry.resource.%GetIterator()
        While ResourceIter.%GetNext(.ResourceKey, .Resource) {

            ; add resource from Result2 in first entry of Result1
            Do Response1.entry.%Get(0).resource.%Push(Resource)  
        }   
    }
    Write "Merged Response1 has ",Response1.entry.%Get(0).resource.%Size()," resources",!

Using your samples the output is:

Response1 has 1 entries
Response2 has 7 entries
Response2, entry 1 has 1 resources
Response2, entry 2 has 1 resources
Response2, entry 3 has 1 resources
Response2, entry 4 has 1 resources
Response2, entry 5 has 1 resources
Response2, entry 6 has 1 resources
Response2, entry 7 has 1 resources
Merged Response1 has 8 resources

The resulting json is different than your manual merge.......

Enrico Parisi · May 22, 2024 go to post

So, the merged json should contain a single entry with all the resources inside this single entry?

Does the response1 json ALWAYS contain a single entry? (as in your example)

Enrico Parisi · May 21, 2024 go to post

What do you refer to with "frequency of transaction"?

Are you using a Business Process with an adapter?

Usually transactios refer to database operations (like data insert, update).

Enrico Parisi · May 21, 2024 go to post

Do you need to join/merge resources or entries?

Your manual merged json is a mix of merging resources and entries.

The resource with "id": "35043996"  is merged in the first entry of response1, the rest are merged as additional entries of response1.

response 1 has 1 entry
response2 has 7 entries
merged json has 7 entries

What's the required logic?

Enrico Parisi · May 17, 2024 go to post

We had this same issue (missing support for SNI) long time ago, I think using healthshare based on cache version 2015.2.

I'm afraid you need to add this to the (possibly very long) list of good reasons to upgrade.

Enrico Parisi · May 17, 2024 go to post

Please note that is not needed (at all!) that the file should exists, look at my code sample where c:\temp\streamtest.txt did not existed and is created.

Enrico Parisi · May 17, 2024 go to post

In %Stream.* classes setting the Filename property corresponds to calling the LinkToFile() method (see FilenameSet() method).
From LinkToFile() documentation:

The method as its name suggests creates a LINK to an EXISTING file.
....
Also note that if there is currently some temporary data in the old stream when the LinkToFile is called this temporary data will be removed before the stream is linked to this filename.

I think you have two options:

  1. set Filename BEFORE writing to the stream
  2. when you need to save a stream to a specific file, create a new file stream and use CopyFrom() method to copy existing data

For option 2 here is a sample (using %Stream.TmpBinary for the temporary stream):

set tStream = ##class(%Stream.TmpBinary).%New()
do tStream.Write("whatever stream contains")
set finalStream = ##class(%Stream.FileBinary).%New()
set finalStream.Filename="c:\temp\streamtest.txt"
do finalStream.CopyFrom(tStream)
write finalStream.%Save(),!
Enrico Parisi · May 17, 2024 go to post

Can you please post a sample code of what you are doing?

In general, setting the Filename property or using LinkToFile allow you to specify where your stream is stored. And it does work, therefore without the code you use it's hard to guess where your issue is.

Enrico Parisi · May 16, 2024 go to post

I noticed that some of the functions in your system are not IRIS built-in function but, evidently, are custom functions implemented in your system, as documented here.

To search and find the class and code that implement this functions you may search classes that extends the Ens.Rule.FunctionSet class using the class reference in your system/server, not in the documentation website.

Enrico Parisi · May 13, 2024 go to post

In order to use LOAD DATA you need to check that the Java external language gateway is properly configured and working.

Enrico Parisi · May 11, 2024 go to post

I'd implement a custom datatype, something like:

Class Community.dt.IntJSON Extends %Integer
{

Parameter JSONTYPE = "string";
ClassMethod JSONToLogical(%val As %String) As %Integer [ CodeMode = expression, ServerOnly = 1 ]
{
..DisplayToLogical(%val)
}

ClassMethod LogicalToJSON(%val As %Integer) As %String [ CodeMode = expression, ServerOnly = 1 ]
{
..LogicalToDisplay(%val)
}

}

Then in your class:

Class Community.json.TestDT Extends (%RegisteredObject, %JSON.Adaptor)
{

Property something As Community.dt.IntJSON(DISPLAYLIST = ",OK,Error,Warning", VALUELIST = ",0,1,2") [ InitialExpression = 0 ];

ClassMethod RunMe()
{
      set obj = ..%New()
      set obj.something = 2
      do obj.%JSONExportToString(.string)
      write "JSON : " _ string,!

      write "Content  : " _ ..somethingLogicalToDisplay(obj.something),!!

      set obj2=..%New()
      do obj2.%JSONImport(string)
      write "Imported something value: ",obj2.something,!
}

}

Result:

EPTEST>d ##class(Community.json.TestDT).RunMe()
JSON : {"something":"Warning"}
Content  : Warning
 
Imported something value: 2
Enrico Parisi · May 8, 2024 go to post

I manage systems that use IIS since more than 15 years and never experienced performance issues.

For a code that takes 15ms having service/call that takes 40ms total round trip to me is way too much (that's 25ms overhead !!).
We have SOAP services that respond in 10ms (local subnet, round trip measured from the caller/client).

I don't recall any special configuration in IIS.

What's the configuration of the Web/CSP Gateway?

Enrico Parisi · May 7, 2024 go to post

@Shane Nowack , in the first table in your post, in the left column/list this two items:

SQL Best Practices Doc
Best Practices for Defining SQL Optimized Tables Through Persistent Classes

both link the same documentation page, is this correct or maybe one link is not correct?