David.Satorres6134 · Nov 23, 2025 go to post

To have excel opening automatically, you can set as the first line of the csv this meta-data:

sep=|

with that, excel will know the separator is that character and will spare you the extra-steps :)

David.Satorres6134 · May 18, 2025 go to post

Hi Yaron,

Take a look at the option "Reschedule task after system restart" and if it's set to "Yes". I'd say that when set up to "No" it will run all "missed" loops. There is something related in the upcoming tasks: https://docs.intersystems.com/supplychainlatest/csp/docbook/DocBook.UI…

  • Suspend — Lets you suspend the task; a Do you want to reschedule task when task is supposed to run? drop-down list lets you specify:
    • No. Upon resuming the task, the Task Manager attempts to run missed instances of the task before returning to the normal schedule.
    • Yes. Upon resuming the task, the Task Manager returns to the normal schedule without attempting to run missed instances.

Hi,

I usually monitor the time execution line by line with ^%SYS.MONLBL. But I don't know if it works well with embedded python (it won't with an external call).

David.Satorres6134 · Feb 19, 2025 go to post

That's it, thanks Timo!
Using ##class(%DeepSee.CubeManager.Utils).GetCubeGroups(.groupsList) I can get a list of cubes and the order to build, and then I get the class from ^DeepSee.Cubes("cubes"). Once everything sorted, only need to launch $System.OBJ.Compile() for each class.

David.Satorres6134 · Feb 18, 2025 go to post

Hi Enrico,

Thanks for your answer. This would mean me taking care of the dependencies, and as the cubes are actually dependant because of relationships I expect any intersystems tool to either compile the class managing the dependencies, or to compile (not build) a cube.

David.Satorres6134 · Jan 15, 2025 go to post

It should work, yes. But as any ECP connection, some operations might be really slow (comes to my mind that $increment has a very poor performance and it's better to use $sequence).

David.Satorres6134 · Jan 13, 2025 go to post

Hi Andreas,

If I understand it correctly, all databases are in the same instance but simply in different namespaces. I've always overcome this by simply mapping the packages and globals over the namespaces (or in %ALL). In what is your demo enhancing it?

Thanks for the approach, though! :-)

David.Satorres6134 · Dec 18, 2024 go to post

Hi,

Using COS is pretty simple. As you loop the global with $o() simply put the ID value in an array or local global at the last line before going into the loop for the next id. Then for each loop, if $d(array(id)) it means is OLD, otherwise is NEW.
Right?

David.Satorres6134 · Dec 10, 2024 go to post

Hello!

I realized as well that this global seems to keep increasing and the purge standard utility doesn't seem to do anything. How did you solve it?

SOLVED: I found out that using this it can be purged:
d ##class(EnsLib.HL7.Message).Purge(.deleted, 7)

Many thanks,

David.Satorres6134 · Nov 20, 2024 go to post

Thanks for your answer. I don't doubt AutoParallel works at all, I simply can't have it working in any of the queries I tried, even with AVG, SUM, etc., using 1M or 10M rows. I gave you all the info, you can run yourself if interested.

So, I presume the best approach (for me) to be in control of what is happening into the system is to add %PARALLEL whenever I want it to effectively do it. Old good habits never die :-D

David.Satorres6134 · Nov 15, 2024 go to post

hi! 

Thx for your reply. As explained to Ali Naser I've done some other testing... I've created this class and populated with 1M records. Then I've run some queries and still no parallel :'( I can't find any situation where the autoparallel works on its own.

Example queries:

select Address, City, Name from MCCH.ClassTest where age>10
select Address, City, Name from MCCH.ClassTest where age>20
select Address, City, Name from MCCH.ClassTest where age>30

Class:

Class SQLUser.ClassTest Extends (%Persistent, %Populate){

Property Name As %String(MAXLEN = 255);
Property Age As %Integer(MAXVAL = 100, MINVAL = 1);
Property Address As %String(MAXLEN = 255);
Property City As %String(MAXLEN = 255);
Property State As %String(MAXLEN = 255);
Property Zip As %String(MAXLEN = 255);
Property Country As %String(MAXLEN = 255);
Property Comment As %String(MAXLEN = 255);
Property Hobby As %String(MAXLEN = 255);
Property JobTitle As %String(MAXLEN = 255);
Property Company As %String(MAXLEN = 255);
Property PhoneNumber As %String(MAXLEN = 255);
Property Email As %String(MAXLEN = 255);
Property Gender As %String(MAXLEN = 1);
Property Ethnicity As %String(MAXLEN = 255);
Property Race As %String(MAXLEN = 255);
Property Religion As %String(MAXLEN = 255);
Property MaritalStatus As %String(MAXLEN = 255);
Property Children As %Integer(MAXVAL = 10, MINVAL = 0);
Property Income As %Integer(MAXVAL = 100000, MINVAL = 0);
Property Occupation As %String(MAXLEN = 255);
Property Education As %String(MAXLEN = 255);
Property HomePhone As %String(MAXLEN = 255);
Property MobilePhone As %String(MAXLEN = 255);
Property WorkPhone As %String(MAXLEN = 255);
Property WorkEmail As %String(MAXLEN = 255);
Property HomeEmail As %String(MAXLEN = 255);
Property HomeAddress As %String(MAXLEN = 255);
Property HomeCity As %String(MAXLEN = 255);
Property HomeState As %String(MAXLEN = 255);
Property HomeZip As %String(MAXLEN = 255);
Property HomeCountry As %String(MAXLEN = 255);
Property WorkAddress As %String(MAXLEN = 255);
Property WorkCity As %String(MAXLEN = 255);
Property WorkState As %String(MAXLEN = 255);
Property WorkZip As %String(MAXLEN = 255);
Property WorkCountry As %String(MAXLEN = 255);
Property WorkPhoneNumber As %String(MAXLEN = 255);
Property WorkMobilePhone As %String(MAXLEN = 255);
Property WorkFax As %String(MAXLEN = 255);
Property WorkWebsite As %String(MAXLEN = 255);
Property WorkComments As %String(MAXLEN = 255);
Property FootballTeam As %String(MAXLEN = 255);
Property BaseballTeam As %String(MAXLEN = 255);
Property BasketballTeam As %String(MAXLEN = 255);
Property HockeyTeam As %String(MAXLEN = 255);
Property GolfTeam As %String(MAXLEN = 255);
Property SportsComments As %String(MAXLEN = 255);
Property SportsComments2 As %String(MAXLEN = 255);
Property SportsComments3 As %String(MAXLEN = 255);

Index IdxAge On Age;
}

Rows:
select count(*) from MCCH.ClassTest -> 1.000.000

So, I've decided to run some tests to see if autoparallel is ignored because it's not worth it. I've run the same query after clearing all the buffers (d ClearBuffers^|"%SYS"|GLOBUFF()):

select * from %PARALLEL SQLUser.ClassTest where age>40  : 0.0614 seconds  318 global references 34801 commands executed

select * from SQLUser.ClassTest where age>40 : 0.2377 seconds  600975 global references 2437292 commands executed

So, it seems that it's faster with %PARALLEL, but I can't find out how to write the query so the autoparallel goes on :'(

I have even tried queries without * to check, with no luck. For example:
select Address, City, Name from SQLUser.ClassTest where age>30

David.Satorres6134 · Nov 15, 2024 go to post

Hello Ali,

I didn't think about it :) I've checked and it provides some other plans but none with parallel in it. I've tried creating a new class, populating it with 1M rows and created an index. Then run several queries, and none of them (even alternate plans) are using parallel. Only when %PARALLEL is forced.

Weird....

David.Satorres6134 · Nov 14, 2024 go to post

Hello Eduard,

I guess you mean * could prevent it? I've tried also using only some properties, and it's not auto-parallelizing it neither :'(

I tried the same via ODBC and result keep being the same: no autoparallel :'(
 

David.Satorres6134 · Oct 22, 2024 go to post

Hi, yes it does! Current values are "ntlm,negotiate". I can't change it to any other value, though.. this is managed by the organisation

David.Satorres6134 · Oct 20, 2024 go to post

Hi Kirsten,

Thanks for this. But still doesn't work, I get same error:

Error message: ERROR #864: An authenticated user name is required.
Web Application: /terminal
$I: |TCP|51773|134694
$P: |TCP|51773|134694

Weirdly, with Firefox I'm able to get the auth dialog. I suspect it is related to browser (Edge doesn't work) as I've removed all cookies and cleaned the cache :(

wow! Using a private session works :-O All the testing I did, and never tried out with that.

So, is it then related to cookies?

No, I don't get anything. Simply error 401 and then in the audit I can see how it has automatically taken UnknowUser on it own :)

Hi Scott,

Maybe you could can simply use mapping to split the globals from each namespace in different databases and have them in different disks. In my experience, this speeds up the system as reading from different disks at the same time avoids the problem on the max IO reached by the reader daemon. And you can even have different blocksizes that match better with the global structure.

Splitting routines and globals might sound nice, but you'll end up with a very small one (routines) and a massive one (the data).

Hi!

I can't see the benefits of calling a SP (!!!) instead of "normal" cache code:

Set file = ##class(%File).%New("c:\temp\test.csv")
Set sc = file.Open("R")
While 'file.AtEnd {
       Set line=file.ReadLine()
}
In any case, it's good to know other ways to get to the same place :)

Hi Guillaume,

Oui, but updating the whole system only because of this is not an option. I guess maybe an ad-hoc is the answer... :'( Let's see if someone else can come with another solution.

David.Satorres6134 · Aug 27, 2024 go to post

Hello Eddy,

You might try this:

##class(HS.Hub.HSWS.WebServicesClientAPI).WebMethod("AddFacility").Invoke(##this,"http://www.intersystems.com/hs/hub/hsws/HS.Hub.HSWS.WebServices.AddFacility",pRequest,.pResponse)

There is an AddFacility method in HS.Hub.HSWS.WebServicesClientAPI.

David.Satorres6134 · Aug 19, 2024 go to post

Hi Alexander,

before running the second command, and in order to get the right numbers, shouldn't you clear the buffers so system takes it again from the disk?

ClearBuffers^|"%SYS"|GLOBUFF()

I'd be interested in that too. There must be an utility that simply emulates what the patient viewer is doing, so calling it using the MPIID should give back all the information from a patient, including demographics and encounters data.

I simply can't find it, but I'm pretty sure it's there. Anyone knows?

David.Satorres6134 · Jul 18, 2024 go to post

I use this on Windows to automatically restart any instance. Probably simply changing "\" by "/" will do the trick, and change stopstart for stop:

//restart instance
d ##class(Ens.Director).StopProduction(1,1)
set cmd=$P($ZU(12),"\",1,$L($ZU(12),"\")-2)_"\bin\iris stopstart "_$P($ZU(86),"*",2)
d $zf(-2,cmd)