#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 aqwsxcde · Apr 4, 2020

Hello community,

I recently started to work with Ensemble. I defined a subclass of EnsLib.HL7.Message. In my production I receive HL7v2 messages and transport them using the Message Router to a business operation. The operation class has an OnMessage method with parameter

pObject As MySubclassOfEnsLibHL7Message.

I expected that specifying the parameter type, on receiving the message an implicit type cast would be performed. However, $CLASSNAME reveals that my messages are still of type EnsLib.HL7.Message. How can I convert my messages in ObjectScript (without DTLs or something the like)?

7
0 935
Article Robert Cemper · Apr 4, 2020 3m read

IRIS 2010.1 brought us a new feature: %Net.WebSocket.Client

As a continuation of my series of WS Clients I just couldn't resist to try it.
Well, this is the result and it was rather simple in the end.

  • After I succeeded in my personal fight against Windows Firewall ;-)

You basically need to prepare 3 classes:

  • Credentials for User, PW, SSL
  • an Event Listener
  • the Client (Could be a .MAC routine as well)

The example uses the WSS.EchoServer (a derivate from former SAMPLES in Caché).
The default assumption is to have Client and Server on the same system & namespace.

0
0 817
Announcement Evgeny Shvarov · Mar 22, 2020

Hi Community!

The registration phase for InterSystems Online Programming Contest ends today and we will start the voting week!

Now we have 20 applications - so you have a set of applications to choose from!

How to vote?

This is easy: you will have one vote, and your vote goes either in Experts nomination or in Community nomination.

7
1 499
Article Gevorg Arutiunian · Aug 31, 2018 1m read

This code snippet changes all passwords in a system to a specified string. The two literal strings at the beginning of the snippet can be adjusted to edit the system or password string. The class method "test" runs the code:


Class eduardlebedyuk.changePasswords Extends %RegisteredObject
{
ClassMethod test()
{
set ns = $namespace
zn "%SYS"
set NewPass = "NewPassString"
set rs=##Class(%ResultSet).%New("Security.Users:List")
set st = rs.Execute()
while rs.Next() { set st=$SYSTEM.Security.ChangePassword(rs.Get("Name"),NewPass)}
zn ns
}
}


(Originally posted on Intersystems CODE by @Eduard.

7
0 889
Discussion Maks Atygaev · Mar 28, 2020

DISCLAIMER: I am not an InterSystems engineer or a professional ObjectScript developer.

I just want to share my opinion about some things I am really miss in ObjectScript.

I really appreciate everyone who support my project (Declarative ObjectScript) in contest

but the post is not about "why you should support me" on contest.


I faced with ObjectScript in the university while was working on my diploma (in 2013).

Very good mentor @Evgeny Shvarov helped me to get started with ObjectScript development.

2
0 306
Article Fabio Goncalves · Apr 18, 2017 9m read

Introduction

The common requirement in many applications is logging of data changes in a database - which data has changed, who changed them and when (audit logging). There are many articles about this question and there are different approaches on how to do that in Caché.

I'm sharing a mechanism that can help you implement your framework to track and record data changes. This mechanism creates a trigger through an "objectgenarator" method once your persistent class inherits from the "Audit Abstract Class" (Sample.AuditBase). Since your persistent class inherits Sample.

9
2 2700
Question Yone Moreno · Mar 26, 2020

Hello,

We are developing a method to take two messages which have a list of data types. It is being defined as:

Class Mensajes.Response.HistoriaClinica.ConsultaCitasResponse Extends Ens.Response [ ProcedureBlock ]
{

Property informacion As EsquemasDatos.HistoriaClinica.Informacion;

Property datos As list Of EsquemasDatos.HistoriaClinica.ConsultaCitas;

Property error As EsquemasDatos.HistoriaClinica.Error;

}

Inside datos we have:

Class EsquemasDatos.HistoriaClinica.ConsultaCitas Extends (%Persistent, %XML.

1
0 770
Question Yone Moreno · Mar 26, 2020

Hello,

We are developing a Transformation and we are wondering: how could we debug and show a XML message which is being an output from a transformation, without storing it into request/response/callrequest/callresponse? We mean, how could we show a context variable in the production?

For example, let's have a transformation which stores an appointment in a variable called: context.especializadasConFormatoPrimarias

How could we show in the Production?

1
0 293
Question Yone Moreno · Mar 26, 2020

Hello,

We have a tranformation where we would like to convert a date from the following format:

"'dd/mm/yyyy' 'hh:mm'" (double quotes are just visual to indicate this is a string)

to date and time separated:

date: dd/mm/yyyy

time: hh:mm

We have already splitted the datetime into date and hour as follows:

  set fechaHora = source.result.GetAt(indice).
1
0 508
Question Jack Smith · Oct 27, 2019

We have a data transformation where source is object collection (populated from a json file)  and target is EnsLib.EDI.XML.Document.

If source file is large enough, transformation fails and we get <store> error and I quickly found this:

https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=EBPLR_DTL_foreach which at the bottom in "Avoiding <STORE> Errors with Large Messages" section tells to: 

"As you loop over segments in a message or object collections, they are brought into memory.

1
0 555
Announcement Evgeny Shvarov · Mar 4, 2020

Hi Developers!

In March we are starting our first InterSystems IRIS Programming Contest! It's a competition in creating open-source solutions using InterSystems IRIS Data Platform.

The topic for the first contest is InterSystems IRIS, Docker and ObjectScript!

The contest will last three weeks: March 9-31, 2020

Prizes:

There will be money prizes for Experts Nomination - winners will be determined by a specially selected jury:

🥇 1st place - $2,000 

🥈 2nd place - $1,000 

🥉 3rd place - $500

Also, there will be Community Nomination - an application that will receive the most votes in total:

🏆 1st place - $1,000

And we provide winners with high-level badges on Global Masters.

27
4 1965
Article alex kosinets · Mar 17, 2020 2m read

The client part of the code for this game is on the MS Excel sheet and consists of:

  1. m-commands  for random arranging ships on the playing field  (21 cells)
  2. m-command to enable on-click m-trigger on all 100 cells of the playing field (1), red font
  3. m-trigger (1), red font

The server part of the code (vmx.ro) is installed onсе, it not change depending on the task, is the same for IRIS, CACHE, 16, 8-bit encoding, any applications, games, reports.  The server side creates and maintains ‘virtual excel’ in M.

0
0 617
Question Michel Bruyère · Mar 13, 2020

In one of my class, I use Stream.Read() method of the %Stream.Object class.

  • Method OnRequest(request As Ens.StreamContainer, Output response As %Library.Persistent) As %Status
  • {
  •    SET sc=$$$OK
  •    SET strRequest=request.Stream.Read(,.sc)
  • ​​   $$$TRACE($L(​​strRequest))
  • ....  

The Trace value gives 32,000. But the Read() method of the %Stream.Object class specifies 32,656 by default.

  1. Method Read(ByRef len As %Integer = 32656, ByRef sc As %Status) As %CacheString
  2. {
  3.    Set len=0,i%AtEnd=1,sc=$$$OK
  4.    Quit ""
  5. }

Why ?

Best Regards.

2
0 1000
Article Evgeny Shvarov · Mar 13, 2020 2m read

Hi developers!

Suppose you have a Github repository with ObjectScript classes but without a Docker environment.

Recently I published a repository with a set of files that form a universal Docker and VSCode environment to let you either import and run your repository in InterSystems IRIS Community Edition on Docker or turn your repository into Docker and VSCode environment for InterSystems IRIS Community Edition.

So in one sentence:

Unpack these files in your folder and you have the Docker and VSCode environment for your InterSystems IRIS ObjectScript application!

See the details below.

0
1 799
Question Yone Moreno · Mar 5, 2020

We would like to be able to store accented characters into an API.

Currently our Rest Operation is the following:

Class Operaciones.REST.NotificacionesPUSH.CrearNotificacion Extends EnsLib.REST.Operation
{ Parameter INVOCATION = "Queue"; Method CrearNotificacion(pRequest As Mensajes.Request.NotificacionesPUSH.CrearNotificacion, pResponse As Mensajes.Response.NotificacionesPUSH.CrearNotificacion) As %Library.Status
{
Set body = {
     "app_id"(pRequest.idApp),
     "headings"{"en":(pRequest.notificacion.titulo),"es":(pRequest.notificacion.titulo)},
     "subtitle"{"en":(pRequest.notificacion.

10
0 2774
Question Yone Moreno · Mar 5, 2020

We need to get service's both source and target names. We have checked that we could obtain them in the service:

set ^sourceName = ..#SERVICENAME

However we would like to get it directly from the BPL. We have tried:

Set SourceConfigName = ..%PrimaryRequestHeader.SourceConfigName
  $$$LOGINFO("SourceConfigName "_SourceConfigName)

And the compiler outputs:

ERROR: Procesos.HistoriaClinica.ConsultaDatosHCEPaciente.Thread1.cls(S161+247) : MPP5376 : Method or Property '%PrimaryRequestHeader' does not exist in this class.

How could we access to %PrimaryRequestHeade

2
0 894
Question Kevin McGinn · Feb 28, 2020

I am new to Intersystems cache COS scripts (cache is a client system). ThoughCOS scripts basically appear to be straight forward, I am having issues with the logon credentials. From what I have found in the documentation, the first 2 lines of the script contain the U/P. When running the script, the username is picked up correctly but the password is not. Granted, having U/P in a script is not ideal but will suffice as a matter of learning if I can figure out the formatting/syntax required. Any help on this would be appreciated.

Kevin McGinn

3
0 391
Question Ilmija Asani · Feb 18, 2020

Hello,

we are trying to figure out if there's a way to create a SOAP Envelope by using SOAP classes.

Right now we use a string to define the envelope element.

The string looks like :

<soap:Envelope xmlns:soap='http://www.w3.org/2003/05/soap-envelope' xmlns='urn:oasis:names:tc:SAML:2.0:assertion'>
    <soap:Header>
        <add:Action xmlns:add='http://www.w3.org/2005/08/addressing'>urn:rve:AuthenticateAndGetAsserti…;
        <add:MessageID xmlns:add='http://www.w3.org/2005/08/addressing'>urn:uuid:_MessageID_</add:Message…;
        <add:To xmlns:add='http://www.w3.
2
0 899
Announcement alex kosinets · Feb 8, 2020

Ladies and gentlemen, good news for our town.

It finally happened  - M was put in the cell.

And feels great there. Maybe it not a prison but an Excel cell.

Being there, he leads the whole M-gang. As well as conditional formatting in EXCEL.

Close integration of excel with the database provides a new convenient design tool.

Interactive reports, input forms, diagrams are generated only by m-commands in cells, without classical programming.

More detailed on https://github.com/mx-alex/MX

We will monitor the development of the situation and answer your questions.

best wishes

Alex

19
1 1685
Article alex kosinets · Feb 29, 2020 4m read

There is a special Query for reporting, it takes one cell of Excel. Example :

?$$omQuery 113^oPeat | Country   Country:Province   Date   Product:Date   Date:Product:-zr   | tn EURO | zrzr| | if Date'<%XD81,Date'>%XD82 |  set zrzr=zr,EURO=summa

The omQuery sets the structure and content of the required documents as well as filters and data processing procedures.

In one request, up to 9 reports are created, with subtotals by group.

0
0 271