#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.

New
Question Scott Roth · 9 hr ago

How can I create a Task that tells a Ens.BusinessService to execute its SQL query using the EnsLib.SQL.InboundAdapter?

So far I have come up with

Class OSU.Workday.TerminationsTask Extends %SYS.Task.Definition
{

Parameter TaskName As STRING = "OSU - Workday Termination Update";

Method OnTask() As %Status
{
    try{
        // Call BusinessService
        set tSC = ##class(Ens.Director).CreateBusinessService("OSU.DataSource.Workday.TermService",.tService)

        if $IsObject(tService){
            set inputMessage = ##class(Ens.StringContainer).
2
0 22
New
Question Scott Roth · Mar 2

I am stuck at a crossroad and was wondering if I could get a second pair of eyes to help with a query that I am sending from a Task to a Service to process some data.

I have a Linked Table (view) that points back to a MS SQL View that I am trying to query. However, my execution keeps either failing or not returning any rows. When I take the SQL Query and execute it within the Management Portal I get results, however Cache is not seeing it when trying to execute this code.

4
0 74
New
Question Scott Roth · Feb 27

I am trying to create a task that has a variable property that a user can specify DaysBack but it keeps coming up blank when I ask the system to get the date as of DaysBack from the CURRENT_DATE. Can someone tell me why I am not getting a value back in my tDate variable?

Class OSU.Workday.TerminationsTask Extends %SYS.Task.Definition
{

Parameter TaskName As STRING = "OSU - Workday Termination Update";

Property DaysBack As %Integer [ InitialExpression = 1 ];

Method OnTask() As %Status
{
	Set tSC=$$$OK
	#Dim tException as %Exception.
5
0 76
New
Question Mark OReilly · Feb 25

When using VS code with multiple workspaces it requests "The extension 'InterSystems ObjectScript' wants to sign in using InterSystems Server Credentials. 

Other than having multiple workspaces per environemnt (which never really works for me in principle as i end up code comparing in one manner or another) is there a way to only have intersystems log in to VS code whenever you open an actual workspace itself i.e. click on dev not on loading vscode. 

This would also get around errors of "unauthenticated access rejected by" errors as VS code tries to log in without the password first. 

8
0 79
Question prashanth ponugoti · Feb 7, 2022

Hi Community,

Here we have requirement to process messages min 10 sec delay. Current time it is taking my businessProcess is less than 1 sec.

To implement this requirement , I need to sleep 10 sec in business process custom code.

Could somebody help me to implement delay in BusinessProcess.

 

Thanks,

Prashanth

9
0 1063
Question Evgeny Shvarov · Dec 27, 2025

Hi developers!

There is a very neat variable in IPM ${ipmdir} that lets packages be installed on a particular IRIS server and ensures that the data and resources they bring don't mess around as ${ipmdir} variable during the installation transforms into:

iris installation dir/ipm/package_name/version/whatever_you_install_here

It is very convenient, e.g., to bring some data and resource files that can be useful during the installation setup, e.g., via FILECOPY. Indeed, suppose you bring some csv_file, e.g. titanic.csv via FILECOPY as:

<FileCopy Name="data/titanic.csv" Target="${ipmdir}data/titanic.csv"/>

or even the whole folder of data in the source code repo into the package:

<FileCopy Name="data/" Target="${ipmdir}data/"/>

And in the case of Iris in Docker it resides in:

/usr/irissys/ipm/package_name/1.0.0/data/titanic.csv

This is all great, but is there any way for the installed code to determine the location of the data files? It'd be neat to let the installed app know somehow where is the data that came with it? Could it be the method in the IPM client that will resolve ${ipmdir} for the app? 

2
0 79
Question Jonathan Harris · Dec 24, 2025

Here is what is currently used.

..CurrentDateTime("%Y%m%d%H%M%S")

The format is not the issue.

I need to make it our current time as it is five hours ahead.

How can I access the header property of either of these.

Or, if I can't do that, subtract five hours or the equivalent time in seconds.

example, if I receive 20201224161922, how can I make it 20201224111922?

Thanks,

Jonathan

3
0 79
Question Phillip Wu · Nov 23, 2025

Hi,

I want to get the status of a Production (Running, Stopped), Queue length, Time the Production started

I did this:

>zn "test"
>set status=##class(Ens.Director).GetProductionSummary(.pinfo)
>write status
1
>zwrite pinfo
pinfo("PKG.FoundationProduction")=$lb("Stopped","","",0)
pinfo("Report.Print.EnsemblePrintService")=$lb("Stopped","2021-02-09 23:15:57.538","2021-02-09 23:16:15.264",0)
pinfo("TC.hmf.Production")=$lb("Stopped","","",0)
pinfo("TC.hmf.System.Production")=$lb("Running","2025-10-30 10:18:24.

1
0 65
Question Gopal Mani · Oct 7, 2025

Hi Community,
I’m trying to execute a directory query in InterSystems IRIS using %SQL.Statement, but encountering an unexpected error.

Details:
The following command confirms that the directory exists:

Set dirPath="\\MYNETWORK_DRIVE\DFS-Shared_Product\GXM"
Write ##class(%File).DirectoryExists(dirPath)

It returns 1, meaning the path is valid and accessible.

However, when I try to execute this SQL query:

Set File=##Class(%SQL.Statement).%New()
Set Status=File.%PrepareClassQuery("%File","FileSet")
Set Result=File.%Execute(dirPath)
If Result.%SQLCODE {
    Write Result.
3
0 102
Question Yone Moreno Jiménez · Aug 5, 2025

Hello, how are you?

First of all thanks for your time reading this question.

 

We are investigating how to validate the indexes of a global. We have read:

https://docs.intersystems.com/irisforhealth20251/csp/docbook/DocBook.UI…

And:

https://docs.intersystems.com/irisforhealth20251/csp/documatic/%25CSP.D…

 

We want to validate the inxedes of the global titled "Ens.Util.LogD". We have executed on the ObjectScript terminal, on the desired namespace:

ESBSSCC>set tSC = $SYSTEM.OBJ.

2
0 118
Question Adel Elsayed · Jul 21, 2021

in order to do analysis on huge data volumes, it is better to take you data to a separate machine for analysis away from the operational machine, so trying to write huge globals or tables into files as is would take a huge space, what could be a solution or best practice ?..in python for instance, there is the pickling option (serializes data to byte string and saves it to a file) to save space, what could be best in object script ?

12
0 1752
Question Shashvati Dash · Jul 1, 2025

The below code is not working. its unable retrieve Record count and merge files

Class Util

{

 

ClassMethod zPyRecordCount(inputfile) As %Integer [ Language = python ]

{

    import pandas as pd

    import iris

    import io

 

    try:

        df = pd.read_csv(inputfile, sep='|')

        recordcount=len(df.index)

        sys.stdout.write(len(df.index))

        return recordcount

 

    except Exception as e:

        return 0

}

 

ClassMethod zPymergefiles(file1, file2, outputfilename) As %Boolean [ Language = python ]

{

 

    import pandas as pd

    import iris

    import io

 

    try:

        dataframe1=pd.

1
0 73
Question Evgeny Shvarov · Jun 29, 2025

Hi noble devs!

Just building a simple frontend->JSON->IRIS backend story, and figured that IRIS while importing via %JSON.Adaptor wants JSON fields to match property names, meaning even should match the case. Like:

{ name: "John", 

surname: "Doe"}

will have issues while saving the dynamic object to a class Sample.Person with:

Class Sample.Person Extends (%Persistent, %JSON.Adaptor)

{

Property Name: %Sting;
Property Surname: %String;
}

As soon as the case is not the same... 

Is there any setting to fix

15
0 329
Question Kurro Lopez · Jun 23, 2025

Hi all,

We're developing a medical appointment app that connects doctors' schedules to an appointment provider.

The provider is returning us the appointment in the following format:

Thu Jul 03 08:20:00 CEST 2025

It means, 03 july 2025 at 08:20:00 Central European Summer Time (UTC+2)

But we need the following format:

2025-07-03 08:20:00+02:00

Is there any option to convert zone time code (CEST) to a UTC+x ?

How to convert zone time code (CEST, CET, ET, EDT, etc..) in its zone time in UTC (UTC+2, UTC+1, UTC-5, etc..) ?

 

Best regards

4
0 137
Question Ashok Kumar T · May 22, 2025

Hello Community,

When I run the following code with x undefined in terminal, it throws a syntax error and returns control to the program stack. After issuing a GO command, execution continues, and setting the global variable ^zz1.

code 1:

test.mac
if $Data(@x@(a,b,c)) {
    set ^zz1=1212
}
write !,1212,!
//
//or
if $Data(@x@(a,b,c)) set ^zz1=1212
write !,1212,!

 if I assign the result of $D(@x@(a,b,c)) to a local variable like d using set d=$D(@x@(a,b,c)), and then use if d { ... }, the code fails(global is not set) working as expected.

Code 2

test
7
0 169
Question Ashok Kumar T · Apr 11, 2025

Hello Community,

The subroutine ^routine is not executed while the queue is being processed in WorkMgr. However, it works when defined as a function. Is it mandatory to define subroutine^routine as a function for it to execute properly?

testwqm.mac
 set wqm = ##class(%SYSTEM.WorkMgr).%New()
 set sc=wqm.Queue("subr1^testwqm")  ; not executing the subr1 
 set sc=wqm.Queue("subr2^testwqm") ; executing the subr2 properly
 set sc=wqm.
3
0 141
Question PagerianDeveloper · Mar 17, 2025

Is there a way to use a property of the type %Persistent class in a  %ZEN.Component.page class?
Example:

// Data class
Class PersistentClass Extends %Persistent
{
    Property Value As %String;
}
// Page class
Class ClassName Extends %ZEN.Component.page
{
  Property TestProperty As PersistentClass
}


The problem is that when using it the described in the example.
The property can be set in a Method like this:

Method DoStuff() As %Status  [ ZenMethod ]
{
    Set result = ##class(HBS.EnsUtil.CompanyFunctions).GetData(.aVariable) // aVariable is of type PersistentClass
    Set .
3
0 189
Question Igor Pak · Mar 7, 2025

Hello, dear colleagues.

 

I need to connect to a remote JavaGateway from an Ensemble service.

I am trying to use the EnsLib.JavaGateway.Service with a remote host where the JVM is running.

 

I can successfully ping the remote Java Gateway from EnsLib.JavaGateway.Service, and Ensemble reports that the service status is OK.

There are no network issues, and all necessary ports are accessible.

 

My requests work without any problems when I specify localhost in EnsLib.JavaGateway.Service.

1
0 180
Question Thembelani Mlalazi · Feb 28, 2025

I have been trying to get to grips with the new dot Net Gateway used in IRIS as the import of the DLL to construct proxy classes is no longer supported in IRIS I have a third party DLL that when I try to instantiate throws an error complaining about the class not instantiated as it does not support parameterless constructor .I am using this new 

set gateway = $system.external.getDotNetGateway()
do gateway.addToPath(myPath_"\DotNetGatewaySamples.
5
0 135
Question Scott Roth · Apr 25, 2017

We have a vendor that can only send us a uu-encoded PDF. Is there a way to decrypt it in Ensemble?

Thanks

Scott Roth

The Ohio State University Wexner Medical Center

3
0 552
Question Sean Brady · Jan 17, 2025

Hello everyone! This is my first post into the developer community and one that I hope is fairly simple to answer. In our environment we currently have 3 different Test environments for testing before migrating code to our Prod environment. Currently we are working on establishing a source control method using Git in house which has been a bit of a struggle. We have also had developers that had used different test and migration methods in the past which has caused some issues with keeping the different test environment in sync.

7
0 232
Question Anthony Master · Dec 18, 2024

References:

ObjectScript always follows strict left-to-right execution of arithmetic operators. 

The && operator evaluates the left operand and returns a value of FALSE (0) if it evaluates to a value of zero.

5
0 241