#ObjectScript

14 Followers · 1.6K Posts

InterSystems ObjectScript is a scripting language to operate with data using any data model of InterSystems Data Platform (Objects, Relational, Key-Value, Document, Globals) and to develop business logic for serverside applications on InterSystems Data Platform.

Documentation.

Question Neil Thaiss · Jul 28, 2021

Hi all,

Are there limitations to the size of a file or stream that %XML.Reader will parse?

I am trying to parse a large, 573MB, XML file using either the 'OpenFile' or 'OpenStream' methods, but both return errors.

When I try to use the 'OpenStream' method I get a 'ERROR #6301: SAX XML Parser Error: input ended before all started tags were ended' error',

and when I try the 'OpenFile' method I get a 'ERROR #6301: SAX XML Parser Error: <STORE>'.

'%XML.TextReader' appears to parse the file OK, so I may be able to get use that as a workaround, but ideally I would like to get '%XML.Reader' working.

2
0 621
Question David.Satorres6134 · Jul 20, 2021

Hi,

When for any particular reason I need to update a record and don't want to pull the triggers, the keyword %NOTRIGGER can be used. But I've been trying to do the same when I change the row using the object approach, but I can't find it. Anyone knows if it's possible to avoid pulling triggers when working with objects?

Sadly, the utility "DISABLE^%NOTRIGGER" doesn't seem to exist ;-)

Thank you,
David

2
0 359
Question Jordan Simpson · Jul 20, 2021

Hi!

Does anyone have a cleaner approach than this for looping through grouped NTE segments in order to set the segment ID in an ORM? I am aiming to avoid the NTE segments that may follow the PID segment and find the NTE's that follow the OBR segment. By using the below If statement in the While loop, I'm finding NTE's that have comments in the fourth field (PID NTE's tend not to have these in the messaging I'm seeing, I'm awaiting confirmation on this), as well as finding my newly inserted NTE segment using $FIND to locate the colon (I've concatenated some values).

3
0 591
Question Daniel Aguilar · Jul 13, 2021

Good afternoon I am making a method of a class that I want to return a list of objects of another class that I have defined, example:

ClassMethod myMethod() As list of MyPackage.MyClass
{
}

But it gives me a syntax error, I try this and it works:

ClassMethod myMethod() As %ListOfObjects
{
}

But I would like to keep the typing.

Is there a way?

5
0 695
Question Daniel Aguilar · Jul 13, 2021

How do you initialise a list of objects of a particular type?

I have tried the following code and I get an undefined when I try to insert.

I can do this and it works but I don't know if it is correct.

 

Is there any way to do something like this?

Set a= New list of Accciones()

Thank you.

3
1 430
Question Jonathan Anglin · Jun 29, 2021

Hello All

I'm running into an issue performing UPDATES that I'm not getting on INSERTS. It's probably obvious, but I'm just not seeing it and could use a little help.

I'm going over an HL7 message and depending upon varying criteria, the relevent variables will get items added to them like the following:

Set patientId = pRequest.GetValueAt("PID:3")
Set sqlColumns = sqlColumns_",patient_id"
Set sqlValues = sqlValues_",?"
Set par($i(p)) = patientId

After compiling the variables, I check to see if accession number is found in the table.

set performInsert = 1
set performUpdate = 0
.
14
0 787
Article Henry Pereira · May 16, 2017 3m read

Hi Community,
This post is to introduce one of my first project in COS, I created when started to learn the language and until today I'm keeping improve it.

The CosFaker(here on Github) is a pure COS library for generating fake data.

cosFaker vs Populate Utils

So why use cosFaker if caché has the populate data utility?

Ok the populate utility has great things, like the SSN Generator for example, but what to do when you have a field with a long description of a product? How to check if that table will list the emails or if that calculated property will count the days of the last user interaction.

8
2 1169
Question Julian Matthews · Nov 20, 2019

Hi all.

I'm currently working with a system needing results from a lab system, and they can only accept a single OBR per R01 message.

The R01s from the source have multiple OBRs, so I need to be able to send a message per OBR.

I found a similar post where the example was using a BPL, however there's some additional trickery processing that I already have working within an ObjectScript Business Process and would like to avoid trying to recreate in a BPL.

Any sample code will be greatly received smiley

4
2 1287
Question Warren Oyco · May 20, 2021

I am working on tweaking our current patient load process. The roster input is in text pipe delimited format, parsed out and transforms it to a standard HS.Message.PatientSearchRequest, and send to business process for patient matching. Result is transformed into a standard ADT HL7 message using EnsLib.HL.Message class. I would like to know if there is another class I can use that will transform my output to a text flat file pipe delimited instead of HL7 format? any advice on how to do this is greatly appreciated.

 

Thanks!

2
0 531
Announcement Nikita Savchenko · Jan 19, 2017

Greetings, InterSystems community!

I am pleased to announce that the web terminal project, Caché WebTerminal version 4 gets its release! After long period of enhancing this web application from 2013, it came to the version 4, which features major stability and security improvements, intelligent autocomplete and syntax highlighting, convenient SQL mode and a lot of other useful features.

The goal of this article is to spread the knowledge about this project over the InterSystems community.

34
3 3808
Question Evgeny Shvarov · Aug 27, 2019

Hi Developers!

A question to those who use VSCode to code InterSystems ObjectScript.

Suppose you have the ObjectScript code on IRIS server and you want to export it into the desired folder.

And you have VSCode connected to the server.

What is the way to tell VSCode that I want to export classes into some particular folder in /package/class.cls way?

E.g. into:

/project_folder/src/cls/Package/class.cls

and project_folder is opened in VSCode as the folder of the project.

8
0 1220
Article Erik Hemdal · Oct 31, 2016 8m read

Here are a few examples of conversions and operations you might need, along with links to documentation where you can learn more.

At the time I wrote this, Eastern Daylight Time was in effect for my Caché system.

How Caché keeps the time and date

Caché has a simple time format, with a longer range of recognized dates compared to some other technologies.

The current time is maintained in a special variable $HOROLOG ($H):

USER>WRITE $H

64146,54027

USER>

The first integer is the count of days since December 31, 1840. The second integer is the count of seconds since midnight of the current day.

4
1 15079
Question Stefan Cronje · Jun 10, 2021

Hi,

I have the requirement to dump large result sets into files. I am currently using %SQL.Statement and the result set created by it.

The DisplayFormatted is used to write a CSV. The query I used to test does not contain any filters, it is just a select * from a table with 16 million rows.
The file created is 2GB in size. The issue I have is that it takes 8 hours to create this file.

I have seen in the past that file streams write fast at the start. As the file continues to grow, the process' memory usage increases until it reaches the max allowed.

3
0 341
Question Sehinde Raji · Jun 8, 2021

Hi all, I am new to IS Objectscript and I would appreciate some assistance regarding this. 

I am trying to find out how to count the number of elements within a dynamic abstract object and I am having some trouble using the size method.

Here is the code below:

The key value pairs are originally in JSON and I would have converted it in to an object for use.

Class JSON.
7
0 431
Question Jeffrey Drumm · Jan 22, 2018

I'm looking for a way to get the message header ID for the current message in a Request to a Business Process.

I've located some code that gives me what I need, but it runs the risk of violating the "abstraction layer" ISC has in place around such things. And while I very much appreciate their efforts at keeping things simple for me ... well, sometimes you just have to dig through the guts to get what you want.

Is there a documented, deprecation-resistant method for getting at %Ensemble("%Process").%PrimaryRequestHeader.%Id() from within a  BP?

6
0 1170
Question Jeffrey Drumm · Jun 1, 2021

I've been tasked with an interface that needs to supply some additional metadata for the indexing of HL7v2 messages. After toying with a couple of ideas, I thought that it would be useful to subclass EnsLib.HL7.Message, add a %DynamicObject property, and store the metadata in it (it ends up getting sent to the target in JSON form anyway).

And, well, it seems to work just fine ... so far.

I seem to remember that %DynamicObjects are not persistent, and for that reason not something you would normally stuff into a database.

4
0 1167
Question Sehinde Raji · May 21, 2021

Hey I am very new to Intersystems Objectscript and I am trying to find a way of extract 4 digit numbers from a stream.

I have a stream full of results 

2334

3434

5543

4334

 

And I am trying to remove each 4 digit grouping from the stream.

I have tried the following for loop 

for i=1:1:$length(result) {

set curr = $extract(result, i)

write !, curr

set count(curr) = $get(count(curr)) + 1

}

 

Unfortunately the loop extracts one digit.

Does anyone have any suggestions on how to solve this ?

6
0 530
Question Daniel Bertozzi · May 14, 2021

Hi all

I'm trying to recreate this method below in Cache/IRIS. 

https://en.wikipedia.org/wiki/Luhn_mod_N_algorithm ISO-7812-1 (LUHN-10)

I've been following the javascript example. It seems simple in theory but i'm struggling with which cache methods to pick.

$LENGTH, $System.SQL.FLOOR() - seem ok

$EXTRACT - I think for .charAt (though may need to correct base)

$FIND - for .indexOf

Any suggestion which would be the best ones for the job?

Thanks

Dan

5
0 311
Question Scott Roth · May 12, 2021

Awhile back the Developer community helped me with a situation I was having... How to loop through a Repeating Segment and Single Filed, example OBX().5, within a Business Process Rule and compare it against a Data Lookup table.

Well now I need to take it a step further. I need a way to loop through OBR() segment, and loop through OBR().4() and the subfield 4.1 and compare it to a Data Lookup table.

So I thought I could copy my existing function code and add another level to it, but its not returning what I would expect.

ClassMethod DoesValueExistRepeatingSegmentFields(pHL7Msg As EnsLib.HL
2
0 559
Question Jukka Pitkänen · May 4, 2021

Hi! I have a promblem with ##class(%File).Exists -method and scandinavian characters.

Ensemble: Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2018.1.2 (Build 309_5U)

I have a business service (EnsLib.EDI.XML.Service.FileService (charset=binary)) which reads XML-files from the server and transmits those to the business process. BP request class is EnsLib.EDI.XML.Document. In BP I have code block 

 SET SourceConfigName = process.%PrimaryRequestHeader.SourceConfigName
 SET SrcPath = ##class(Ens.Director).GetAdapterSettingValue(SourceConfigName,"FilePath",.tSC)
 SET AttachFileName = request.
2
0 328
Question ED Coder · Apr 30, 2021

I am updating the PV1 segment with values from the database but when I get two values back I dont know how to separate them with a tilde and insert. Any advice for me on that?

so if I get two values returned

 

my PV1.7 segment should be :  

My current code is as below: It works fine for one value, but when there are more than 2 values returned I need to find a way to include it

Set res=##class(%ResultSet).%New("%DynamicQueryGW:SQLGW")

Set sc=res.Prepare(sqlstring,,conn)

Set sc=res.Execute()

while res.Next()
    {
     RET = res.GetData(2)
}
    
    sc=res.Close()
    
    Set sc=conn.

5
0 477