Is your issue with memory (RAM) or disk usage?
- Log in to post comments
Is your issue with memory (RAM) or disk usage?
What we are seeing is that IRIS.WorkQueue globals are being defined for these calls but then the IRIS.WorkQueue is not being cleaned up and taking up large amounts of Memory.
You mention IRIS.WorkQueue globals consuming/using memory, but globals don't consume memory, they reside on disk.
I never seen any IRIS.WorkQueue globals, can you provide some detail?
What component is creating/using these globals?
Note that, if needed, you can map your classes and global for ALL namespaces currently defined and defined in the future, please check Mapping to All Namespaces documentation on how to use %ALL namespace mapping.
You need to check the Storage defined in your class, typically automatically generated when the class is first compiled.
For example I have created a ConfigUtils.ConfigSettingsTable class:
Class ConfigUtils.ConfigSettingsTable Extends%Persistent
{
Property Name As%String;
Storage Default
{
<Data name="ConfigSettingsTableDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
</Data>
<DataLocation>^ConfigUtils.ConfigSetti1ADBD</DataLocation>
<DefaultData>ConfigSettingsTableDefaultData</DefaultData>
<IdLocation>^ConfigUtils.ConfigSetti1ADBD</IdLocation>
<IndexLocation>^ConfigUtils.ConfigSetti1ADBI</IndexLocation>
<StreamLocation>^ConfigUtils.ConfigSetti1ADBS</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
In this case the globals used by my class are:
^ConfigUtils.ConfigSetti1ADBD (Data)
^ConfigUtils.ConfigSetti1ADBI (Indices)
^ConfigUtils.ConfigSetti1ADBS (Streams)
Instead of the 3 single globals, you can map ^ConfigUtils.ConfigSetti1ADB*
Note that you MUST check the actual global(s) name(s) used by your class.
If your class extends another persistent class, then the storage is defined in the superclass that define the extent (the first persistent class in class hierarchy).
In your production class you can implement the OnConfigChange() method.
From Class Reference:
This method is called when config changes to the Production or any item are saved from the portal
To send JSON with an HTTP POST request using InterSystems ObjectScript, you can use the %Net.HttpRequest class. Here is a sample code snippet demonstrating how to do this:
Create an HTTP request object.
Set the server URL and other necessary properties.
Write the JSON payload to the request’s entity body.
Send the POST request.
Here is an example:
Set Body={}
Set Body.Name="John Smith"Set Body.Address="ISC Dev community"Set Body.SomeProperty="Some content"Set Request = ##class(%Net.HttpRequest).%New()
Set Request.Server = "server"Set Request.Location = "location"Set Request.ContentType = "application/json"// Convert the object to JSON and write it to the request's entity bodyDo Body.%ToJSON(Request.EntityBody)
// Send the POST requestSet Status = Request.Post()This is the expected behavior as documented in Message Contents
Management Portal displays only the first 20000 characters of the message by default, this can be changed as documented in Changing the Character Limit for XML Messages in the Contents Tab
So, in your case for only EnsLib.HTTP.GenericMessage you can:
Set ^EnsPortal.Settings("All","MessageContents","OutputSizeLimit","EnsLib.HTTP.GenericMessage")=<whatever size you feel appropriate>
or for any class:
Set ^EnsPortal.Settings("All","MessageContents","OutputSizeLimit")=<whatever size you feel appropriate>
You may start checking this previous post:
Unable to store (or rather retrieve) OREF in globals - Trying to create a Singleton Class.
Ciao Marco,
it's difficult, virtually impossible, to tell where the problem is since your class A2Lib.FHIR.v400.Bundle is not part of IRIS.
If you cannot share your class, try to reproduce the problem in a smaller scale/class/xml and post it here.
Can you provide more details?
It seems you are using an FTP Outbound adapter, but EnsLib.FTP.OutboundAdapter does not have a property/setting called "Filename".
General answer would be: set the Filename property in you Business Operation code, there you can set it to whatever value you need.
Where are you seeing "DTL response = <ID scope='Message'>3</ID>"?
What you see is the "representation", the "export" of your XML enabled class rendered by...whatever you are using to view/display it, the quotes are not part of the content.
How are you using/consuming your target (DTL response)? Some XML (SOAP? REST?) message? If so, I believe that you won't find single quotes when you will use it.
This is just guessing, because you don't provide any context/detail.
Hi John,
for JSON the correct property parameter is %JSONFIELDNAME, documented here.
Adding %JSONFIELDNAME = "TheName" to the Name property in my sample above, the JSON result is:
{"Slide":[{"TheName":"Name1"},{"TheName":"Name2"},{"TheName":"Name3"}]}
Following your enthusiasm I implemented a little test 😁
Class Community.Array.Base Extends (%RegisteredObject, %XML.Adaptor, %JSON.Adaptor)
{
Property Slide As list Of Community.Array.Slide(XMLPROJECTION = "ELEMENT");ClassMethod test()
{
Set Base=##class(Community.Array.Base).%New()
For i=1:1:3 {
Set Slide=##class(Community.Array.Slide).%New()
Set Slide.Name="Name"_i
Do Base.Slide.Insert(Slide)
}
Do Base.XMLExport(,",indent")
Write !,"JSON: ",!
Do Base.%JSONExport()
}
}
Class Community.Array.Slide Extends (%RegisteredObject, %XML.Adaptor, %JSON.Adaptor)
{
Property Name As%String;
}The output is:
USER>Do ##class(Community.Array.Base).test()
<Base>
<Slide>
<Name>Name1</Name>
</Slide>
<Slide>
<Name>Name2</Name>
</Slide>
<Slide>
<Name>Name3</Name>
</Slide>
</Base>
JSON:
{"Slide":[{"Name":"Name1"},{"Name":"Name2"},{"Name":"Name3"}]}
Is this what you need?
We are not InterSystems support team, we are a Developer Community. 😊
You can download it from WRC (Worldwide Response Center) portal, the official InterSystems Support.
If your system is under support/maintenance you should have access to it.
If you your system is not covered by support/maintenance, you are not entitled to updates.
For testing purpose you may use/download IRIS Community Edition.
I've never done it but it should work, the correct syntax is MSH:4, not MSH-4.
Instead of using array use list, possibly with XMLPROJECTION = "ELEMENT", something like:
Property Slide As list Of Q.Interface.Fragment.IMS.Slide(XMLPROJECTION = "ELEMENT");
This way you get what you need.
What platform? Windows? Linux, what distro?
Many ways to do it, my way:
USER>Set input=25
USER>Set ln=10
USER>Set $Piece(Pad,"0",ln-$Length(input))="0"
USER>Set Padded=Pad_input
USER>Write
Pad="00000000"
Padded="0000000025"
input=25
ln=10Ciao Pietro,
exactly for that scenario IRIS provides the Work Queue Manager, I suggest you to start with the documentation:
Introduction to the Work Queue Manager (and following chapters)
Then if you have doubts, come back with more specific questions.
I'm trying to convert date - 2023-09-28T20:35:41Z to BST/GMT format.
Please note that BST and GMT are not "format" and (may) have different values.
From your answer to @Robert Cemper it seems you need to covert to BST value (not GMT) and to "yyyymmddhhmmss" format.
To answer your question, is BST your system local timezone?
If you don't like the default behavior, change it. 😊
You can change it system wide from Management Portal, System Administration -> Security -> System Security -> System-wide Security Parameters
There you can change "Inactive limit" to 0 (zero), this way accounts never expire.
You can also change it for any individual user accounts in Management Portal, System Administration -> Security -> Users -> (select the user)
There you can enable the checkbox "Account Never Expires".
Instead of the $SYSTEM "shortcut", use the actual full syntax:
JOB ##class(%SYSTEM.OBJ).Export("RICHS.int","c:\AAA\richh.rtn")
HS.FHIR.DTL.vR4.Model.Resource.Encounter is a %RegisteredObject, it cannot be used as interoperability request/response.
An interoperability response/request MUST be a persistent class.
To loop/list all files within a directory, possibly with wildcard filter, you can use the FileSet class query in %Library.File class, see documentation on Query Directories and Drives, List the Contents of a Directory.
You have a superclass with some logging method. Now every time the logging method is called from a child class it logs the name of the superclass instead of the Child class?
No
If so the issue is that $CLASSNAME returns the name of the class where the method is located not where a method is called from.
Wrong, it returns the class name where it is called from.
Your first sample method works just fine, no need for method generator.
I suggest you to make a quick test.
Why modify the code when you can modify the SQL Gateway definition to point to the production system?
This way the code is the same (dev/prod) but only the configuration change.
In your example "xxxxx" is the SQL Gateway name, change in management portal to point to the required environment.
I don't understand what you refer with "the name of the item which created it", can you provide an example of what you expect as result?
$CLASSNAME($THIS) returns the actual class name of $this instance, not a superclass or the class where is executed (possibly a superclass).
You can use the ImportFromString() method in EnsLib.HL7.Message class:
Set HL7Message=##class(EnsLib.HL7.Message).ImportFromString(StringHL7,.Status)
With "pre-compiled parameter" you mean a class parameter? Of what class?
You may user the $paramater function:
$parameter(classname,parametername)
I can see the function %GetParameter available in the WYSIWIG rule editor
There is no %GetParameter function available in default functions provided by IRIS, to list available functions you need to press the "fx" button, it looks you have typed in %GetParameter.
Maybe you have developed a custom function called %GetParameter?
What parameter are you looking for within an HL7 routing rule?