#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 Nael Nasereldeen · Apr 16, 2018

Hi,

I need to read a UTF8 encoded text file and translate the content to 8-bit.

Using %File class and $ZCVT(TXT,"I","UTF8") works , but I see that if the content is larger than max string  (32000) and we cut the content

To max string chunks, we can get a <translate> error if we cut it in the "wrong" point..

Is there a better way to do this task?

My code looks like this:

    S file=##class(%File).%New(.LocalFileName)
    D file.Open("R")
    While 'file.
10
0 2267
Article Eduard Lebedyuk · Feb 5, 2016 11m read

Class Queries in InterSystems IRIS (and Cache, Ensemble, HealthShare) is a useful tool that separates SQL queries from Object Script code. Basically, it works like this: suppose that you want to use the same SQL query with different arguments in several different places.In this case you can avoid code duplication by declaring the query body as a class query and then calling this query by name. This approach is also convenient for custom queries, in which the task of obtaining the next row is defined by a developer. Sounds interesting? Then read on!

17
7 7703
Article Steven Hobbs · Oct 8, 2019 7m read

$LIST string format and %DynamicArray and %DynamicObject classes

IRIS, and previously Cache, contain several different ways to create a sequence containing a mixture of data values.  A data sequence that has been available for many years is the $LIST string.  Another more recent data sequence is the %DynamicArray class, which along with the %DynamicObject class, is part of the IRIS support for JSON string representation.  These two sequences involve very different tradeoffs.

4
10 3375
InterSystems Official Raj Singh · Oct 20, 2020

Hello Developer Community!

Once again I'm here to talk about the ObjectScript extension for Visual Studio Code, and this time we are excited to announce the release of version 1.0!

The community has come together in an unprecedented way to deliver this product with InterSystems, and its only fitting that a tool so critical to  developer productivity would be built with community testing, feedback and source code from the very beginning.

What's New

Most of the features in this release have been present since 0.9 and were announced earlier in this post. They have all been enhanced and polished.

0
0 1165
Question Nora Hutchison · Oct 14, 2020

–  I want to “copy” a file to another, appending if the file already exists. The below code works, except it overwrites the new file, rather than append.  The documentation says CopyFile will append

 

//Both files exists, so we can combine them
                               
                 set tsc=##class(%File).CopyFile("D:\Files\Out\Vigilanz\AD_Lawson10132020.txt","D:\Files\Out\Vigilanz\employee10132020.txt"
                                if $$$ISOK(tsc)
                                {
                                !

2
0 713
Question Scott Roth · Oct 9, 2020

I noticed when creating Record Map's within Ensemble that it is creating a Persistent cache table as it translates the file and puts it into the Record Map data structure.

I was wondering if there was a way to add a column to the cache table that is Hidden from the record map, but is a calculated date value on when that record was inserted? 

From time to time I have gotten questions about what was valued in the incoming data stream, and I thought it would be helpful to add a date so I can sort on by which date that record came in on.

4
0 331
Article Henrique Dias · Oct 6, 2020 2m read

What is npm-iris? 

N.P.M stands for "No Project Mess."

N.P.M. is a Project & Task Management app that uses InterSystems IRIS and Bootstrap 4.

No Project Mess is created to help developers and small business companies to reduce complexity in their daily problems, with a simple and intuitive projects and tasks management software. 

It offers different views for your tasks, from a spreadsheet, kanban, calendar, or even Gantt!

0
0 458
Discussion Evgeny Shvarov · Sep 28, 2020

Hi developers!

Want to discuss with you the case of %Status.

If you familiar with ObjectScript you know what is it. I'd love to hear the history of the case why it had appeared in ObjectScript but it turned out that almost every system/library classmethods return %Status and there is a whole set of tools to deal with it.

What is does it gives you the responsibility to check the value or %Status of every system method you call.

E.g. if you save the data of the persistent class,  you should never call like this:

do obj.%Save()

you need to call:

set sc=obj.%Save()

if $$$ISERR(sc) do // something or quit.
19
0 1289
Question alex chang · Sep 14, 2020

I want to call some Java Remote Call through Java gateway.  The call code as following:

class CallRemote Extends %CSP.REST {

Method Index() as %Status {

Try

      set gw = createJavaGateway()

     Do callJavaMethod(gw)

     do gw.%Disconnect()

Catch {

}

}

}

But Every call need connect to Java Gateway and disconnect it. But It's cost too high( about 80ms)

So, According to my Java experences, I need create some connection and put it into global static ConnectionPool

But I don't known how to reach that using ensemble.

2
0 271
Discussion Evgeny Shvarov · Sep 21, 2020

Hi Developers!

Recently we discussed the naming convention on packages we deploy and even made some choices.

Here I want to have a conversation on the naming convention for unit tests.

Of course, we wish every good library has unit tests. Here is the documentation and some good articles(one, two, three) regarding it on the Developer Community.

Let's decide on the naming of UnitTests packages?

The suggestion is that unit test classes will all start with the UnitTest package name.

E.g. if your library's class name is:

johndoe.lib.class

The related unit test class will be:

UnitTest.johndoe.lib.class

What about folders?

The suggestion is that unit test classes will live separately from source classes, e.g. in /tests directory.

Here is the example of a repository with unit tests that are named and placed according to the proposal.

What do you think?

6
0 460
Question ED Coder · Sep 17, 2020

My segment is not getting set with the new value though It goes into the if statement. Am I doing something wrong?

ClassMethod Clone(pRequest As EnsLib.HL7.Message) As EnsLib.HL7.Message [ Final ]

s cREQ = pRequest.%ConstructClone()

s DG1 = cREQ.FindSegment("DG1",.ind)

While (ind2 '="")

{
diag = DG1.GetValueAt(4.1)

if diag = "0"
{
tmp = "No code"
rc=DG1.SetValueAt(tmp,4.1)
}

}

DG1 = cREQ.FindSegment("DG1",.ind2)

request = cREQ
Quit request

}

6
0 480
Question Keith Davis · May 31, 2019

Forgive my lack of understanding, but I am working on a vendor created Cache database and the indexes specified in the classes for ODBC connections are not working. A few of them are created, but of the 50+ classes we have, only a handful of them are created when the class is compiled, yet no errors occur.

Example 1:

 

Example 2:

 

 

 

The code is creating the Index, and again, not compile errors, but most of the indices are not built.

21
0 1475
Question VICTOR GALVAO · Sep 15, 2020

Hi guys!!

In the system that I work, I came across an iterator pattern that uses the %Resultset library without performing the close after executing the query. Does anyone know how to say what are the impacts of not performing such a procedure?

If you have any model of iterator pattern made in caché to recommend as a good example, I will be grateful hehe  :D

5
0 409
Announcement Raj Singh · Sep 1, 2020

Hello Developer Community!

I’m pleased to announce the 0.9 release of the ObjectScript extension for Visual Studio Code. Earlier this year I announced that InterSystems would be joining the community in evolving this already popular tool. Since then, we have been hard at work solidifying the code base and building a slew of new features.

Before I get into the details, I’d like to take a moment to thank @Dmitry Maslennikov, @John.

9
2 959
Question alex chang · Sep 13, 2020

Common macro def as following

 

#def AnyNumber(%args) for i=1:1:$listlength(%args) { Write $listget(%args, i)}

Using this marcro in objectscript code:

ClassMethod Test() as %Status {

     $$$AnyNumber($lb(1,2,3))

}

if ths args is literal value , Iit worked great. But  When I want pass Objects, It's not working

$$$AnyNumber($lb(##class(someClass).%New()))

I know I can pass a %ListObjects , If I want more shorter Line. How can I do this.

Tks

1
0 322
Question Scott Roth · Jun 19, 2017

I have come across several cases where I need to set a Date filter to send only send any admit/scheduled date past a certain point. We have a couple different date comparison functions but none looking at the true date. Most of them are date + 15 or etc. Does anyone have a good date function they have written to say if x > 20170102 ?

Thanks

Scott

14
0 2479
Question alex chang · Sep 3, 2020

I  have java  language experence. If I need parse a binary tcp packet . like following format

encoded string and send it to peer by tcp

1byte msg type + 4 byte(unsigned int) + raw byte(body)

To parse this package , Some Java code like this:

byte[] data = new byte[1024];

Bytebuf buf  = new ByteBuf(data)

byte type = buf.read()

int len = buf.ReadInt()

byte[] bodyBuff = new byte[len]

buf.Read(bodyBuff)

String str = new String(strBody)

So, does Objectscript have similar functionality to achieve similar results?

Tks.

1
0 422
Article Daniel Tamajon · Sep 1, 2020 5m read

Error management on InterSystems languages has been evolving along time. Next, we will show the different implementations and why you should use the TRY/THROW/CATCH mechanism.

You can read official error recommendations here.

InterSystems will not mark as obsoletes the non-recommended error management methods to allow giving support to legacy applications. We recommend using tools like objectscriptQuality to detect that legacy unrecommended usage along with many other possible issues and bugs.

2
3 1005
Question Oliver Wilms · Aug 19, 2020

I was able to define ECP connection in Installer class that I run when I build docker image for my Docker IRIS application. Now I start to use Amazon ECS and Autoscaling. When a new instance is created and it runs the IRIS container, I want it to "register" as an Application server on the remote database server. What code can I execute to add an ip address as an Application Server?

2
0 556
Question ED Coder · Aug 27, 2020

I have a list of 300 code combinations in the following format, which I plan to load into a global

X123, Internal health

X234, external health

X345, Peripheral health etc..

I want to get the code from the DG1 segment, compare to the global, and add a description. Is there an easy way to do it?

So in my DG1 segment If I get the code X123, what I want to do is check if the code is in the global and if it does add the description in the field.

So DG1 will look like this:

DG1|1|CDS||X123^^^|20200827141200|Primary||||||||||Dr
7
0 305
Question Ba Moser · Aug 25, 2020

I use these example classes:
Class Sample.Address Extends (%SerialObject, %Populate)
{Property Street As %String;
Property City As %String;
Property State As %String(POPSPEC = "USState()");
Property Zip As %String;}
Class Sample.Person1 Extends (%Persistent%Populate)
{  Property Name As %String;
Property Home As Sample.Address;
Property AR As array Of Sample.Address; }

In SQL it is Table Sample.Person1

No problem to define INDEX on Home_State

But Table Sample.Person1_AR

HowTo define an INDEX on AR_State ?
Index st On AR.State;

Does not compile!

12
0 757
Question Daniel Lee · Aug 20, 2020

We are using Ensemble and I added some debug logging that writes to a global and recompiled the class in Studio. However, when we send messages, the global is not populated. I have recompiled, removing the checkmark to keep the generated code so that there is only one .INT file and I verified that the code is present in the .INT file. 

My question is, do we need to stop and restart the Ensemble production in order for these changes to take effect? Do I need to stop and restart the business operation that calls this piece of code? Is there something else I may have missed?

6
0 424
Question Jude Mukkadayil · Aug 12, 2020

Hi,

     Can anyone please explain me how to remove trailing squares from the text field (String). Trailing squares is a white space ?

I tried different things like Ltrim, Trim from sql query side and also from object scripting side something below.

 If Address1 set Address1 = $ZSTRIP(Address1,"<>P,<>C,<>W")
 If Address1 set Address1 = $ZSTRIP(Address1,"$C(9), $C(32), $C(160)")
 If Address1 set Address1 = $ZSTRIP(Address1,"*W,*C")

Nothing works for me

Can anyone please help me to solve this

 

Thanks

5
0 916
Question Scott Roth · Aug 12, 2020

We have a vendor that every couple of days will just stop transmitting messages, but still hold the TCP/IP connection open. No matter how many times we troubleshoot and talk with them, they don't seem to think its an issue with system.  Normally if I just restart the service it will get the data flowing again.

I know ideal is for them to fix the issue, but in the meantime I have setup an Inactivity time out alert.  I was wondering with the correct filtering if there was a way to say if the Inactivity Alert is triggered during the business day, to have the Alert trigger a restart of the service?

3
0 328