Here's a fun test to see how well you know ObjectScript.
What will each of the following statements output?
InterSystems Caché is a multi-model DBMS and application server. See more details here.
Here's a fun test to see how well you know ObjectScript.
What will each of the following statements output?
This is the class which I want to test.
Class GSK.MyTestUnit Extends %RegisteredObject {
ClassMethod Add(num1 As %Integer, num2 As %Integer) { s res=num1+num2 q res } }
This is my testing class.
Class GSK.TestingClass Extends %UnitTest.TestCase {
Method test() { Do $$$AssertEquals(##class(GSK.MyTestUnit).Add(3,8),41, "Test Add(2,2)=4 passed ") do $$$AssertNotEquals(##class(GSK.MyTestUnit).Add(3,8),11,"pass/fail") }
}
The test cases are passed even though they should fail.
s ^UnitTestRoot="C:\TestSuite1" d ##class(%UnitTest.Manager).
I am trying to use %INLIST in SQL query using a cursor and the query fails to return results. It appears that the variable I use against %INLIST returns an empty string. All the examples I have seen use result sets and build the query as a string. Is it possible to use %INLIST in a cursor-based query?
Did you know that Caché (and now InterSystems IRIS) has available parser for ObjectScript ?
Well, technically, lexer. It hides under the name of %SyntaxColor class. This class provides API to the DLL used by Studio to do syntax highlighting. As a result if works only under Windows.
I bet that not everyone familiar with InterSystems Caché knows about Studio extensions for working with the source code. You can actually use the Studio to create your own type of source code, compile it into interpretable (INT) and object code, and sometimes even add code completion support. That is, theoretically, you can make the Studio support any programming language that will be executed by the DBMS just as well as Caché ObjectScript. In this article, I will give you a simple example of writing programs in Caché Studio using a language that resembles JavaScript. If you are interested, please read along.
I'm using this code to read a file, line by line.
Most lines are shorter than 32767 symbols, but some are longer. No line is longer than $$$MaxStringLength and long strings are enabled.
Is there a param to Open/Read command I can pass to increase Read limit?
My code:
set filename = pFile
open filename:("R")
for {
use filename read x
quit:$ZEOF=-1
set ^dbg($i(^dbg)) = $lb($e(x,1,10), $e(x,*-10,*), $l(x))
}
close filenameI've checked reclen parameter but it did not seem to help
We are trying to get a custom header that I have added to a request to Cache, and I have seen the following in another post, however it doesn't work for us:
You can do it as in any CSP page/class. With %request, which is object of class %CSP.Request
And headers available in property CgiEnvs, where every http header appear with a prefix HTTP_
So, you may try this code.
set ipCountry=%request.
The following class contains 1 class method "test" that creates a Zen Application and Page:
Class objectscript.createZenPage
{
classmethod test() {
// create Application...
set app=##class(%Dictionary.ClassDefinition).%New()
set app.Super="%ZEN.application"
set app.Name="ZenTest.MyZenApplication"
set app.ProcedureBlock=1
set param=##class(%Dictionary.ParameterDefinition).%New()
set param.Name="APPLICATIONNAME"
set param.Default="MyZenApplication"
set param.parent=app
do param.%Save()
set param=##class(%Dictionary.ParameterDefinition).%New()
set param.
Hi all,
I have an incoming JSON message with a string field exceeding in length the 'caché long-string limit' of 3641144 characters.
Using {}.%FromJSON(instream) I am able to create %DynamicObject properly. However, I am unable to access the long property, as in every assignment, I get the <MAXSTRING> error.
Is there any way for me to obtain contents of the 'too long' string field as a stream?
Thanks
Jiri
When using the JSON_OBJECT() function in Caché SQL on a %String property that contains JSON syntax, it converts the %String into a JSON object instead of escaping it as a string literal. How can I prevent this? (without ridiculous hacks like "add a space to the beginning of the value" as we don't always know which properties will contain these values and I certainly don't want to have to check for nulls and add/remove a space every single place this value is used in the application)
I don't want these strings automatically marshalled into JSON objects.
I've created a CCDA schema with from an xsd ad now am trying to reference the CCDA elements in a custom class (process). What is the syntax for referencing my CCDA elements?
I've tried the following
Method OnRequest(pRequest As EnsLib.EDI.XML.Document, Output pResponse As Ens.Response) As %Status
{
// constructing PDQ Request
set tPDQRequest = ##class(HS.Message.PatientSearchRequest).%New()
$$$LOGINFO("Starting Process")
set tPDQRequest.Title=pRequest.GetValueAt("/title")
$$$LOGINFO("Title: "_tPDQRequest.Title)
set tPDQRequest.LastName=pRequest.
Hi,
I'm having the following error when returning a large dataset from a REST API.
"errors":[ {
"code":5002,
"domain":"%ObjectErrors",
"error":"ERROR #5002: Cache error: <STORE>%0NmGk1+5^xxxxxx",
"id":"CacheError",
"params":["<STORE>%0NmGk1+5^xxxxxxxxxxxxxxxxxxxx"
]
}
],
"summary":"ERROR #5002: Cache error: <STORE>%0NmGk1+5^xxxxxxxxxxx"My understanding is that this error is related to the amount of memory available.
Please see my method implementation below.
As part of a BPL I am building I need to foreach over a some repeating elements and look for a certain value, if said value is present I need to forward the message to another operation.
I can't seem to get the if statement inside the foreach loop to work and I think I am doing something wrong?
The error message I am getting:
ERROR <Ens>ErrException: <UNDEFINED>zS2+2^GWH.Messages.Eobs.AKISegmentCheck.Thread1.1 *k1 -- logged as '-' number - @' Set k1=request.GetNextIndex("PIDgrpgrp("_(1)_").ORCgrp()",k1,.tSCTrans)'
Can anyone explain that error to me?
Cheers
Everybody has a testing environment.
Some people are lucky enough to have a totally separate environment to run production in.
-- Unknown
.
In this series of articles, I'd like to present and discuss several possible approaches toward software development with InterSystems technologies and GitLab. I will cover such topics as:
This first part deals with the cornerstone of modern software development - Git version control system and various Git flows.
Hi
Is this a bug? We came across it on an older version of Cache but I've also just tried it in version "Cache for Windows (x86-64) 2017.2.2 (Build 865U)" and got the same result.
Create a Class like so:
Class My.Email Extends %Persistent
{
Property AddSeq As %Integer(MAXVAL = 32767, MINVAL = -32768) [ Required ];
Property EffBegDat As User.SQLdatetime;
Property EffEndDat As User.
Greetings,
How can I extract/return the workstation id in M. In other words, I csession in to MUMPS and I want to extract the workstation to use.
Thanks in advance for everyone's help...
I am quite new to Studio and I have been a Microsoft guy for a very long time and spoilt because of the short cuts provided and the flexibility of the IDE. Any tips and tricks for me to make my life easy while using the studio?
For each instance of an XML-enabled class I want to control whether a property is projected as an empty element or not projected at all. With string properties, I can set the value as $c(0) for an empty element, or an empty string for no projection. But it looks like this isn't consistent for properties with type %Boolean or %Integer. With booleans $c(0) gets projected as "false". With integers $c(0) stays as a zero-width space in the XML output (which gives me a SAX parser error if I try to read it).
Is there a way to do this that works for all datatype properties?
Class A Extends %Persistent
{
Property Doctor1 As %Library.String;
Property Doctor2 As %Library.String;
Property Doctor3 As %Library.String;
}
I know my solution is wrong, but if i want to access A.Doctor1, can I
s count=1
s DoctorName="Doctor"_""_count
Hello ,
I want the datagrid to reflect values based on the value i select in the Combobox. How to pass value from the combobox to the
altJSONSQLProvider parameter and reload the datagrid ?
My combobox defines below method on change.
onchange="zenPage.rowSelected(zenThis.getValue());"
<altJSONSQLProvider id="PatchClassJsonId" OnGetSQL="GetSQL" >
<parameter paramName="1" value="C"/>
</altJSONSQLProvider>
,......
Method GetSQL(ByRef pParm As %String, ByRef pSQL As %String, pCriteria As %ZEN.proxyObject, ByRef pPagingInfo As %String) As %Status
{
Hello all,
I have created a simple Datagrid and using
sql="SELECT PatchClassName,Environment,ModuleName,ModuleClass,TargetConfig,BusinessRule,MessageSchemaCategory FROM ProjectInventory.
Just got the new beta version of Docker, with depreciation warning of AUFS. It's so bad news when InterSystems does not support used by default storage driver overlay2. Recently I thought to play with Google Kubernetes Engine, and realized that I can't work with InterSystems products there due to incompatibility with Storage Driver. Maybe it's already time to think about support?

Working on a proyect with :
Cache Object Script, Jquery and Bootstrap :
I have a big problem to do pagination with parameter, to query filter and registry limitation, but i find a solution using session and global:
Set FilterDate = %request.Get("df")
If (FilterDate=""){
Set FilterDate = $Get(^NSSession(%session.SessionId,"FilterDate"))
}
If (FilterDate'=""){
Set ^NSSession(%session.Hi,
I'm using InterSystem Cache v2015.2.5 and I'm implementing a REST API and returning JSON.
Following the documentation I see examples like this
Set obj = {"destinations": ["London","Madrid","Tokyo"]}
Write obj.%ToJSON()
However, I have a compilation error
ERROR #1054: Invalid expression : '{"destinations":'
Is there something that needs to be enabled on Studio to allow this syntax?
Thank you,
Rui
I created a custom class for a process that does some basic manipulation to an HL7 message. I'd like to be able to write some debugging to the process event log. How would I do that?
I've tried ##class(Ens.Util.Trace).WriteTrace("system","HOSP.IHE.PDQProcess","MessageHeaderHandler","Discarding input message")
but I get a runtime error when I try that. I know this is pretty basic stuff, but any help would be appreciated.
Is there a responsive way to detect a source code change without using a source control hook?
Update
I have my own custom unit test tool which has lots of extra functions that I find useful such as Asserting HL7 Transformers and REST targets.
I have a studio hook that will send an event signal to my test runner that will automatically re-run a specific test class or test suite, for which I have a test runner viewing page that updates with the results.
There are some environments that already have a studio class registered and I don't want to shim something in-between the two.
(Originally posted on Intersystems CODE by @Iain Bray) The following code snippet converts all indices in a package to bitmap indices. The subroutine "test" runs the code:
![]()
The data model of your solution based on InterSystems platforms constantly changes over time. But what do you do with the data that was entered before? Back then, the data was valid, but what’s happening to it now after a number of data model changes? The answer to this question can be provided by the IDP DV tool that checks the property data of persistent and serial classes according to the types of these properties. In case any discrepancies are found, the tool generates a detailed error report for the user.
I have a XML enabled persistent class and a XML representation of some object of this class (object ID is available).
How can I use XML Reader (or some other mechanism) to automatically update this object?
Greetings all,
I have a quick SQL question. I am working with a class, which has a calculated property, which in turned indexed.
The calculation for this property is created based on another property value via:
SqlComputeOnChange = attributes - so basically every time I add a property attribute to my class, my new property
is calculated based on some SqlComputeCode which calls some class method.
That initial setup works as designed.
Question: If my code for whatever reason gets to a ROLLBACK, does the calculated property always rolls back,
and it's index always cleared?