go to post Julius Kavay · Feb 10 Assuming, your XML stream never has more then MAXSTRING characters AND if you can live with a "quick-and-dirty" solution then try this one Class DC.XML.abc Extends (%RegisteredObject, %XML.Adaptor) { Property def As %String; Property ghi As %String; Property jkl As jkl; ClassMethod Test(str) { if $isobject(str) { set:str.Rewind() xml=str.Read(str.Size) } else { set xml=str } for{set i=$f(xml,"<![CDATA[",$g(i)) q:'i set j=$f(xml,"]]>",i) zt:'j "XMLE" set $e(xml,j-3,j-1)="", $e(xml,i-9,i-1)="", i=i-9 } set rdr=##class(%XML.Reader).%New() if 'rdr.OpenString(xml) write "OpenErr",! quit do rdr.Correlate("abc","DC.XML.abc") while rdr.Next(.abc,.st) { zzdo abc } } } Class DC.XML.jkl Extends (%RegisteredObject, %XML.Adaptor) { Property mno As mno; } Class DC.XML.mno Extends (%RegisteredObject, %XML.Adaptor) { Property pqr As %String; Property stu As %String; } And some tests... set s1="<abc><def>010203</def><ghi>040506</ghi><jkl><mno><pqr>070809</pqr><stu>101112</stu></mno></jkl></abc>" set s2="<abc><def>010203</def><ghi>040506</ghi><jkl><![CDATA[<mno><pqr>070809</pqr><stu>101112</stu></mno>]]></jkl></abc>" do ##class(DC.XML.abc).Test(s1) def................................: 010203 ghi................................: 040506 jkl.mno.pqr........................: 070809 jkl.mno.stu........................: 101112 do ##class(DC.XML.abc).Test(s2) def................................: 010203 ghi................................: 040506 jkl.mno.pqr........................: 070809 jkl.mno.stu........................: 101112 Note: the above ZZDO command takes an oref as argument and prints it, you can replace it with a simple zw oref.
go to post Julius Kavay · Feb 10 I have made several callouts but never a callin (with userlogin), like you trying to do.You wrote, you have several instances (Cache and IRIS) installed, presumably on the same hardware respective OS. Take a look in one of your Cache installation: <InstallDirectory>\dev\Cache\callin\There are three files worth to study: sampcallin.c, sampcallint.c and shdir.cThe callin mechanism does not needs IPs and ports. To find out if anything has changed as a result of switching from Cache to IRIS, please contact WRC.
go to post Julius Kavay · Feb 10 You do not need to reference 'localhost', your C++ program and IRIS are located (and running) on the same 'localhost', the source of your problem is something else
go to post Julius Kavay · Feb 6 Nota Bene: I adopted Robert Cemper's suggestion ISOS, as shorthand for InterSystemsObjectScript According to my opinion, your ISOS example (and the way, how JSON was implemented by ISC), is a mix of a little bit ISOS and a little bit JSON. Why? Take this example: set myObject = { "p1":"abcd", "p2":true, "p3":value, "p4":(sum+2) } <- ObjScript -><-------------------- JSON-------------------------> The example starts with an ISOS syntax and proceeds with JSON syntax.Unfortunately, the last two properties (p3, p4) are invalid JSON properties.So we have a perfect mixture! Remember, ISOS does not have literal constants (like true, false and null) and JSON neither has variables (like value) nor expressions, like (sum+2). Since the current implementation has been in use for several years, a reimplementation is (probably) impossible. With other words, the bottom line is, unwillingly, but we have to accept the status quo...
go to post Julius Kavay · Feb 5 Apparently, someone at ISC got a huge discount on parentheses (the easy solution) instead of requiring that these damned parentheses only be used when the assignment is an expression (and the user-friendly version would be: only when the expression contains the [ or ] operators!).justmy2cents
go to post Julius Kavay · Feb 5 Put your variables into parentheses, i.e. return {"value1":(val1), "value2":(val2)}
go to post Julius Kavay · Dec 7, 2025 Could you please run the following commands in a terminal session: write $zv set exl=##class(%SYS.Python).Import("openpyxl") set wbk=exl."load_workbook"( "your path_and_filename.xlsx" ) set sht=wbk.active set cel=sht.cell(row,col) // ROW and COL should point to a date-cell write cel."data_type" write cel.value.strftime("%d.%m.%Y") Please post a screenshot here, even if you get some kind of error
go to post Julius Kavay · Dec 7, 2025 Excel store date values as decimal values (or better, as flotaing poin) as dddd.tttt where ddd is the number of days since a base date (usually 1899-12-30) and tttt is: numberOfSecondsSinceMidnight / 86400, hence the value, you get is an date-object, and you have to format it according to your needs Class DC.PyExcel Extends %RegisteredObject { ClassMethod Test(fn = "/home/kav/test/readtest.xlsx") { set exl=##class(%SYS.Python).Import("openpyxl") set wbk=exl."load_workbook"(fn) set sht=wbk.active for row=1,2,3 { for col=1:1:3 { set cel=sht.cell(row,col) set typ=cel."data_type" set val=cel.value write ?col-1*15,$case(typ, "s":val, "n":$fn(val,",",2), "d":val.strftime("%a, %d.%m.%Y"), :"") } write ! } } }
go to post Julius Kavay · Nov 19, 2025 I'm just curious, what do you get, if you type write $view(-1,$job) in the output window of Studio?See my screenshot, red=my input, yellow=Studio output
go to post Julius Kavay · Nov 18, 2025 More info, please. What is $stack(0,...) supposed to represent?
go to post Julius Kavay · Nov 18, 2025 Your lines can be shortened to if $system.Process.ClientExecutableName($j) = "..." { ... } else { ... } justmy2cents
go to post Julius Kavay · Nov 18, 2025 Port 1972 is the default port, your actual port may be different. That's why I added a comment to the answer above. Check the parameter file of your installation: for IRIS : see iris.cpf, section [Startup], DefaultPort=... for Cache: see cache.cpf, section [Startup], DefaultPort=...
go to post Julius Kavay · Nov 14, 2025 At least, there are four different ways to get that info ClassMethod StudioTest() { write "Call from Studio1: ",..InStudio1(),! write "Call from Studio2: ",..InStudio2(),! } /// Is the invocation from the Studio? ClassMethod InStudio1() { for i=$st:-1:1 if $st(i,"PLACE")["%Studio.General." ret 1 ret 0 } /// Is there a connection to Superserver? ClassMethod InStudio2() { set port=1972 // see iris.cpf, section [Startup], DefaultPort=... quit $p($v(-1,$j),"^",3)[("|TCP|"_port_"|") } Compiling routine DC.Util.1 Compilation finished successfully in 0.024s. do ##class(DC.Util).StudioTest() Call from Studio1: 1 Call from Studio2: 1 ICINDY:USER>; from PuTTY ------------------- ICINDY:USER>do ##class(DC.Util).StudioTest() Call from Studio1: 0 Call from Studio2: 0 The other two methods are: checking for the presence ofa) a dedicated variable orb) a dedicated objectbut both require a usage of undocumented functions
go to post Julius Kavay · Nov 4, 2025 Well, I'm neither part of the ObjectScript nor the Objects developer team, hence I can't answer the "why" part of your question but fact is, timing mesuremenst show a significat higher speeds for the literal versions: ClassMethod DynObject() { while $zh#1 {} set t1=$zh for i=1:1:1E6 { if ##class(%DynamicArray).%New() } set t1=$zh-t1 while $zh#1 {} set t2=$zh for i=1:1:1E6 { if ##class(%DynamicObject).%New() } set t2=$zh-t2 while $zh#1 {} set t3=$zh for i=1:1:1E6 { if [] } set t3=$zh-t3 while $zh#1 {} set t4=$zh for i=1:1:1E6 { if {} } set t4=$zh-t4 write "Times for : Class Literal Diff",! write "DynArray :", $j(t1,9,3), $j(t3,9,3), $j(t1/t3-1*100,9,2),"%",! write "DynObject :", $j(t2,9,3), $j(t4,9,3), $j(t2/t4-1*100,9,2),"%",! } The output will depend on- IRIS/Cache version in use and- on the underlying hardwareMy values are USER>d ##class(DC.Times).DynObject() Times for : Class Literal Diff DynArray : 0.665 0.401 65.90% DynObject : 0.649 0.401 61.87% Maybe someone else or the WRC has an explanation...
go to post Julius Kavay · Oct 31, 2025 JavaScript uses underscores as separators in (big)number literals. <script>alert(1_234);</script> displays 1234<script>alert(12_345_678_901_234_567_890_123n);</script> displays 12345678901234567890123 Maybe there is a quirk/problem in VS terminal...
go to post Julius Kavay · Sep 28, 2025 Oh yes, you are able to create an instance of Class Your.Page Extends %CSP.Page { Property Name As %String [ InitialExpression = "Joe" ]; } class because the inheritance goes as follows:Your.Page <-- %CSP.Page <-- %Library.Base <-- %Library.SystemBaseand the %Library.SystemBase donates you the %New() method.
go to post Julius Kavay · Sep 28, 2025 My guess is, because abstract classes (%CSP.Page is an abstract class) can't be instantiated, your subclass lacks the generator methos for property initialisation. But there is a simple solution: Class Your.Page Extends (%RegisteredObject, %CSP.Page) { Property Name As %String [ InitialExpression = "Joe" ]; } Well, the world is right again set page=##class(Your.Page).%New() write page.Name --> Joe
go to post Julius Kavay · Aug 18, 2025 Ha ha ha 😂, that's a big mistake. Those are old functions (for even older applications, maintained for backward compatibility only) in the mean time all replaced by the $list...() functions.
go to post Julius Kavay · Aug 18, 2025 Try it this way... Class DC.OldStuff Extends %Persistent [ StorageStrategy = NewStorage1 ] { Property Rec As %Integer [ Identity ]; Property Name As %String; Property City As %String; Property Phone As %String; Storage NewStorage1 { <SQLMap name="Map1"> <Data name="City"> <RetrievalCode>s {*}=$zel(^myGlo("R",{L2}),2)</RetrievalCode> </Data> <Data name="Name"> <RetrievalCode>s {*}=$zel(^myGlo("R",{L2}),1)</RetrievalCode> </Data> <Data name="Phone"> <RetrievalCode>s {*}=$zel(^myGlo("R",{L2}),3)</RetrievalCode> </Data> <Global>^myGlo</Global> <Subscript name="1"> <Expression>"R"</Expression> </Subscript> <Subscript name="2"> <Expression>{Rec}</Expression> </Subscript> <Type>data</Type> </SQLMap> <StreamLocation>^DC.OldS</StreamLocation> <Type>%CacheSQLStorage</Type> } } A short test shows, it works USER>k ^myGlo USER>s ^myGlo("R",1)=$zlp("John,Boston,11-22-33") USER>s ^myGlo("R",5)=$zlp("Laura,New York,333-444-555") USER>s ^myGlo("R",7)=$zlp("Paul,Chicago,556-666-777") USER>d $system.SQL.Shell() SQL Command Line Shell ---------------------------------------------------- The command prefix is currently set to: <<nothing>>. Enter q to quit, ? for help. USER>>select * from DC.OldStuff 3. select * from DC.OldStuff ID City Name Phone Rec 1 Boston John 11-22-33 1 5 New York Laura 333-444-555 5 7 Chicago Paul 556-666-777 7 3 Rows(s) Affected statement prepare time(s)/globals/lines/disk: 0.0003s/5/159/0ms execute time(s)/globals/lines/disk: 0.0003s/13/1136/0ms cached query class: %sqlcq.USER.cls43 --------------------------------------------------------------------------- USER>>quit or as objects USER>s obj=##class(DC.OldStuff).%OpenId(7) USER>w obj.Name,!,obj.City,!,obj.Phone Paul Chicago 556-666-777 USER>