Cristiano Silva · May 2, 2023 go to post

Hi @Scott Roth 

Like the @Jeffrey Drumm told, the problem are because the Database ENSLIB are Read Only. The error occur because you are using the Macros $$$FormatText and $$$Text.

When you use $$$Text macro, the macro try to create a entry in the global ^IRIS.Msg. The global ^IRIS.Msg is mapped from ENSLIB database that is by default Read Only. See imagem bellow that the ^IRIS.Msg("ENSEMBLE") is mapped, but the root global ^IRIS.Msg is mapped to the namespace data base.

To solve the compilation error do change calls to $$$Text("some text", "Ensemble") for some think like $$$Text("some text", "MyDomain")

Click in Replace all

Then compile:

For more information see the documentation String Localization and Message Dictionaries

Regrads.

Cristiano Silva · May 3, 2023 go to post

Hi @Raja Mohan and @Haitem El Aaouani 

Bellow a sample method

ClassMethod CreatProdution(package As%String = "test", name As%String = "AutoCreatedProduction") As%Status
{
  #Dim produtionClassName As%String = package _ "." _ name
  If ('$ZName(produtionClasName, 4))
  {
  Return$System.Status.Error(5001, "Invalid Production package or name.")
  }
  // Create empty production class definition#Dim productionDefinition As%Dictionary.ClassDefinition = ##Class(%Dictionary.ClassDefinition).%New()
  //Set productionDefinition.Name         = produtionClassName
  Set productionDefinition.Super        = "Ens.Production"Set productionDefinition.ClassVersion = 25//// Create the XData definition#Dim xdataDefinition As%Dictionary.XDataDefinition = ##Class(%Dictionary.XDataDefinition).%New()
  //Set xdataDefinition.Name = "ProductionDefinition"//Do xdataDefinition.Data.WriteLine("<Production Name="""produtionClassName"""/>")
  //// Insert XData Definition into Production DefinitionDo productionDefinition.XDatas.Insert(xdataDefinition)
  //#Dim statusCode As%Status = productionDefinition.%Save()
  //If ($System.Status.IsError(statusCode))
  {
  Return statusCode
  }
  // Compile the production classSet statusCode = $System.OBJ.Compile(produtionClassName,"k-d")
  If ($System.Status.IsError(%Dictionary.XDataDefinition))
  {
  Return statusCode
  }
  // fill in production:#Dim production As Ens.Config.Production = ##Class(Ens.Config.Production).%OpenId(produtionClassName)
  If ('$IsObject(production))
  {
  Return$System.Status.Error(5001, "Unable to open new production: " _ produtionClassName)
  }
  Set production.Name           = produtionClassName
  Set production.ActorPoolSize  = 2//// save production (and item), update production class and account for Source ControlReturn##Class(EnsPortal.Template.prodConfigSCPage).CallProductionUpdateAndSaveToClass(production,"","SaveProduction")
}
Cristiano Silva · May 4, 2023 go to post

Create a two new classes that inherit from the "Big Class", and Override the methods that you need in each specific class. When finished remove the inheritance.

Cristiano Silva · May 5, 2023 go to post

@Humza Arshad 

You can create a REST API/ SOAP API, or any other kind of protocol/technology, to get authentication, retrieve and send data to IRIS.

See the documentation: 

REST

SOAP

These other two link are two Open Exchange apllication to create Rest Services and Form UI.

RESTForms2

RESTFormsUI2

Search in the Leraning Portal for some course that help you.

Best Regards.

Cristiano Silva · May 12, 2023 go to post

Hi @Christine Nyamu 

Use $Piece function to get the value of a delimited string. In you specific case:

Set value = $Piece(obxValue, "<>", 2)

I assumed that the variable obxValue was set before in the code.

Note if the in the obx segment the value change the order like, "TESTED POSITIVE FOR ANEMIA<>BLOOD WORK WAS DONE<>TESTED NEGATIVE FOR HEPATITIS", the above sample code will fail

Cristiano Silva · May 26, 2023 go to post

I was accessing the Open Exchange portal in a remote machine on Finland. When I access in my local machine in Brazil works fine.

Cristiano Silva · Jul 27, 2023 go to post

Hi John the diference between the operators &, && are

https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=GCOS_operators#GCOS_operators_logicalcomp_list

And (& or &&)

And tests whether both its operands have a truth value of TRUE (1). If both operands are TRUE (that is, have nonzero values when evaluated numerically), ObjectScript produces a value of TRUE (1). Otherwise, ObjectScript produces a value of FALSE (0).

There are two forms to And:

  • The & operator evaluates both operands and returns a value of FALSE (0) if either operand evaluates to a value of zero. Otherwise it returns a value of TRUE (1).
  • The && operator evaluates the left operand and returns a value of FALSE (0) if it evaluates to a value of zero. Only if the left operand is nonzero does the && operator then evaluate the right operand. It returns a value of FALSE (0) if the right operand evaluates to a value of zero. Otherwise it returns a value of TRUE (1).

The following examples evaluate two nonzero-valued operands as TRUE and produces a value of TRUE (1).

Try to eclousere all expression in parentehsis:

(
    (
        (
            (
                HL7.{MSH:SendingApplication.NamespaceID}="Epic_Cupid"
            ) 
            && 
            (
                HL7.{ORCgrp(1).ORC:OrderControl} IN "NW,CA"
            )
        )
    ) 
    &&
    (
        (
            (
                HL7.{PIDgrp.PV1grp.PV1:AssignedPatientLocation(1).Facility.NamespaceID} NotIn "105,205"
            )
            &&
            (
                HL7.{ORCgrp(1).OBRuniongrp.OBRunion.OBR:UniversalServiceIdentifier.Identifier} NotIn "CATH01,EP22"
            )
        )
    )
) 

The operator & in Business Rule e Editor is string concatenation operator. Take care.

https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?KEY=EBUS_rule#EBUS_ruleset_editor_expression_operators

Cristiano Silva · Aug 2, 2023 go to post

If you are talking about HL7 messages, you can use the property FullSize in a SQL statement:

SELECTIDFROM EnsLib_HL7.Message WHERE FullSize > ?

Take care because this is a calulated proprety and doesn't have a index.

Cristiano Silva · Oct 16, 2023 go to post

Hello Adrian,

I think the problem is that you are concatenate a String with a Stream?

"DOC^Application^PDF^Base64^" _ target.{PIDgrpgrp(1).ORCgrp(1).OBXgrp(1).OBX:ObservationValue(1)}

You need to create a new Stream, call method write of the new Stream with the value "DOC^Application^PDF^Base64", after append the old Stream to the new one.

Cristiano Silva · Nov 21, 2023 go to post

Hi Yakov,

You can set in the Connection String (JDBC) or using the adapter method SetConnectAttr

Check the database documentation to see the rigth values.

Cristiano Silva · Nov 26, 2023 go to post

Hi Nimisha.

Could you give us more detailed information of the scenario? Your doubt is about loop over the resulset? Or how to retrieve value from resultset and put into a SQL Query?

Cristiano Silva · Dec 6, 2023 go to post

Hi Daniel,

Maybe you can download the IRIS Community version, and use the code of Ens.Job and Ens.Queue  classes how a reference, and implement your own version of queue processing with $System.Event. 

Cristiano Silva · Jan 15, 2024 go to post

Hi William,

In SMP go to Interoperability->Interoperate->ASTM->ASTM Schemas Structures

Via Studio go to File->OpenFile, filter by AST Document "*.ast"

Cristiano Silva · Apr 18, 2024 go to post

@maxime keltsma 

You can traverse the entire global with a loop and $Order function.

A simple routine to traverse your global can be:

Teste
    Set^DataTest = 3Set^DataTest(1) = $lb("","1329","JMMK-G1D6")
    Set^DataTest(2) = $lb("","1516","AMEV-GVPF")
    Set^DataTest(3) = $lb("","2333","4QC6-4HW3")
    Set key = ""// Print the header fildsWrite"Reference", $Char(9), "Code"	, !	
    For   
    {
        // first parameter is global and key, // second parameter opredr to travers globa. 1 = ascending subscript order (the default) or –1 = descending// third is target that receives the value if the key is definedSet key = $Order(^DataTest(key),  1, data)
        If (key = "")
        {
            Quit// Exit for loop
        }
        Set reference = $ListGet(data, 2)
        Set code = $ListGet(data, 3)
        //Write reference, $Char(9), code, !
        
    }

Output o execution:

> Do Teste^Teste
> Reference Code
> 1329 JMMK-G1D6
> 1516 AMEV-GVPF
> 2333 4QC6-4HW3

See Using Globals Object Script Tutorial , $Order Function for more examples e details.

Cristiano Silva · Apr 24, 2024 go to post

Hi @Nezla 

If you install Ensemble before install ISS, you need to setup the CSPModule manually in IIS. If ISS is intalled before install Enemble, the Ensemble install setup the CSP Module on IIS for you.
For more information read the documentation: 

Web Servers for Microsoft Windows | CSP Gateway Configuration Guide | Caché & Ensemble 2018.1.4 – 2018.1.9 (intersystems.com)

Watch the Webinar Configuring IIS for Better Performance and Security with (intersystems.com.

Cristiano Silva · Apr 24, 2024 go to post

Hi @David Hockenbroch 

Cache/Ensemble they do the configuration. See the screenshot below. I just did a new installation of Ensemble. The highlighted columns are the file update time.

Cristiano Silva · May 7, 2024 go to post

Thanks @Vic Sun 


I showed this documentation and others to those responsible for the Infrastructure area, but they told me that it doesn't make sense to use Standard Huge Pages, as we lose the benefit of hyperconvergence. I will ask the WRC  opinion on this topic.

Hi @Scott Roth 

You can do in the BS, but in my opinion use the common approach sending a message from the BS to a BO. In the BO you insert the data into internal table, with this approach you have how to trace data if some error occur.