Robert Cemper · Oct 23, 2021 go to post

what about simply using OR in  your SQL: 

DELETE FROM TableName WHERE ID = 2
                         OR ID = 3
                         OR ID = 4
                         OR <whaever condition>
                         OR <whaever other condition>
Robert Cemper · Oct 22, 2021 go to post

Ah, that's something different.
You require a conversion table by location + a time range when DST is to be applied! 
Location is a static thing to be defined once.
DST is a real challenge as it depends on the region and requires annual adjustment by location.
Including the chance that Europe may split up next year or drop it at all.
It might make sense to get it from an external government source by country.
it is definitely not included in any InterSystems product.   

Robert Cemper · Oct 22, 2021 go to post

as by docs.
By default $ztz shows you geographic offset of your server to Greenwich. No DST !
so for Madrid  "write $ZTZ"  => -60

Robert Cemper · Oct 22, 2021 go to post

I see 2 principal ways:

  • using $ZDateTime(), $ZDateTimeH() function to convert your timestamp to Posix Format and then add or subtract whatever seconds offset you require, with the advantage to easily cross day boundaries
  • or to use system variable $ZTIMEZONE to adjust the timezone of your actual process independent of the system's time zone by any number of minutes
Robert Cemper · Oct 21, 2021 go to post

I miss my code quality!
Satisfying these "rules" kept me more busy than the rest of the code

Robert Cemper · Oct 20, 2021 go to post

Nothing prevents you to have such rules as part of your object definition.
And all the code to define this is definitely part of Caché or IRIS.
Caché and IRIS have excellent SQL support and projection of objects to simple tables.
But you should not try to compare an Object database to any relational database.
Just as a comparison, you won't ask:
  Why does a 747 not have red blinking warning lights at his back like a yellow school bus?

In reverse the 2 you mentioned try to mimic features of an Object database. With limited success.
 

Robert Cemper · Oct 18, 2021 go to post

As by default is READ ONLY as with any installation and you are well-advised not to change this.
What container image do you start ?

Robert Cemper · Oct 15, 2021 go to post

@Sergei Shutov     You missed the point.
validator
is typically stored as part of the individual data record to handle various types of checks within your class to provide the highest flexibility. Think of language or geographically related checking.
You can't bypass the challenge.
Neither by $classmetho() nor any code generator as this is all static code frozen and inflexible a runtime. 

Creating a check routine by field or by record is not a realistic solution 

Robert Cemper · Oct 14, 2021 go to post

SMELLS ! what a waste of energy just for cosmetics and no added value or functionality !
 

Robert Cemper · Oct 13, 2021 go to post

Good Morning,
Now the case seems rather clear to me:

  • in a fresh image of IRIS, the namespace USER is preconfigured for Interoperability/Ensemble and your Copy from should be USER
  • differently in a fresh installed HS image, it is the namespace HSSYS that is preconfigured for Interoperability/Ensemble and your Copy from should be HSSYS
  • namespace %SYS was and is  NEVER configured to work  in Interoperability/Ensemble
  • similar is IRISSYS using as your working database a bad misconfiguration with unpredictable conflicts and consequences  
Robert Cemper · Oct 12, 2021 go to post

There's a mismatch. You see the code but no data at runtime.
Project is always just a subset of Namespace
 

Robert Cemper · Oct 12, 2021 go to post

you seem to miss this mapping by failed installation

[Map.your namespace>
Global_Ens.SecondaryData*=ENSSECONDARY
Global_EnsDICOM.Dictionary=ENSLIB
Global_EnsEDI.Description=ENS
Global_EnsEDI.Description("X","X12")=ENSLIB
Global_EnsEDI.Schema=ENS
Global_EnsEDI.Schema("HIPAA_4010")=ENSLIB
Global_EnsEDI.Schema("HIPAA_5010")=ENSLIB
Global_EnsEDI.Schema("ISC_00401")=ENSLIB
Global_EnsEDI.Schema("ISC_00405")=ENSLIB
Global_EnsEDI.X12.Description=ENS
Global_EnsEDI.X12.Description("HIPAA_4010")=ENSLIB
Global_EnsEDI.X12.Description("HIPAA_5010")=ENSLIB
Global_EnsEDI.X12.Schema=ENS
Global_EnsEDI.X12.Schema("HIPAA_4010")=ENSLIB
Global_EnsEDI.X12.Schema("HIPAA_5010")=ENSLIB
Global_IRIS.Msg=ENS
Global_IRIS.Msg("Arial,Tahoma,Verdana")=ENSLIB
Global_IRIS.Msg("Confirm")=ENSLIB
Global_IRIS.Msg("EDIDocumentView")=ENSLIB
Global_IRIS.Msg("Ens")=ENSLIB
Global_IRIS.Msg("EnsAlert")=ENSLIB
Global_IRIS.Msg("EnsBPL")=ENSLIB
Global_IRIS.Msg("EnsColumns")=ENSLIB
Global_IRIS.Msg("EnsDICOM")=ENSLIB
Global_IRIS.Msg("EnsEDI")=ENSLIB
Global_IRIS.Msg("EnsEDIEDIFACT")=ENSLIB
Global_IRIS.Msg("EnsEDIHL7")=ENSLIB
Global_IRIS.Msg("EnsEDISEF")=ENSLIB
Global_IRIS.Msg("EnsEDIX12")=ENSLIB
Global_IRIS.Msg("EnsEnt")=ENSLIB
Global_IRIS.Msg("EnsLDAP")=ENSLIB
Global_IRIS.Msg("EnsMQTT")=ENSLIB
Global_IRIS.Msg("EnsPushNotifications")=ENSLIB
Global_IRIS.Msg("EnsRecordMap")=ENSLIB
Global_IRIS.Msg("EnsSAP")=ENSLIB
Global_IRIS.Msg("EnsSR")=ENSLIB
Global_IRIS.Msg("EnsSearchTable")=ENSLIB
Global_IRIS.Msg("EnsWf")=ENSLIB
Global_IRIS.Msg("EnsXPATH")=ENSLIB
Global_IRIS.Msg("EnsebXML")=ENSLIB
Global_IRIS.Msg("Ensemble")=ENSLIB
Global_IRIS.Msg("ITK")=ENSLIB
Global_IRIS.Msg("RuleEditor")=ENSLIB
Global_IRIS.Msg("Workflow")=ENSLIB
Global_IRIS.Msg("tahoma,verdana")=ENSLIB
Global_IRIS.MsgNames=ENS
Global_IRIS.MsgNames("Arial,Tahoma,Verdana")=ENSLIB
Global_IRIS.MsgNames("Confirm")=ENSLIB
Global_IRIS.MsgNames("EDIDocumentView")=ENSLIB
Global_IRIS.MsgNames("Ens")=ENSLIB
Global_IRIS.MsgNames("EnsAlert")=ENSLIB
Global_IRIS.MsgNames("EnsBPL")=ENSLIB
Global_IRIS.MsgNames("EnsColumns")=ENSLIB
Global_IRIS.MsgNames("EnsDICOM")=ENSLIB
Global_IRIS.MsgNames("EnsEDI")=ENSLIB
Global_IRIS.MsgNames("EnsEDIEDIFACT")=ENSLIB
Global_IRIS.MsgNames("EnsEDIHL7")=ENSLIB
Global_IRIS.MsgNames("EnsEDISEF")=ENSLIB
Global_IRIS.MsgNames("EnsEDIX12")=ENSLIB
Global_IRIS.MsgNames("EnsEnt")=ENSLIB
Global_IRIS.MsgNames("EnsLDAP")=ENSLIB
Global_IRIS.MsgNames("EnsMQTT")=ENSLIB
Global_IRIS.MsgNames("EnsPushNotifications")=ENSLIB
Global_IRIS.MsgNames("EnsRecordMap")=ENSLIB
Global_IRIS.MsgNames("EnsSAP")=ENSLIB
Global_IRIS.MsgNames("EnsSR")=ENSLIB
Global_IRIS.MsgNames("EnsSearchTable")=ENSLIB
Global_IRIS.MsgNames("EnsWf")=ENSLIB
Global_IRIS.MsgNames("EnsXPATH")=ENSLIB
Global_IRIS.MsgNames("EnsebXML")=ENSLIB
Global_IRIS.MsgNames("Ensemble")=ENSLIB
Global_IRIS.MsgNames("ITK")=ENSLIB
Global_IRIS.MsgNames("RuleEditor")=ENSLIB
Global_IRIS.MsgNames("Workflow")=ENSLIB
Global_IRIS.MsgNames("tahoma,verdana")=ENSLIB
Global_IRIS.Temp.EnsHostTotals=IRISTEMP
Global_IRIS.Temp.EnsPortal*=IRISTEMP
Global_IRIS.Temp.EnsPublic*=IRISTEMP
Global_IRIS.Temp.Ens*=ENSENSTEMP
Routine_Ens*=ENSLIB
Package_CSPX.Dashboard=ENSLIB
Package_Ens=ENSLIB
Package_EnsLib=ENSLIB
Package_EnsPortal=ENSLIB

and eventually also these databases

ENSENSTEMP=C:\InterSystems\IRIS\mgr\ENS\ensenstemp\
ENSLIB=C:\InterSystems\IRIS\mgr\enslib\
ENSSECONDARY=C:\InterSystems\IRIS\mgr\ENS\enssecondary\
Robert Cemper · Oct 12, 2021 go to post

What do you mean by "my namespace extends %sys"
This makes no sense to me.
Did you setup the namespace yourself ?

Robert Cemper · Oct 12, 2021 go to post

which means table does not exist.
SO your namespace is not setup for Interoperability aka Ensemble

as you use Studio jus look for some Ens* classes


if you see nothing of them,
then the setup of your namespace is just wrong

You have to create it again or change your configeratiion manually.  

Robert Cemper · Oct 12, 2021 go to post

I think this should work if your namespace is enabled for Ensemble / Interoperability

Check this in SMP:
SELECT count(IDFROM Ens.MessageHeader

ClassMethod FetchMsgCount() As %Integer [ PublicList = msgCount,SQLCODE ] 
{
    set msgCount=-1
&sql(SELECT count(IDINTO :msgCount FROM Ens.MessageHeader)
If SQLCODE=0 Quit msgCount
Quit SQLCODE
}

or just simpler


ClassMethod FetchMsgCount() As %Integer  [ ProcedureBlock = 0 ]
{
    set msgCount=-1
&sql(SELECT count(IDINTO :msgCount FROM Ens.MessageHeader)
If SQLCODE=0 Quit msgCount
Quit SQLCODE
}
 

Robert Cemper · Oct 12, 2021 go to post

The license-mechanic is a little bit complicated:

  • users are identified by  username@127.0.0.1  (as mentioned already)
  • every new process consumes a license slot over its lifetime
  • each user gets a set of license slots  (typically 25)
  • once this limit (25) is exceeded ALL 25 slots are converted to normal (non-licenses)

As a consequence, a request for license number 26 consumes 25 additional licenses for that user !!
And these licenses come back to in the license slot mode only if ALL processes of that user are terminated
So using a single user (e.g. from CSP) is rather risky in that relation

$system.License.Login()  may help you cross that limit.
from docs:

This function will relinquish a license if the session/process is already holding
one under a different identifier and it will obtain a new one on the behalf of the
user ID provided.
If the MAXCONNECTIONS connection limit per user is exceeded,
the usual transition to one-license-unit-per-connection
will apply to this user identifier.
   
Robert Cemper · Oct 7, 2021 go to post

From the main menu, in DC select members

select the member of interrest

and show all posts

Robert Cemper · Sep 27, 2021 go to post

Hi @Jeffrey Drumm . there are  2 options

#1)
From SMP > Explorer > Classes in %SYS set filter to %IO*.cls  and Documentation

#2)
In Studio in NS %SYS load the class and show Class Documentation
[CTRL + SHIFT +F1]
and see the code. I have seen more thrilling constructs before.

 

Robert Cemper · Sep 26, 2021 go to post

@Marlin Mixon 
 It is just not possible the way you tried. Because: (from class docs)

Move to this position in the stream. If this suceeds then return true, else return false. Note this implementation is not efficient because it searches from the start of the stream,

This means it does a Rewind() and a Read(position) 

• method Write(data As %RawString) as %Status

Appends the string data to the stream and advances the current stream position by the number of characters in data.

Note that a write operation immediately following a read or rewind will clear out the existing data in the stream.

Robert Cemper · Sep 24, 2021 go to post

%SYS>d ^SECURITY
  
1) User setup
2) Role setup
3) Service setup
4) Resource setup
5) Application setup
6) Auditing setup
8) SSL configuration setup
9) Mobile phone service provider setup
10) OpenAM Identity Services setup
11) Encryption key setup
12) System parameter setup
13) X509 User setup
14) KMIP server setup
15) Exit
 
Option? 1
 
1) Create user
2) Edit user
3) List users
4) Detailed list users
5) Delete user
6) Export users
7) Import users
8) Exit
 
Option?