Question Stefan Cronje · Jul 18, 2024

Hi folks,

We are in the process of migrating from Ensemble to IRIS.

After the migration I would like to find all usages of deprecated classes and methods in all of our code. This is to align with the changes in package like %SYSTEM.SQL for example.

Is there an easy way to do this, or maybe a tool that can assist?

Thanks.

7
1 374
Question Stefan Cronje · Apr 5, 2024

Hi all,

I have a situation where I am writing to global from different processes - let's call it an Event Queue.
There is then a different process that uses $order to read through the data - the PubSub processing BP.

Sometimes the writing of this global will form part of a transaction that also insert data into other tables, using tstart and tcommit.
If there is some issue, it will roll back, and the entry written to the global will also roll back.

The problem is that the process that reads from this global, picks it up, regardless of the IsolationMode I set for the process, as IsolationMode is

6
0 242
Question Stefan Cronje · Dec 21, 2023

Hi,

The system I am working on processes large numbers of records. Inserts, updates and so forth. There are multiple processes that can potentially work on the same table at the same time. 

It is an almost impossible task to try and time these processes to not run at the same time, due to volumes, SLAs, etc.

Every now and then there are a few locking issues, Not many considering the volumes. It is just a bit of a nuisance as we need to reprocess these records later.

All the selects on the processes run at IsolationMode 0 and the transactions are kept as short as possible.

Is there a way to see

6
0 425
Discussion Stefan Cronje · Dec 15, 2023

Hi all,

The last time I used CSP was back in 2008, so I am very rusty on it.
This question might have been asked many times, and the answer probably is that it is a matter of preference.

Are there scenarios to which CSP pages is easier/better to use than classes extending from %CSP.Page?
I want to build a little thing and don't want to start at the wrong end.
Doing an API-based, heavy client-side framework is not a requirement, and I would prefer not to do it that way.

Some of the criteria

  • Users need to do a login.
  • RBAC per page using the instance's Users, Roles and Resources
  • Call some
4
0 389
Question Stefan Cronje · Dec 15, 2023

HI *,

So last night I was doing a deployment which had a query to select from a large dataset of joined tables, to iterate through and populate data in a new table.

This was done in a classmethod using embedded SQL and the %PARALLEL keyword.
On a testing environment with the same dataset, this worked perfectly a few days earlier.

It was going to be a long-running process, so we started it from a csession using the JOB command.
Then get the PID with $zchild, go to Processes and monitor it there.
It would terminate after a minute or so with a <STORE> error.
The per process memory is set at 1GB.

2
0 332
Article Stefan Cronje · Nov 6, 2023 2m read

Hi folks,

I have published a new package on OEX.

In short, it is a string datatype that support various configuration options and flexibility.

Business Case

  1. You have some library classes and other reusable structures that you use across systems.
  2. You have a "multi-tenant" environment where one code base is shared amongst tenants, which each have their own namespaces configured.
    1. Specific rules and business processes are stored in that tenant's namespace.
    2. The core class structures are the same.
    3. Tenants have different data validation requirements and some want data consistency across systems
0
0 404
Question Stefan Cronje · Feb 23, 2023

Hi all,

I might be losing my mind or do not understand how ObjectScript does string comparisons, but the following does not look right to me.

Is it really possible that you can't compare non-numerical strings other than with an equals or not equals?

USER>w ("45" < "46")
1
USER>w ("45" > "46")
0
USER>w ("V45" < "V46")
0
USER>w ("V45" > "V46")
0
USER>w ("V45" <= "V46")
1
USER>w ("V45" >= "V46")
1

In Python:

>>> print("45" < "46")
True
>>> print("45" > "46")
False
>>> print("V45" < "V46")
True
>>> print("V45" > "V46")
False
>>> print("V45" <= "V46")
True
>>> print("V45" >= "V46")
4
0 379
Job Stefan Cronje · Feb 23, 2023

Job description

We are looking for a software development intern. We are a small company, and this creates the opportunity for you to help grow the business, and your career with it.

Responsibilities

Learn new things.
Try new things.
Do coursework.
Resolve defects and assist in adding new features.
Contribute towards our open-source repositories and start new ones.
Create and enhance Visual Studio Code extensions.
Be actively involved on developer communities to learn and contribute.
Challenge the status quo.

What we are looking for in you as a Person

Problem solver.
Perseverance.
Willingness to

0
0 343
Discussion Stefan Cronje · Feb 12, 2023

Hi Community,

A long time ago, I create a package for a String datatype that works with Regular Expression. It is quite a simple solution.

This can work well with packages like the OpenAPI-Suite, where you can then use the "Regular Expression String" as the type for properties of the validator objects where the Swagger contained a Regular Expression.

I am proposing we start a common package of datatypes for use. The package name to use can be provided by the admins.

The old package of mine can be removed, as it is also on a very old git profile on an email I no longer have.
String Regular

3
0 290
Discussion Stefan Cronje · Feb 10, 2023

Hi Community,

Please read this when you have the time and keep an open mind. Also, you are welcome to tell me it is a terrible idea.

The main reason for this post

If you look at NPM, it has 1.3 million packages. Now ask yourself, is this an achievement or a nightmare?
How many of those packages are no longer supported?
How many of those packages break compatibility on version changes?
How do you know which one to use? 

My opinion on the purpose of Opensource

Opensource is there to enable software professionals with different skills sets, experience and background to contribute towards a common good,

13
2 371
Question Stefan Cronje · Feb 7, 2023

Hi all,

In the days when I was still using studio, the indentation character of choice was tab, due to misalignment of code when using non-monospaced fonts.

In VSCode when I create new class files, this defaults to 4 spaces. Where and how do I set the default indentation for ObjectScript class files?

Also, with python it should be spaces. So what is recommended when doing python script inside objectscript classes?

Thank you.

2
0 1636
Article Stefan Cronje · Jan 25, 2023 3m read

Hi folks,

I am announcing a new package I have loaded on the OEX, which I am also planning on entering into the contest this month.

In a nutshell, what it offers you are the following.

  • Base classes to use on Persistent (table) classes for InterSystems IRIS to keep record history  
  • These classes enable the historizing of persistent class records into another persistent class when touched.  
  • This provides for a full history of any record. 
  • It allows for record rollback to a specific version.  
  • It can automatically purge old history records.

Do you need it?

Have you ever had the scenario

2
0 431
Question Stefan Cronje · Jan 25, 2023

Hi *,

I want to dynamically generate the arguments of a method during compile time.

'For example, I want the following method

ClassMethod DoCleverStuf() As %Status [ CodeMode = objectgenerator ]
{
    do %code.WriteLine("    Set tSC = $$$OK")
    ...
}

to look like this in the .int code.

ClassMethod DoCleverStuf(pValue1 As %Integer, pValue2 As %String) As %Status [ CodeMode = objectgenerator ]
{
    // some generated code will be here
}

Is this possible? Or alternativel;y, can I generate a whole method at compile time?

Thanks.

2
0 334
Question Stefan Cronje · Jan 22, 2023

Hi all,

I am trying to use some process private variables (percent variables) in Triggers.

I am referring to values from $System.Process, like the ClientIPAddress and CSPSessionID.
These do to not contain values and I suspect it is bacause of scope. I also checked, and the %session variable is not available if the change originated from a CSP request.
I know that in triggers the scope of the variables are to be kept local, that is why NEW is to be used.

Is there a way to access the Process Private Variables in Triggers or get $System.Process to return the correct values?

Thanks.

10
0 487
Question Stefan Cronje · Feb 1, 2022

Hi,

I am using VSCode together with IRIS 2021.1.
When using Shift+Alt+F to reformat a class file, it pops up with the below message. When I select install formatter, it routes me to the extensions page, where it shows the extensions as being installed. Any advice will be appreciated.

 

8
0 1614
Question Stefan Cronje · Jan 7, 2022

Hi all,

I am busy trying out the %UnitTest.TestProduction class to implement some automated production testing.

I have a scenario which I am not sure how to get the final results of for assertion. Below is the scenario I am trying to test, with comments on what I have done.

  • Receive a  request on a service (Service A).
  • Send the request to the BPL
    • I use SendMessage of the TestProduction class.
  • The BPL sends a request to a Business Operation (SendToProvider)
  • The SendToProvider operation sends a message out to the Service Provider.DeferResponse is done.
0
1 422
Question Stefan Cronje · Nov 10, 2021

Hi,

We need a web-based SQL tool to connect to Ensemble/Cache, that will offer more functionality than what the Management Portal offers.
It needs to be web based, so that we can host it on a machine that has connectivity to the server via the superserver port. We (the devs and support) only have browser access to the environment via Remote Desktops, hence the requirement.

Has anyone gotten OmniDB to connect to Ensemble/Cache? If so, can you please advise on how to configure it?

Any other suggestions for such a tool are also welcome.

Kind regards,
Stefan

1
0 344
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 335
Question Stefan Cronje · Feb 26, 2021

Hi *.*,

I am new to IRIS, IKO and IAM. I have read through a lot of the documentation, but I need clarity on some things that I can't find in the documentation.

  • Which Load Balancer does IKO use on the ingress?
    Can it be set to use another one? e.g. nginx-kubernetes + GCP LoadBalancer?
  • On a multi-compute and multi-data instances deployment, how do you get to the Management Portal of each instance?
    i.e. The load balancer is the only point of entry into the cluster exposing 1972 and 52773, so how do I route to the individual instances?
  • If using IAM, will this be on a VM running in a
3
0 472
Question Stefan Cronje · Jan 13, 2021

Hi,

I am investigating creating builds from TravisCI, which will pull the source from github.
This will also involve a code review process, pull request, etc.

It will be done in Multiple phases. The first one will not involve automated testing using TravisCI yet. It will only involve travisCI pulling the latest code from github and creating a release for testing(A deployment file in a format that can be loaded by Ensemble0)

What I want to know is: Is there a way or tool available to take the source files and create an XML file which can be used for deployment to Ensemble?

Kind regards,
Stefan

8
0 414
Question Stefan Cronje · Oct 25, 2018

Hi,

The context of the rule set contains an ArrayOfDT(I've also tried Collection.ArrayOfDataTypes).

I need to access an element using its key in the rule set using the assign function. I've tried everything I can think of and searched the documentation, but can't find anything. It is probably very obvious.

Can you please help?

1
0 445
Question Stefan Cronje · Oct 20, 2018

Hi,

We have a few projects and some of these projects share code "libraries". Some of which are persistent classes that are used by multiple systems. All these are currently deployed on Ensemble. We want to move some of the smaller ones to the cloud and make use of IRIS.

The challenge is that once we synchronise the code to IRIS from Atelier, then IRIS changes the storage definitions, which then creates changes to the files.We do not want to commit all these changes to git as it will happen again once someone synchronises with Ensemble.

2
0 417
Announcement Stefan Cronje · Oct 7, 2018

Hi,

This is available on github and wairing for approval on the Open Exchange.

It  allows you to

  • "Serialize" any class instance that extends from the adapter to a DynamicObject.
  • "Deserialize" a DynamicObject to a class instance that extends the adapter.
  • References to other classes can be followed recursively and serialized.
  • Arrays and lists of Serial objects and DataTypes are handled for serialization en deserialization
  • Arrays and lists of Persistent objects can be serialized in full, on the deserialization it can't create referenced objects, but an array or list of ID values can be provided and it
0
1 396
Question Stefan Cronje · Aug 4, 2018

Hey folks,

I am new to IRIS and cloud platforms. I've done the InterSystems IRIS Experience on the learning site and read a lot of the online documentation. What I am unable to figure out is which type of package or option you will use on the cloud provider.

AWS for example, has AWS EC2, Elastic Beanstalk and some other products geared towards Docker containers.
Azure has Kubernetes and some other options.

Is IRIS and Docker deployed using the "Docker" products of the cloud providers, or should one get VM's on which CentOS is installed and Docker on top of that?

5
0 714
Question Stefan Cronje · Jul 17, 2017

Hi,

I have a situation where I write a character stream to a file. The file content gets signed and the signature is sent to a service provider together with the file content.

The signing is done using openssl.

This works perfectly on a dev PC, which is runnning Windows and has a little-endian architecture.

The problem is as soon as I do this on the server, which has a big-endian architecture, the signed value is incorrect according to the service provider.

The content is signed using RSA SHA256 with PSS padding.

I've had a look at $nconvert, $sconvert, etc., but can't get to a solution.

Is there a

8
0 3477
Question Stefan Cronje · Jul 10, 2017

Hi everyone,

I have a project which requires the sending of JSON messages to an external service provider using REST. The service provider requires the message contents to be signed.

Their instructions:

  1. Add a header called "Date" with the the date and time in a specific format - done
  2. Add the client's certificate password in a field in the header - done
  3. Create a string which consist of the {Date}{newline}{Password}{newline}{etc}{Message Body}.
    1. Convert to a UTF8 byte array
    2. SHA256 sign the value with the certificate and private key and use RSA PSS padding
    3. Base 64 Encode the value and place it in a
8
0 14482
Question Stefan Cronje · May 23, 2017

Hi,

I have created a Business Service which uses the EnsLib.File.InboundAdapter. This service will call a business service which will create an acknowledgement file in a directory specified in the operation after loading the parsed file into some temporary tables.

In order to create the acknowledgement file, I need the original file name. In the OnProcessInput of the service, it receives a stream of file data, and I can't find a way to get hold of the file name.

Any advice will be appreciated, thank you.

5
0 1568