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

Article Danny Wijnschenk · Nov 1, 2017 8m read

Advent of Code is a series of 25 small programming challenges, it's an ideal way for beginners to start learning a computer language, and for advanced people to sharpen their programming skills.

There are small and bigger puzzles, which you can solve typically in half an hour to a few hours. (Looking at the leaderboard, the top aces can do them in less than 10 minutes.)

Advent of Code is created by Eric Wastl, you can find all info on https://adventofcode.com/.

To help you get trained for this year's challenges which start at December 1st, we* will try to solve and comment the puzzles from 2016.

0
1 1453
Question Sergio Martinez · Oct 16, 2017

Hi,

I know you're doing a big effort to build a new IDE in Eclipse ecosystem but Visual Studio Code is a new an even better and faster tool for coding... did you have any plans to release any COS extension for it in the near future? There you can already find extensions for all current more common progrmaming languages and it would be great to have COS as one of them.

Thanks

5
0 1555
Question Ruslan K · Oct 18, 2017

I have a class. In class there is an index. This index is for quick search on name property.

Class User
{

.....

Property Name as %String;

Index NameInd On Name;

.....

}

This class is mapped to some global ^GL(userId) = "Name*other data....****"

And there is also index global ^GLNameIndex(Name, userId) = ""

When I add new User entry through class, f. i.

S user = ##class(User).%New()
S user.Name = "Some name"
​D user.%Save()

calling method %Save() adding new entry to index automatically.

6
0 1724
Question Thembelani Mlalazi · Oct 13, 2017

I am trying to read a csv file and transfer it to a XML file without storing the objects to a database I have this code here doing the reading and have another method transferring the object read to a file but the reading one reads fine when it comes to the converting one I run to problems nothing happens any help appreciated

ClassMethod Write(obj, directory As %String = "C:\40_Test\") As %Status
{
    set writer=##class(%XML.Writer).%New()
    set writer.Indent=1

  
    // set the file
 
     Set filename=directory_"Generatedfile"_".xml"
    set status=writer.
2
0 872
Article Rubens Silva · Oct 13, 2017 2m read

Hello again and welcome to the next tutorial on this series: Part 4 - Sharing data across router methods.  Here we are going to learn how to share a object containing data that is available for read across every router methods.
You're required to complete at least the Part 1 before entering this one. Still, this is supposed to be a really short tutorial, since there isn't much to be said about data sharing.

0
0 573
Question Mack Altman · Sep 26, 2017

Recently, we scheduled two tasks (1008 and 1009) within Task Manager. Task ID 1008 is set to run after Purge Tasks (%SYS-ID:3), and Task 1009 is set to run at 7:00:00 each day.

In attempt to provide as much detail as possible, each of the tasks are as follows:

  • Task 1008 WHILE (($p($h,",",2) < $ZTH("10:00 PM")) && ($P($g(^Task.1008(+$h,$j)),"^",1) = +$h)) { J ^ROUTINE, ^ROUTINE2 D SUB^ROUTINE3 H 5 }
  • Task 1009 WHILE (($p($h,",",2) < $ZTH("10:00 PM")) && ($P($g(^Task.
4
0 947
Article Rubens Silva · Sep 27, 2017 4m read

Hello again and welcome to the Part 3 - Using the SQL API!
If you have been wondering about how to use SQL along with Frontier, you came to the right place. That's because since Frontier wraps the common Caché SQL API within it's own, you need to use the API provided from it. But you don't need  to worry about its learning curve, because the Frontier SQL API is really simple.
If you arrived here without checking the Part 1, I'd recommend you doing so, because Part 1 covers the essential for getting started with Frontier routers.

0
0 1028
Question Marco Blom · Sep 22, 2017

I have a tablepane which uses Sql to get his data:

As you look at the ''Business" column i have to type a number (key Value) to get the [Fashion Retail] value.

How do I have to modify the Built WHERE clause in order to filter on name /description of  the Join Fields instead of the key value? I would like to filter on name/description rather than a key value. Some sample code is appreciated! Thanks in advance.

1
0 350
Question Maks Atygaev · Sep 13, 2017

(Photo by Jeremy Thomas on Unsplash)


Dear Developer Community!

My name is Maks.

I developed DeclarativeCOS framework for declarative programming on COS.

Today I want to ask you about New Programming Language.

I have an idea to create new programming language which could be translated to COS classes / routines or even to int-files.

So, lets suppose it is happened. What do you want to see in such language?

Please feel free to say your minds. It is open discussion.

15
0 1542
Question Mack Altman · Sep 6, 2017

Currently, we are utilizing batch jobs at the OS level to kick off routines that watch for files. We are trying to convert these processes to be performed by the Task Manager.

The routines have while loops and perform while loops so long as the time parameters are being met.

What's the best way to ensure Task Manager kicks them off after the completion of the shutdown/backup/start process is performed, which we do nightly? I want to ensure that it starts it regardless of the time that we've set.

13
0 1076
Question Conor Browne · Sep 19, 2017

Hoping someone can help.

I need to convert a timestamp from the following format (YYYYMMDDhhmmss e.g. 20160105125915) to UTC time in the same format.

I presume I need to convert it to the system format ( like $HOROLOG ) and then use something like ConvertTimeStampToHorolog or perhaps LocalWithZTIMEZONEtoUTC but not sure of the syntax.

Thanks,

Conor

8
0 4312
Question Mario Birk · Sep 21, 2017

Hello everybody,
we would like to be able to analyze a rather complex software application, which has been programmed in “M” for a number of years by different developers, by means of a tool.
Our goal is to find a starting point for a code refactoring process. In the long run we would like to gradually eliminate the code growth points.
Does anyone know of a tool that can help us to do this?
So far, we have only found "RE / m" etc. by George James Software, but we do not yet know if these tools will help.

Your support and suggestions will be greatly appreciated. Thanks.

4
0 434
Question Donald Bugbee · Sep 15, 2017

Hi all.

I have been using  a command pipe to open/run UNIX scripts for months without issue.  We recently installed the 2016 Caché Upgrade and now I'm getting the following error when opening the pipe:

<PROTECT> *OPEN[Q](|CPIPE|)

I assume some security or permission setting is to blame, but I'm not sure exactly what.  Here's the snippet of code...

s cpipename="|CPIPE|"
s filepath="/path/script"
​o cpipename:(filepath:"R"):10

Any feedback would be greatly appreciated!

4
0 733
Question Murillo Braga · Aug 31, 2017

Hello guys,

I was wondering whether there is another alternative to extracting a certain string out from a bigger one, rather than using the function $piece.

Maybe regular expressions? Another specific function?

Example:

Big string:

NAD+SLA+++TextIsHereNAD+SLA+++TextIsHere

String I want to extract:

TextIsHere

Function I'm already using:

w $piece("NAD+SLA+++TextIsHereNAD+SLA+++TextIsHere","NAD+SLA+++",2) > Will ouput TextIsHere
w $piece("NAD+SLA+++TextIsHereNAD+SLA+++TextIsHere","NAD+SLA+++",3) > Will ouput TextIsHere

Thanks!

3
0 859
Question Kevin Furze · Sep 13, 2017

Cache 2016.2.1

the system offers $LISTNEXT as a way of looping  in $LISTs and the documentation says this is much more efficeint than writing

for i=1:1:$LISTLENGTH(myList) { set value = $LIST (myList,i) }

I want to walk backwards in the list,

is there a $LISTPREVIOUS or do I have to use the followng syntax to achie

 for i=1:-1:$LISTLENGTH(myList)

kevin

4
0 657
Article Nathan Ng · Sep 7, 2017 4m read

Introduction

Twilio is a great tool for programmatically initiating and managing phone calls. In this example we'll go over basic account setup, create a Cache Class to manage our interaction with the Twilio API, and initiate a phone call from the Cache Terminal.

The full Class used in this example is available on GitHub as well.

Setup

  1. Create an account on twilio
  2. Add a new phone number under the Manage Numbers Page.
    • This will be the number you call from.
  3. Add a new caller ID under the Verified Caller IDs Page.
    • This will be the number you call to.
0
1 1097
Article Sean Connelly · Apr 27, 2017 7m read

XDATA is used for a whole host of ISC libraries to store things like Zen pages, BPL logic and DTL transformations.

XDATA is the equivalent of XML config files of the JAVA world and JSON config files of the JavaScript / NPM world.

Whilst Atelier looks to shift source code to the disk, XDATA will remain a key component to source control our projects config / meta data.

I come across many developers who overlook XDATA, seeing it as an internal function of Cache and Ensemble and instead use globals to move meta data around, I've been there myself.

4
0 1371
Question Paul Riker · Sep 5, 2017

Is it possible to execute a sql update statement from objectscript? This code isn't working for me.

Set tSQL = "UPDATE table Set Status = 'Completed' WHERE ID in (1,2,3,4)"
Set tStatement = ##class(%SQL.Statement).%New()
Set tSC = tStatement.%Prepare(tSQL)

If I write my dynamic sql to the event log, copy and execute it in the Management Portal, it works fine.

4
0 1011
Question Sean Connelly · Aug 25, 2017

SOLVED

tl;dr how can you tell if a number is really a string

The original question has been updated/improved.

Equality comparisons on floating point numbers will produce different results...

"1.1"=1.1  //is true!

"0.1"=0.1  //is not true :(

This second comparison can be fixed with...

+"0.1"=+0.1 // is true!

The problem is, what if we don't realise that a value is a stringy number, or just overlook implementing this defensive check.

One solution would be to lint check %Float properties and return types that should originate from a number and not a string, as discussed here...

31
0 1327
Question Shawn McCartt · Aug 16, 2017

Is it possible to dynamically adjust the RetryInterval andFailureTimeout settings in a BPL?

I've got a business process that calls a web service operation to get a session ID from an external system.  There is a string property returned in the body of the response that indicate an exception occurred in the external system. I have code in the BPL that examines the property and sets the status property to an error status when that occurs.

Depending on what the value is I want to adjust the RetryInterval and FailureTimeout values used in by the system when the ReplyCodeActions is set to E=RD.

3
0 867
Question Craig Regester · Aug 30, 2017

Good afternoon - 

I'm in the process of learning to make COS calls to REST-based web services and while I am having success, I'm struggling on how to parse out the results (I admit I'm very green at this):

Here's the code retrieving the JSON response:

w !,"Get the JSON"
Set Result = {}.%FromJSON(Request.HttpResponse.Data)

This has Result as a Library.DynamicObject.

I can then write out the response using:

w !,Result.%ToJSON()

This works, I can see the response is valid and what I want.

4
1 1446
Question Alexey Maslov · Aug 17, 2017

Hello everybody.

What I have is a criteria how to select "my" strings. What I need is to replace all of them with macro calls (using the same strings as arguments) in all classes of current namespace.

I was ready to write straightforward code, but at the last moment decided to ask the community: maybe I've overlooked a smarter option?

Any comments and advices would be great appreciated.

6
0 626
Question Evgeny Shvarov · Aug 28, 2017

Hi, folks!

I'm sending emails with %Net.MailMessage.

How can I add a new line for the email body?

The code is:

dim msg as %Net.MailMessage = ##class(%Net.MailMessage).%New()
set msg.Charset="UTF-8"
do msg.TextData.Write("Dear  "_Username)
do msg.TextData.Write("Line1")
do msg.TextData.Write("Line2")
And I'm getting in email:
Dear UserLine1Line2

How can I get:

Dear User

Line1

Line2
8
1 1900